Merge "Merge branch 'upstream' into tizen" into tizen accepted/tizen/unified/20230222.161516
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Fri, 17 Feb 2023 13:59:54 +0000 (13:59 +0000)
committerGerrit Code Review <gerrit@review>
Fri, 17 Feb 2023 13:59:54 +0000 (13:59 +0000)
195 files changed:
FAQ
Makefile.in
README
aclocal.m4
compile
config.h.in
configure
configure.ac
depcomp
docs/examples/crypt_log_usage.c
docs/examples/crypt_luks_usage.c
docs/on-disk-format-luks2.pdf
docs/v2.3.4-ReleaseNotes [new file with mode: 0644]
docs/v2.3.5-ReleaseNotes [new file with mode: 0644]
docs/v2.3.6-ReleaseNotes [new file with mode: 0644]
docs/v2.3.7-ReleaseNotes [new file with mode: 0644]
lib/Makemodule.am
lib/bitlk/bitlk.c
lib/bitlk/bitlk.h
lib/crypt_plain.c
lib/crypto_backend/argon2/argon2.c
lib/crypto_backend/argon2/argon2.h
lib/crypto_backend/argon2/blake2/blake2-impl.h
lib/crypto_backend/argon2/blake2/blake2.h
lib/crypto_backend/argon2/blake2/blake2b.c
lib/crypto_backend/argon2/blake2/blamka-round-opt.h
lib/crypto_backend/argon2/blake2/blamka-round-ref.h
lib/crypto_backend/argon2/core.c
lib/crypto_backend/argon2/core.h
lib/crypto_backend/argon2/encoding.c
lib/crypto_backend/argon2/encoding.h
lib/crypto_backend/argon2/opt.c
lib/crypto_backend/argon2/ref.c
lib/crypto_backend/argon2/thread.c
lib/crypto_backend/argon2/thread.h
lib/crypto_backend/argon2_generic.c
lib/crypto_backend/cipher_check.c
lib/crypto_backend/cipher_generic.c
lib/crypto_backend/crypto_backend.h
lib/crypto_backend/crypto_backend_internal.h
lib/crypto_backend/crypto_cipher_kernel.c
lib/crypto_backend/crypto_gcrypt.c
lib/crypto_backend/crypto_kernel.c
lib/crypto_backend/crypto_nettle.c
lib/crypto_backend/crypto_nss.c
lib/crypto_backend/crypto_openssl.c
lib/crypto_backend/crypto_storage.c
lib/crypto_backend/pbkdf2_generic.c
lib/crypto_backend/pbkdf_check.c
lib/integrity/integrity.c
lib/integrity/integrity.h
lib/internal.h
lib/libcryptsetup.h
lib/libdevmapper.c
lib/loopaes/loopaes.c
lib/loopaes/loopaes.h
lib/luks1/af.c
lib/luks1/af.h
lib/luks1/keyencryption.c
lib/luks1/keymanage.c
lib/luks1/luks.h
lib/luks2/luks2.h
lib/luks2/luks2_digest.c
lib/luks2/luks2_digest_pbkdf2.c
lib/luks2/luks2_disk_metadata.c
lib/luks2/luks2_internal.h
lib/luks2/luks2_json_format.c
lib/luks2/luks2_json_metadata.c
lib/luks2/luks2_keyslot.c
lib/luks2/luks2_keyslot_luks2.c
lib/luks2/luks2_keyslot_reenc.c
lib/luks2/luks2_luks1_convert.c
lib/luks2/luks2_reencrypt.c
lib/luks2/luks2_reencrypt_digest.c [new file with mode: 0644]
lib/luks2/luks2_segment.c
lib/luks2/luks2_token.c
lib/luks2/luks2_token_keyring.c
lib/random.c
lib/setup.c
lib/tcrypt/tcrypt.c
lib/tcrypt/tcrypt.h
lib/utils.c
lib/utils_benchmark.c
lib/utils_blkid.c
lib/utils_blkid.h
lib/utils_crypt.c
lib/utils_crypt.h
lib/utils_device.c
lib/utils_device_locking.c
lib/utils_device_locking.h
lib/utils_devpath.c
lib/utils_dm.h
lib/utils_fips.c
lib/utils_fips.h
lib/utils_io.c
lib/utils_io.h
lib/utils_keyring.c
lib/utils_keyring.h
lib/utils_loop.c
lib/utils_loop.h
lib/utils_pbkdf.c
lib/utils_safe_memory.c
lib/utils_storage_wrappers.c
lib/utils_storage_wrappers.h
lib/utils_wipe.c
lib/verity/rs.h
lib/verity/rs_decode_char.c
lib/verity/rs_encode_char.c
lib/verity/verity.c
lib/verity/verity.h
lib/verity/verity_fec.c
lib/verity/verity_hash.c
lib/volumekey.c
ltmain.sh [changed mode: 0644->0755]
m4/libtool.m4
man/cryptsetup-reencrypt.8
man/cryptsetup.8
man/integritysetup.8
man/veritysetup.8
misc/luks2_keyslot_example/keyslot_test.c
misc/luks2_keyslot_example/keyslot_test_remote_pass.c
missing
packaging/cryptsetup.spec
po/POTFILES.in
po/cryptsetup.pot
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/es.gmo
po/es.po
po/fi.po
po/fr.gmo
po/fr.po
po/id.po
po/it.gmo
po/it.po
po/ja.gmo
po/ja.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt_BR.gmo
po/pt_BR.po
po/ru.gmo
po/ru.po
po/sr.gmo
po/sr.po
po/sv.gmo
po/sv.po
po/uk.gmo
po/uk.po
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
src/cryptsetup.c
src/cryptsetup.h
src/cryptsetup_reencrypt.c
src/integritysetup.c
src/utils_blockdev.c
src/utils_luks2.c
src/utils_password.c
src/utils_tools.c
src/veritysetup.c
tests/Makefile.am
tests/Makefile.in
tests/align-test2
tests/api-test-2.c
tests/api-test.c
tests/api_test.h
tests/bitlk-compat-test
tests/bitlk-images.tar.xz
tests/compat-test
tests/compat-test2
tests/crypto-vectors.c
tests/cryptsetup-valg-supps
tests/device-test
tests/differ.c
tests/generators/generate-luks2-segment-wrong-backup-key-0.img.sh [new file with mode: 0755]
tests/generators/generate-luks2-segment-wrong-backup-key-1.img.sh [new file with mode: 0755]
tests/integrity-compat-test
tests/loopaes-test
tests/luks2-reencryption-mangle-test [new file with mode: 0755]
tests/luks2-reencryption-test
tests/luks2-validation-test
tests/reencryption-compat-test
tests/reencryption-compat-test2
tests/test_utils.c
tests/unit-utils-io.c
tests/valg-api.sh
tests/valg.sh
tests/verity-compat-test

diff --git a/FAQ b/FAQ
index 31060dd..d829ad3 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -51,7 +51,7 @@ A. Contributors
   security model BEFORE you face such a disaster!  In particular, make
   sure you have a current header backup before doing any potentially
   dangerous operations.  The LUKS2 header should be a bit more resilient
-  as critical data starts later and is stored twice, but you can decidely
+  as critical data starts later and is stored twice, but you can decidedly
   still destroy it or a keyslot permanently by accident.
 
   DEBUG COMMANDS: While the --debug and --debug-json options should not
@@ -112,7 +112,7 @@ A. Contributors
   characters may have different encoding depending on system configuration
   and your passphrase will not work with a different encoding.  A table of
   the standardized first 128 ASCII characters can, e.g.  be found on
-  http://en.wikipedia.org/wiki/ASCII
+  https://en.wikipedia.org/wiki/ASCII
 
   KEYBOARD NUM-PAD: Apparently some pre-boot authentication environments
   (these are done by the distro, not by cryptsetup, so complain there)
@@ -173,7 +173,7 @@ A. Contributors
   which means distribution is unlimited, you may create derived works, but
   attributions to original authors and this license statement must be
   retained and the derived work must be under the same license.  See
-  http://creativecommons.org/licenses/by-sa/3.0/ for more details of the
+  https://creativecommons.org/licenses/by-sa/3.0/ for more details of the
   license.
 
   Side note: I did text license research some time ago and I think this
@@ -191,7 +191,7 @@ A. Contributors
 
   * 1.7 Is there a mailing-list?
 
-  Instructions on how to subscribe to the mailing-list are at on the
+  Instructions on how to subscribe to the mailing-list are on the
   project website.  People are generally helpful and friendly on the
   list.
 
@@ -241,7 +241,7 @@ A. Contributors
   * 2.1 LUKS Container Setup mini-HOWTO
 
   This item tries to give you a very brief list of all the steps you
-  should go though when creating a new LUKS encrypted container, i.e. 
+  should go through when creating a new LUKS encrypted container, i.e.
   encrypted disk, partition or loop-file.
 
   01) All data will be lost, if there is data on the target, make a
@@ -268,7 +268,7 @@ A. Contributors
 
   This can take a while.  To get a progress indicator, you can use the
   tool dd_rescue (->google) instead or use my stream meter "wcs" (source
-  here: http://www.tansi.org/tools/index.html) in the following fashion:
+  here: https://www.tansi.org/tools/index.html) in the following fashion:
 
     cat /dev/zero | wcs > <target device>
 
@@ -295,7 +295,7 @@ A. Contributors
 
   Just follow the on-screen instructions.
 
-  Note: Passprase iteration count is based on time and hence security
+  Note: Passphrase iteration count is based on time and hence security
   level depends on CPU power of the system the LUKS container is created
   on.  For example on a Raspberry Pi and LUKS1, I found some time ago that
   the iteration count is 15 times lower than for a regular PC (well, for
@@ -343,7 +343,7 @@ A. Contributors
       See Section 6 for details.
 
   Done.  You can now use the encrypted file system to store data.  Be sure
-  to read though the rest of the FAQ, these are just the very basics.  In
+  to read through the rest of the FAQ, these are just the very basics.  In
   particular, there are a number of mistakes that are easy to make, but
   will compromise your security.
 
@@ -473,7 +473,7 @@ A. Contributors
   That is it. Reboot or start it manually to activate encrypted swap. 
   Manual start would look like this:
 
-    /etc/init.d/crypdisks start
+    /etc/init.d/cryptdisks start
     swapon /dev/mapper/swap
 
 
@@ -677,7 +677,7 @@ A. Contributors
   A bit more information on the process by which transactional guarantees
   are implemented can be found here:
 
-  http://lwn.net/Articles/400541/
+  https://lwn.net/Articles/400541/
 
   Please note that these "guarantees" are weaker than they appear to be. 
   One problem is that quite a few disks lie to the OS about having flushed
@@ -705,10 +705,6 @@ A. Contributors
   the key from STDIN and write it there with your own tool that in turn
   gets the key from the more secure key storage.
 
-  For TPM support, you may want to have a look at tpm-luks at
-  https://github.com/shpedoikal/tpm-luks.  Note that tpm-luks is not
-  related to the cryptsetup project.
-
 
   * 2.15 Can I resize a dm-crypt or LUKS container?
 
@@ -787,7 +783,7 @@ A. Contributors
   The conventional recommendation if you want to do more than just a
   zero-wipe is to use something like
 
-    cat /dev/urandom >  <taget-device>
+    cat /dev/urandom >  <target-device>
 
   That used to very slow and painful at 10-20MB/s on a fast computer, but
   newer kernels can give you > 200MB/s (depending on hardware).  An
@@ -811,7 +807,7 @@ A. Contributors
     dd_rescue -w /dev/zero /dev/mapper/to_be_wiped
 
   Progress-indicator by my "wcs" stream meter (available from
-  http://www.tansi.org/tools/index.html ):
+  https://www.tansi.org/tools/index.html ):
 
     cat /dev/zero | wcs > /dev/mapper/to_be_wiped
 
@@ -821,7 +817,7 @@ A. Contributors
   Remove the mapping at the end and you are done.
 
 
-  * 2.20 How to I wipe only the LUKS header?
+  * 2.20 How do I wipe only the LUKS header?
 
   This does _not_ describe an emergency wipe procedure, see Item 5.4 for
   that.  This procedure here is intended to be used when the data should
@@ -911,10 +907,10 @@ A. Contributors
   much longer.  Also take into account that up to 8 key-slots (LUKS2: up
   to 32 key-slots) have to be tried in order to find the right one.
 
-  If this is problem, you can add another key-slot using the slow machine
-  with the same passphrase and then remove the old key-slot.  The new
-  key-slot will have the unlock time adjusted to the slow machine.  Use
-  luksKeyAdd and then luksKillSlot or luksRemoveKey.  You can also use 
+  If this is the problem, you can add another key-slot using the slow
+  machine with the same passphrase and then remove the old key-slot.  The
+  new key-slot will have the unlock time adjusted to the slow machine.
+  Use luksKeyAdd and then luksKillSlot or luksRemoveKey.  You can also use
   the -i option to reduce iteration time (and security level) when setting 
   a passphrase.  Default is 1000 (1 sec) for LUKS1 and 2000 (2sec) for
   LUKS2.
@@ -973,7 +969,7 @@ A. Contributors
   that is intact.
 
   In order to find out whether a key-slot is damaged one has to look for
-  "non-random looking" data in it.  There is a tool that automatizes this
+  "non-random looking" data in it.  There is a tool that automates this
   for LUKS1 in the cryptsetup distribution from version 1.6.0 onwards.  It
   is located in misc/keyslot_checker/.  Instructions how to use and how to
   interpret results are in the README file.  Note that this tool requires
@@ -991,7 +987,7 @@ A. Contributors
   LUKS and dm-crypt can give the RAM quite a workout, especially when
   combined with software RAID.  In particular the combination RAID5 +
   LUKS1 + XFS seems to uncover RAM problems that do not cause obvious
-  problems otherwise.  Symptoms vary, but often the problem manifest
+  problems otherwise.  Symptoms vary, but often the problem manifests
   itself when copying large amounts of data, typically several times
   larger than your main memory.
 
@@ -1085,7 +1081,7 @@ A. Contributors
 5. Security Aspects
 
 
-  * 5.1 How long is a secure passphrase ?
+  * 5.1 How long is a secure passphrase?
 
   This is just the short answer.  For more info and explanation of some of
   the terms used in this item, read the rest of Section 5.  The actual
@@ -1124,7 +1120,7 @@ A. Contributors
   i.e.  I estimated the attack to be too easy.  Nobody noticed ;-) On the
   plus side, the tables are now (2017) pretty much accurate.
 
-  More references can be found a the end of this document.  Note that
+  More references can be found at the end of this document.  Note that
   these are estimates from the defender side, so assuming something is
   easier than it actually is is fine.  An attacker may still have
   significantly higher cost than estimated here.
@@ -1215,7 +1211,7 @@ A. Contributors
   already lock you up.  Hidden containers (encryption hidden within
   encryption), as possible with Truecrypt, do not help either.  They will
   just assume the hidden container is there and unless you hand over the
-  key, you will stay locked up.  Don't have a hidden container?  Though
+  key, you will stay locked up.  Don't have a hidden container?  Tough
   luck.  Anybody could claim that.
 
   Still, if you are concerned about the LUKS header, use plain dm-crypt
@@ -1271,7 +1267,7 @@ A. Contributors
   single overwrite could be enough.  If in doubt, use physical destruction
   in addition.  Here is a link to some current research results on erasing
   SSDs and FLASH drives:
-  http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf
+  https://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf
 
   Keep in mind to also erase all backups.
 
@@ -1295,7 +1291,7 @@ A. Contributors
   medium.
 
   If your backup is on magnetic tape, I advise physical destruction by
-  shredding or burning, after (!) overwriting .  The problem with magnetic
+  shredding or burning, after (!) overwriting.  The problem with magnetic
   tape is that it has a higher dynamic range than HDDs and older data may
   well be recoverable after overwrites.  Also write-head alignment issues
   can lead to data not actually being deleted during overwrites.
@@ -1317,7 +1313,7 @@ A. Contributors
   Overwriting the LUKS header in part or in full is the most common reason
   why access to LUKS containers is lost permanently.  Overwriting can be
   done in a number of fashions, like creating a new filesystem on the raw
-  LUKS partition, making the raw partition part of a raid array and just
+  LUKS partition, making the raw partition part of a RAID array and just
   writing to the raw partition.
 
   The LUKS1 header contains a 256 bit "salt" per key-slot and without that
@@ -1409,7 +1405,7 @@ A. Contributors
   combination of 12 truly random letters and digits.
 
   For passphrase generation, do not use lines from very well-known texts
-  (religious texts, Harry potter, etc.) as they are too easy to guess. 
+  (religious texts, Harry Potter, etc.) as they are too easy to guess.
   For example, the total Harry Potter has about 1'500'000 words (my
   estimation).  Trying every 64 character sequence starting and ending at
   a word boundary would take only something like 20 days on a single CPU
@@ -1612,8 +1608,9 @@ A. Contributors
 
     cryptsetup -c aes-xts-plain64 luksFormat <device>
 
-  There is a potential security issue with XTS mode and large blocks. 
-  LUKS and dm-crypt always use 512B blocks and the issue does not apply.
+  There is a potential security issue with XTS mode and blocks larger
+  than 2^20 bytes or so. LUKS and dm-crypt always use smaller blocks 
+  and the issue does not apply.
 
 
   * 5.17 Is LUKS FIPS-140-2 certified?
@@ -1701,8 +1698,9 @@ A. Contributors
   can demand encryption keys.
 
   Here is an additional reference for some problems with plausible
-  deniability: http://www.schneier.com/paper-truecrypt-dfs.pdf I strongly
-  suggest you read it.
+  deniability:
+  https://www.schneier.com/academic/paperfiles/paper-truecrypt-dfs.pdf
+  I strongly suggest you read it.
 
   So, no, I will not provide any instructions on how to do it with plain
   dm-crypt or LUKS.  If you insist on shooting yourself in the foot, you
@@ -1847,7 +1845,7 @@ A. Contributors
   document.  It does require advanced skills in this age of pervasive
   surveillance.)
 
-  Hence, LUKS has not kill option because it would do much more harm than
+  Hence, LUKS has no kill option because it would do much more harm than
   good.
 
   Still, if you have a good use-case (i.e.  non-abstract real-world
@@ -1917,7 +1915,7 @@ A. Contributors
 
     cryptsetup --header <file> luksOpen <device> </dev/mapper/name>
 
-  If that unlocks your keys-lot, you are good. Do not forget to close
+  If that unlocks your key-slot, you are good. Do not forget to close
   the device again.
 
   Under some circumstances (damaged header), this fails.  Then use the
@@ -2037,7 +2035,7 @@ A. Contributors
 
 
   * 6.5 Do I need a backup of the full partition? Would the header
-    and  key-slots not be enough?
+    and key-slots not be enough?
 
   Backup protects you against two things: Disk loss or corruption and user
   error.  By far the most questions on the dm-crypt mailing list about how
@@ -2631,7 +2629,7 @@ offset  length  name                  data type  description
   safe under these circumstances, then you have bigger problems than this
   somewhat expected behavior.
 
-  The CVE was exagerrated and should not be assigned to upstream
+  The CVE was exaggerated and should not be assigned to upstream
   cryptsetup in the first place (it is a distro specific initrd issue). 
   It was driven more by a try to make a splash for self-aggrandizement,
   than by any actual security concerns.  Ignore it.
@@ -2780,7 +2778,7 @@ offset  length  name                  data type  description
 
   Mostly not.  The header has changed in its structure, but the
   crytpgraphy is the same.  The one exception is that PBKDF2 has been
-  replaced by Argon2 to give better resilience against attacks attacks by
+  replaced by Argon2 to give better resilience against attacks by
   graphics cards and other hardware with lots of computing power but
   limited local memory per computing element.
 
@@ -2827,7 +2825,7 @@ offset  length  name                  data type  description
   there to prevent precomputation.
 
   The problem with that is that if you use a graphics card, you can massively
-  speed up these computations as PBKDF2 needs very little memeory to compute
+  speed up these computations as PBKDF2 needs very little memory to compute
   it.  A graphics card is (grossly simplified) a mass of small CPUs with some
   small very fast local memory per CPU and a large slow memory (the 4/6/8 GB
   a current card may have).  If you can keep a computation in the small,
@@ -2840,7 +2838,7 @@ offset  length  name                  data type  description
   if you set, for example, 4GB of memory, computing Argon2 on a graphics card
   with around 100kB of memory per "CPU" makes no sense at all because it is
   far too slow.  An attacker has hence to use real CPUs and furthermore is
-  limited by main memory bandwith.
+  limited by main memory bandwidth.
 
   Hence the large amount of memory used is a security feature and should not
   be turned off or reduced.  If you really (!) understand what you are doing
@@ -2864,7 +2862,7 @@ offset  length  name                  data type  description
   second/slot unlock time, LUKS2 adjusts the memory parameter down if
   needed.  In the other direction, it will respect available memory and not
   exceed it.  On a current PC, the memory parameter will be somewhere around
-  1GB, which should quite generous.  The minimum I was able to set in an
+  1GB, which should be quite generous.  The minimum I was able to set in an
   experiment with "-i 1" was 400kB of memory and that is too low to be
   secure.  A Raspberry Pi would probably end up somewhere around 50MB (have
   not tried it) and that should still be plenty.
@@ -2994,7 +2992,7 @@ offset  length  name                  data type  description
 
   - http://news.electricalchemy.net/2009/10/password-cracking-in-cloud-part-5.html
 
-  - http://it.slashdot.org/story/12/12/05/0623215/new-25-gpu-monster-devours-strong-passwords-in-minutes
+  - https://it.slashdot.org/story/12/12/05/0623215/new-25-gpu-monster-devours-strong-passwords-in-minutes
 
   * Tools
 
index ab032a7..989521e 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -292,6 +292,7 @@ am_libcryptsetup_la_OBJECTS = lib/libcryptsetup_la-setup.lo \
        lib/luks2/libcryptsetup_la-luks2_keyslot_luks2.lo \
        lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo \
        lib/luks2/libcryptsetup_la-luks2_reencrypt.lo \
+       lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo \
        lib/luks2/libcryptsetup_la-luks2_segment.lo \
        lib/luks2/libcryptsetup_la-luks2_token_keyring.lo \
        lib/luks2/libcryptsetup_la-luks2_token.lo \
@@ -530,6 +531,7 @@ am__depfiles_remade = lib/$(DEPDIR)/libcryptsetup_la-base64.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo \
+       lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo \
        lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo \
@@ -626,9 +628,6 @@ am__define_uniq_tagged_files = \
   unique=`for i in $$list; do \
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
        $(srcdir)/lib/Makemodule.am \
@@ -679,6 +678,8 @@ am__relativize = \
 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
 GZIP_ENV = --best
 DIST_TARGETS = dist-xz dist-gzip
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
 distuninstallcheck_listfiles = find . -type f -print
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@@ -701,6 +702,8 @@ CPPFLAGS = @CPPFLAGS@
 CRYPTO_CFLAGS = @CRYPTO_CFLAGS@
 CRYPTO_LIBS = @CRYPTO_LIBS@
 CRYPTO_STATIC_LIBS = @CRYPTO_STATIC_LIBS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFAULT_LUKS2_LOCK_DIR_PERMS = @DEFAULT_LUKS2_LOCK_DIR_PERMS@
 DEFAULT_LUKS2_LOCK_PATH = @DEFAULT_LUKS2_LOCK_PATH@
@@ -718,6 +721,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
@@ -1005,6 +1009,7 @@ libcryptsetup_la_SOURCES = \
        lib/luks2/luks2_keyslot_luks2.c \
        lib/luks2/luks2_keyslot_reenc.c \
        lib/luks2/luks2_reencrypt.c     \
+       lib/luks2/luks2_reencrypt_digest.c      \
        lib/luks2/luks2_segment.c       \
        lib/luks2/luks2_token_keyring.c \
        lib/luks2/luks2_token.c         \
@@ -1493,6 +1498,8 @@ lib/luks2/libcryptsetup_la-luks2_keyslot_reenc.lo:  \
        lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp)
 lib/luks2/libcryptsetup_la-luks2_reencrypt.lo:  \
        lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp)
+lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo:  \
+       lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp)
 lib/luks2/libcryptsetup_la-luks2_segment.lo:  \
        lib/luks2/$(am__dirstamp) lib/luks2/$(DEPDIR)/$(am__dirstamp)
 lib/luks2/libcryptsetup_la-luks2_token_keyring.lo:  \
@@ -1670,6 +1677,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo@am__quote@ # am--include-marker
@@ -2138,6 +2146,13 @@ lib/luks2/libcryptsetup_la-luks2_reencrypt.lo: lib/luks2/luks2_reencrypt.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_reencrypt.lo `test -f 'lib/luks2/luks2_reencrypt.c' || echo '$(srcdir)/'`lib/luks2/luks2_reencrypt.c
 
+lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo: lib/luks2/luks2_reencrypt_digest.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo `test -f 'lib/luks2/luks2_reencrypt_digest.c' || echo '$(srcdir)/'`lib/luks2/luks2_reencrypt_digest.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib/luks2/luks2_reencrypt_digest.c' object='lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -c -o lib/luks2/libcryptsetup_la-luks2_reencrypt_digest.lo `test -f 'lib/luks2/luks2_reencrypt_digest.c' || echo '$(srcdir)/'`lib/luks2/luks2_reencrypt_digest.c
+
 lib/luks2/libcryptsetup_la-luks2_segment.lo: lib/luks2/luks2_segment.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcryptsetup_la_CPPFLAGS) $(CPPFLAGS) $(libcryptsetup_la_CFLAGS) $(CFLAGS) -MT lib/luks2/libcryptsetup_la-luks2_segment.lo -MD -MP -MF lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Tpo -c -o lib/luks2/libcryptsetup_la-luks2_segment.lo `test -f 'lib/luks2/luks2_segment.c' || echo '$(srcdir)/'`lib/luks2/luks2_segment.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Tpo lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo
@@ -2409,7 +2424,6 @@ cscopelist-am: $(am__tagged_files)
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
        -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
 distdir: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) distdir-am
 
@@ -2555,7 +2569,7 @@ distcheck: dist
            $(DISTCHECK_CONFIGURE_FLAGS) \
            --srcdir=../.. --prefix="$$dc_install_base" \
          && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
          && $(MAKE) $(AM_MAKEFLAGS) check \
          && $(MAKE) $(AM_MAKEFLAGS) install \
          && $(MAKE) $(AM_MAKEFLAGS) installcheck \
@@ -2610,6 +2624,8 @@ check-am: all-am
 check: check-recursive
 all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) \
                config.h
+install-sbinPROGRAMS: install-libLTLIBRARIES
+
 installdirs: installdirs-recursive
 installdirs-am:
        for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(tmpfilesddir)" "$(DESTDIR)$(includedir)"; do \
@@ -2738,6 +2754,7 @@ distclean: distclean-recursive
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo
+       -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo
@@ -2864,6 +2881,7 @@ maintainer-clean: maintainer-clean-recursive
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_keyslot_reenc.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_luks1_convert.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt.Plo
+       -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_reencrypt_digest.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_segment.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token.Plo
        -rm -f lib/luks2/$(DEPDIR)/libcryptsetup_la-luks2_token_keyring.Plo
diff --git a/README b/README
index 613aa09..1e7973f 100644 (file)
--- a/README
+++ b/README
@@ -14,7 +14,8 @@ FAQ:
 MAILING LIST:
 
       E-MAIL: dm-crypt@saout.de
-      URL:    http://www.saout.de/mailman/listinfo/dm-crypt
+      URL:    https://www.saout.de/mailman/listinfo/dm-crypt
+      ARCHIVE: https://lore.kernel.org/dm-crypt/
 
 DOWNLOAD:
 
@@ -28,4 +29,4 @@ SOURCE CODE:
 NLS (PO TRANSLATIONS):
 
       PO files are maintained by:
-          http://translationproject.org/domain/cryptsetup.html
+          https://translationproject.org/domain/cryptsetup.html
index b5fedd0..17e443e 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
 
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
-[m4_warning([this file was generated for autoconf 2.69.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
 # libgcrypt.m4 - Autoconf macros to detect libgcrypt
-# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018 g10 Code GmbH
+# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020 g10 Code GmbH
 #
 # This file is free software; as a special exception the author gives
 # unlimited permission to copy and/or distribute it, with or without
@@ -31,15 +31,15 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 #
-# Last-changed: 2018-11-13
+# Last-changed: 2020-09-27
 
 
 dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
 dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
 dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
-dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
+dnl MINIMUM-VERSION is a string with the version number optionally prefixed
 dnl with the API version to also check the API compatibility. Example:
-dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed
+dnl a MINIMUM-VERSION of 1:1.2.5 won't pass the test unless the installed
 dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1.  Using
 dnl this features allows to prevent build against newer versions of libgcrypt
 dnl with a changed API.
@@ -52,7 +52,7 @@ dnl
 AC_DEFUN([AM_PATH_LIBGCRYPT],
 [ AC_REQUIRE([AC_CANONICAL_HOST])
   AC_ARG_WITH(libgcrypt-prefix,
-            AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
+            AS_HELP_STRING([--with-libgcrypt-prefix=PFX],
                            [prefix where LIBGCRYPT is installed (optional)]),
      libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
   if test x"${LIBGCRYPT_CONFIG}" = x ; then
@@ -464,7 +464,7 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
 ])dnl PKG_CHECK_VAR
 
-# Copyright (C) 2002-2020 Free Software Foundation, Inc.
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -479,7 +479,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.16'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.16.2], [],
+m4_if([$1], [1.16.5], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -495,14 +495,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.2])dnl
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -554,7 +554,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2020 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -585,7 +585,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2020 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -776,7 +776,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2020 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -844,7 +844,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -872,6 +872,10 @@ m4_defn([AC_PROG_CC])
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
 [AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+  [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+  [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -908,7 +912,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
 m4_if(
-  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
   [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
@@ -960,6 +964,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
                  [m4_define([AC_PROG_OBJCXX],
                             m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+  CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+  ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+  CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
 AC_REQUIRE([AM_SILENT_RULES])dnl
 dnl The testsuite driver may need to know about EXEEXT, so add the
 dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
@@ -1041,7 +1059,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1062,7 +1080,7 @@ if test x"${install_sh+set}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2020 Free Software Foundation, Inc.
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1083,7 +1101,7 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1126,7 +1144,7 @@ AC_SUBST([am__quote])])
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2020 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1147,12 +1165,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
 if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
+  MISSING="\${SHELL} '$am_aux_dir/missing'"
 fi
 # Use eval to expand $SHELL
 if eval "$MISSING --is-lightweight"; then
@@ -1165,7 +1178,7 @@ fi
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1194,7 +1207,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2020 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1241,7 +1254,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1260,7 +1273,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1341,7 +1354,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2020 Free Software Foundation, Inc.
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1401,7 +1414,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1429,7 +1442,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2020 Free Software Foundation, Inc.
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1448,7 +1461,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2020 Free Software Foundation, Inc.
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/compile b/compile
index 23fcba0..df363c8 100755 (executable)
--- a/compile
+++ b/compile
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2020 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
index 0e70551..5c7632d 100644 (file)
@@ -3,6 +3,9 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* maximum integritysetup keyfile size (in KiB) */
+#undef DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB
+
 /* maximum keyfile size (in KiB) */
 #undef DEFAULT_KEYFILE_SIZE_MAXKB
 
@@ -54,7 +57,7 @@
 /* default LUKS format version */
 #undef DEFAULT_LUKS_FORMAT
 
-/* maximum keyfile size (in characters) */
+/* maximum passphrase size (in characters) */
 #undef DEFAULT_PASSPHRASE_SIZE_MAX
 
 /* cipher for plain mode */
 /* Define to 1 if you have the <malloc.h> header file. */
 #undef HAVE_MALLOC_H
 
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
 
 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
 #undef HAVE_NDIR_H
 /* Define to 1 if you have the <nettle/version.h> header file. */
 #undef HAVE_NETTLE_VERSION_H
 
+/* Define to 1 if you have the `passwdqc_params_free' function. */
+#undef HAVE_PASSWDQC_PARAMS_FREE
+
 /* Define to 1 if you have the `posix_fallocate' function. */
 #undef HAVE_POSIX_FALLOCATE
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
-/* Define to 1 if you have the `strerror_r' function. */
+/* Define if you have `strerror_r'. */
 #undef HAVE_STRERROR_R
 
 /* Define to 1 if you have the <strings.h> header file. */
 /* Define to 1 if you have the <uuid/uuid.h> header file. */
 #undef HAVE_UUID_UUID_H
 
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
 /* Define as const if the declaration of iconv() needs const. */
 #undef ICONV_CONST
 
 /* passwdqc library config file */
 #undef PASSWDQC_CONFIG_FILE
 
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
 /* Define to 1 if strerror_r returns char *. */
 /* Use internal PBKDF2 */
 #undef USE_INTERNAL_PBKDF2
 
+/* Use LUKS2 online reencryption extension */
+#undef USE_LUKS2_REENCRYPTION
+
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
+/* Enable general extensions on macOS.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
 /* Enable GNU extensions on systems that have them.  */
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
-/* Enable threading extensions on Solaris.  */
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+   This macro does not affect the system headers' behavior.
+   A future release of Autoconf may stop defining this macro.  */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+   Enable NetBSD compatibility extensions on Minix.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+   Oddly enough, this does nothing on OpenBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior.  */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior.  */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
 #endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
 /* Enable extensions on HP NonStop.  */
 #ifndef _TANDEM_SOURCE
 # undef _TANDEM_SOURCE
 #endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
+/* Enable X/Open extensions.  Define to 500 only if necessary
+   to make mbstate_t available.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
 #endif
 
 
 # endif
 #endif
 
-/* Enable large inode numbers on Mac OS X 10.5.  */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif
-
 /* Number of bits in a file offset, on hosts where this is settable. */
 #undef _FILE_OFFSET_BITS
 
 /* Define for large files, on AIX-style hosts. */
 #undef _LARGE_FILES
 
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const
 
 
 /* Define to the equivalent of the C99 'restrict' keyword, or to
    nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
+   supported only directly.  */
 #undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict or
-   __restrict__, even though the corresponding Sun C compiler ends up with
-   "#define restrict _Restrict" or "#define restrict __restrict__" in the
-   previous line.  Perhaps some future version of Sun C++ will work with
-   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
+/* Work around a bug in older versions of Sun C++, which did not
+   #define __restrict__ or support _Restrict or __restrict__
+   even though the corresponding Sun C compiler ended up with
+   "#define restrict _Restrict" or "#define restrict __restrict__"
+   in the previous line.  This workaround can be removed once
+   we assume Oracle Developer Studio 12.5 (2016) or later.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__
 # define _Restrict
 # define __restrict__
 #endif
index 145be42..500a306 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for cryptsetup 2.3.3.
+# Generated by GNU Autoconf 2.71 for cryptsetup 2.3.7.
 #
 #
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -31,46 +34,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -94,8 +90,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -107,30 +107,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 # Use a proper internal environment variable to ensure we don't fall
   # into an infinite loop, continuously re-executing ourselves.
@@ -152,20 +132,22 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
   fi
   # We don't want this to propagate to other subprocesses.
           { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '\${1+\"\$@\"}'='\"\$@\"'
   setopt NO_GLOB_SUBST
-else
+else \$as_nop
   case \`(set -o) 2>/dev/null\` in #(
   *posix*) :
     set -o posix ;; #(
@@ -185,18 +167,20 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
 as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
 
-else
+else \$as_nop
   exitcode=1; echo positional parameters were not saved.
 fi
 test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
 test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1
 
   test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
     ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
@@ -204,31 +188,40 @@ test \$(( 1 + 1 )) = 2 || exit 1
     ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
     PATH=/empty FPATH=/empty; export PATH FPATH
     test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
-      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null
+then :
   as_have_required=yes
-else
+else $as_nop
   as_have_required=no
 fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
 
-else
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
   as_found=:
   case $as_dir in #(
         /*)
           for as_base in sh bash ksh sh5; do
             # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
+            as_shell=$as_dir$as_base
             if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                   as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
   CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                  if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
   break 2
 fi
 fi
@@ -236,14 +229,21 @@ fi
        esac
   as_found=false
 done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
 IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
 
 
-      if test "x$CONFIG_SHELL" != x; then :
+      if test "x$CONFIG_SHELL" != x
+then :
   export CONFIG_SHELL
              # We cannot yet assume a decent shell, so we have to provide a
 # neutralization value for shells without unset; and this also
@@ -261,18 +261,19 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
 exit 255
 fi
 
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+    if test x$as_have_required = xno
+then :
+  printf "%s\n" "$0: This script requires a shell more modern than all"
+  printf "%s\n" "$0: the shells that I found on your system."
+  if test ${ZSH_VERSION+y} ; then
+    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
 $0: including any error possibly output before this
 $0: message. Then install a modern shell, or manually run
 $0: the script under such a shell if you do have one."
@@ -299,6 +300,7 @@ as_fn_unset ()
 }
 as_unset=as_fn_unset
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -316,6 +318,14 @@ as_fn_exit ()
   as_fn_set_status $1
   exit $1
 } # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_mkdir_p
 # -------------
@@ -330,7 +340,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -339,7 +349,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -378,12 +388,13 @@ as_fn_executable_p ()
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -395,18 +406,27 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
   }
 fi # as_fn_arith
 
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
 # ----------------------------------------
@@ -418,9 +438,9 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -447,7 +467,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -491,7 +511,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
   # already done that, so ensure we don't try to do so again and fall
@@ -505,6 +525,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   exit
 }
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -518,6 +542,13 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -587,8 +618,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='cryptsetup'
 PACKAGE_TARNAME='cryptsetup'
-PACKAGE_VERSION='2.3.3'
-PACKAGE_STRING='cryptsetup 2.3.3'
+PACKAGE_VERSION='2.3.7'
+PACKAGE_STRING='cryptsetup 2.3.7'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -596,40 +627,36 @@ ac_unique_file="src/cryptsetup.c"
 ac_default_prefix=/usr
 # Factoring default headers for most tests.
 ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
 #endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
 # include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
 #endif
 #ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
 # include <string.h>
 #endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
 #ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #endif
 #ifdef HAVE_STDINT_H
 # include <stdint.h>
 #endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
+ac_header_c_list=
 gt_needs=
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
@@ -743,10 +770,10 @@ ac_ct_DUMPBIN
 DUMPBIN
 LD
 FGREP
-SED
-LIBTOOL
 EGREP
 GREP
+SED
+LIBTOOL
 CPP
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
@@ -772,6 +799,9 @@ build_os
 build_vendor
 build_cpu
 build
+CSCOPE
+ETAGS
+CTAGS
 am__untar
 am__tar
 AMTAR
@@ -859,6 +889,7 @@ enable_largefile
 enable_nls
 with_libintl_prefix
 enable_fips
+enable_luks2_reencryption
 enable_pwquality
 enable_passwdqc
 enable_static_cryptsetup
@@ -896,6 +927,7 @@ with_luks2_keyslot_keybits
 with_loopaes_cipher
 with_loopaes_keybits
 with_keyfile_size_maxkb
+with_integrity_keyfile_size_maxkb
 with_passphrase_size_max
 with_verity_hash
 with_verity_data_block
@@ -1007,8 +1039,6 @@ do
   *)    ac_optarg=yes ;;
   esac
 
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
   case $ac_dashdash$ac_option in
   --)
     ac_dashdash=yes ;;
@@ -1049,9 +1079,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -1075,9 +1105,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -1288,9 +1318,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1304,9 +1334,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1350,9 +1380,9 @@ Try \`$0 --help' for more information"
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
     : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
@@ -1368,7 +1398,7 @@ if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
     fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+    *)     printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
 
@@ -1432,7 +1462,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_myself" : 'X\(//\)[^/]' \| \
         X"$as_myself" : 'X\(//\)$' \| \
         X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -1489,7 +1519,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures cryptsetup 2.3.3 to adapt to many kinds of systems.
+\`configure' configures cryptsetup 2.3.7 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1560,7 +1590,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of cryptsetup 2.3.3:";;
+     short | recursive ) echo "Configuration of cryptsetup 2.3.7:";;
    esac
   cat <<\_ACEOF
 
@@ -1585,6 +1615,8 @@ Optional Features:
   --disable-largefile     omit support for large files
   --disable-nls           do not use Native Language Support
   --enable-fips           enable FIPS mode restrictions
+  --disable-luks2-reencryption
+                          disable LUKS2 online reencryption extension
   --enable-pwquality      enable password quality checking using pwquality
                           library
   --enable-passwdqc[=CONFIG_PATH]
@@ -1669,8 +1701,12 @@ Optional Packages:
   --with-loopaes-keybits  default key length in bits for loop-AES mode [256]
   --with-keyfile-size-maxkb
                           default maximum keyfile size (in KiB) [8192]
+  --with-integrity-keyfile-size-maxkb
+                          default maximum integritysetup keyfile size (in KiB)
+                          [4]
   --with-passphrase-size-max
-                          default maximum keyfile size (in characters) [512]
+                          default maximum passphrase size (in characters)
+                          [512]
   --with-verity-hash      default hash function for verity mode [sha256]
   --with-verity-data-block
                           default data block size for verity mode [4096]
@@ -1758,9 +1794,9 @@ if test "$ac_init_help" = "recursive"; then
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1788,7 +1824,8 @@ esac
 ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
     cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
+    # Check for configure.gnu first; this name is used for a wrapper for
+    # Metaconfig's "Configure" on case-insensitive file systems.
     if test -f "$ac_srcdir/configure.gnu"; then
       echo &&
       $SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1796,7 +1833,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1805,10 +1842,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-cryptsetup configure 2.3.3
-generated by GNU Autoconf 2.69
+cryptsetup configure 2.3.7
+generated by GNU Autoconf 2.71
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1825,14 +1862,14 @@ fi
 ac_fn_c_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
+  rm -f conftest.$ac_objext conftest.beam
   if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1840,14 +1877,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
+       } && test -s conftest.$ac_objext
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
@@ -1857,6 +1895,39 @@ fi
 
 } # ac_fn_c_try_compile
 
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  eval "$3=yes"
+else $as_nop
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
 # ac_fn_c_try_cpp LINENO
 # ----------------------
 # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
@@ -1869,7 +1940,7 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1877,14 +1948,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
-       }; then :
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 
 } # ac_fn_c_try_cpp
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
 # ac_fn_c_try_link LINENO
 # -----------------------
 # Try to link conftest.$ac_ext, and return whether this succeeded.
 ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
+  rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
   if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -2075,17 +1987,18 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
         test -x conftest$ac_exeext
-       }; then :
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
@@ -2106,11 +2019,12 @@ fi
 ac_fn_c_check_func ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -2118,16 +2032,9 @@ else
 #define $2 innocuous_$2
 
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+   which can conflict with char $2 (); below.  */
 
+#include <limits.h>
 #undef $2
 
 /* Override any GCC internal prototype to avoid an error.
@@ -2145,47 +2052,94 @@ choke me
 #endif
 
 int
-main ()
+main (void)
 {
 return $2 ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+then :
+  ac_retval=0
+else $as_nop
+  printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+       printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
 # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   as_decl_name=`echo $2|sed 's/ *(.*//'`
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  eval ac_save_FLAGS=\$$6
+  as_fn_append $6 " $5"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 #ifndef $as_decl_name
 #ifdef __cplusplus
@@ -2199,19 +2153,22 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  eval $6=\$ac_save_FLAGS
+
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_decl
+} # ac_fn_check_decl
 
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
@@ -2220,17 +2177,18 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_type ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   eval "$3=no"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 if (sizeof ($2))
         return 0;
@@ -2238,12 +2196,13 @@ if (sizeof ($2))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 if (sizeof (($2)))
            return 0;
@@ -2251,29 +2210,50 @@ if (sizeof (($2)))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   eval "$3=yes"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
+ac_configure_args_raw=
+for ac_arg
+do
+  case $ac_arg in
+  *\'*)
+    ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+  *$as_nl*)
+    ac_safe_unquote= ;;
+  *)
+    ac_unsafe_z='|&;<>()$`\\"*?[ ''    ' # This string ends in space, tab.
+    ac_unsafe_a="$ac_unsafe_z#~"
+    ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+    ac_configure_args_raw=`      printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by cryptsetup $as_me 2.3.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+It was created by cryptsetup $as_me 2.3.7, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
-  $ $0 $@
+  $ $0$ac_configure_args_raw
 
 _ACEOF
 exec 5>>config.log
@@ -2306,8 +2286,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    printf "%s\n" "PATH: $as_dir"
   done
 IFS=$as_save_IFS
 
@@ -2342,7 +2326,7 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
     1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2377,11 +2361,13 @@ done
 # WARNING: Use '\'' to represent an apostrophe within the trap.
 # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
 trap 'exit_status=$?
+  # Sanitize IFS.
+  IFS=" ""     $as_nl"
   # Save into config.log some information that might help in debugging.
   {
     echo
 
-    $as_echo "## ---------------- ##
+    printf "%s\n" "## ---------------- ##
 ## Cache variables. ##
 ## ---------------- ##"
     echo
@@ -2392,8 +2378,8 @@ trap 'exit_status=$?
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -2417,7 +2403,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    $as_echo "## ----------------- ##
+    printf "%s\n" "## ----------------- ##
 ## Output variables. ##
 ## ----------------- ##"
     echo
@@ -2425,14 +2411,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      $as_echo "$ac_var='\''$ac_val'\''"
+      printf "%s\n" "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
     if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
+      printf "%s\n" "## ------------------- ##
 ## File substitutions. ##
 ## ------------------- ##"
       echo
@@ -2440,15 +2426,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       do
        eval ac_val=\$$ac_var
        case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
        esac
-       $as_echo "$ac_var='\''$ac_val'\''"
+       printf "%s\n" "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
 
     if test -s confdefs.h; then
-      $as_echo "## ----------- ##
+      printf "%s\n" "## ----------- ##
 ## confdefs.h. ##
 ## ----------- ##"
       echo
@@ -2456,8 +2442,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       echo
     fi
     test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
+      printf "%s\n" "$as_me: caught signal $ac_signal"
+    printf "%s\n" "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2471,63 +2457,48 @@ ac_signal=0
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
 
 # Predefined preprocessor variables.
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
 
 
 # Let the site file select an alternate cache file if it wants to.
 # Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
+  ac_site_files="$CONFIG_SITE"
 elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
+  ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
 else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
+  ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
 fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
 do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
+  case $ac_site_file in #(
+  */*) :
+     ;; #(
+  *) :
+    ac_site_file=./$ac_site_file ;;
+esac
+  if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+      || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
 See \`config.log' for more details" "$LINENO" 5; }
   fi
@@ -2537,20 +2508,437 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special files
   # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
   if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+   Do not test the value of __STDC__, because some compilers set it to 0
+   while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not \xHH hex character constants.
+   These do not provoke an error unfortunately, instead are silently treated
+   as an "x".  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously \x00 != x always comes out true, for an
+   array size at least.  It is necessary to write \x00 == 0 to get something
+   that is true only with -std.  */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+               int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+  #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str = "";
+  int number = 0;
+  float fnumber = 0;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case '\''s'\'': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case '\''d'\'': // int
+         number = va_arg (args_copy, int);
+         break;
+       case '\''f'\'': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+
+  return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+  // Check bool.
+  _Bool success = false;
+  success |= (argc != 0);
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[0] = argv[0][0];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+        || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+  _Static_assert ((offsetof (struct anonymous, i)
+                  == offsetof (struct anonymous, w.k)),
+                 "Anonymous union alignment botch");
+  v1.i = 2;
+  v1.w.k = 5;
+  ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  ${ac_c_conftest_c11_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
 gt_needs="$gt_needs need-ngettext"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.rpath ltmain.sh compile config.guess config.sub missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.."
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+  as_found=:
+
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}:  trying $as_dir" >&5
+  ac_aux_dir_found=yes
+  ac_install_sh=
+  for ac_aux in $ac_aux_files
+  do
+    # As a special case, if "install-sh" is required, that requirement
+    # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+    # and $ac_install_sh is set appropriately for whichever one is found.
+    if test x"$ac_aux" = x"install-sh"
+    then
+      if test -f "${as_dir}install-sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install-sh found" >&5
+        ac_install_sh="${as_dir}install-sh -c"
+      elif test -f "${as_dir}install.sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install.sh found" >&5
+        ac_install_sh="${as_dir}install.sh -c"
+      elif test -f "${as_dir}shtool"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}shtool found" >&5
+        ac_install_sh="${as_dir}shtool install -c"
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+        else
+          break
+        fi
+      fi
+    else
+      if test -f "${as_dir}${ac_aux}"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}${ac_aux} found" >&5
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+        else
+          break
+        fi
+      fi
+    fi
+  done
+  if test "$ac_aux_dir_found" = yes; then
+    ac_aux_dir="$as_dir"
+    break
+  fi
+  ac_first_candidate=false
+
+  as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+  ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+  ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+  ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2561,12 +2949,12 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
@@ -2575,24 +2963,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
        ac_old_val_w=`echo x $ac_old_val`
        ac_new_val_w=`echo x $ac_new_val`
        if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
          ac_cache_corrupted=:
        else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
          eval $ac_var=\$ac_old_val
        fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+printf "%s\n" "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
@@ -2602,11 +2990,12 @@ $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+           and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2624,7 +3013,8 @@ LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-)
 LIBCRYPTSETUP_VERSION_INFO=18:0:6
 
 # Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
+if test ${enable_silent_rules+y}
+then :
   enableval=$enable_silent_rules;
 fi
 
@@ -2634,12 +3024,13 @@ case $enable_silent_rules in # (((
     *) AM_DEFAULT_VERBOSITY=0;;
 esac
 am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if printf "%s\n" 'TRUE=$(BAR$(V))
 BAR0=false
 BAR1=true
 V=1
@@ -2651,8 +3042,8 @@ else
   am_cv_make_support_nested_variables=no
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
 if test $am_cv_make_support_nested_variables = yes; then
     AM_V='$(V)'
   AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
@@ -2675,36 +3066,9 @@ ac_config_headers="$ac_config_headers config.h:config.h.in"
 #AM_INIT_AUTOMAKE(dist-xz subdir-objects)
 am__api_version='1.16'
 
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
-# Find a good install program.  We prefer a C program (faster),
+  # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
 # SysV /etc/install, /usr/sbin/install
@@ -2718,20 +3082,25 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 # Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_path_install+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+  ./ | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
@@ -2741,13 +3110,13 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+       if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
            :
          elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # program-specific install script used by HP pwplus--don't use.
            :
          else
@@ -2755,12 +3124,12 @@ case $as_dir/ in #((
            echo one > conftest.one
            echo two > conftest.two
            mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+           if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
              test -s conftest.one && test -s conftest.two &&
              test -s conftest.dir/conftest.one &&
              test -s conftest.dir/conftest.two
            then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
              break 3
            fi
          fi
@@ -2776,7 +3145,7 @@ IFS=$as_save_IFS
 rm -rf conftest.one conftest.two conftest.dir
 
 fi
-  if test "${ac_cv_path_install+set}" = set; then
+  if test ${ac_cv_path_install+y}; then
     INSTALL=$ac_cv_path_install
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -2786,8 +3155,8 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -2797,8 +3166,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2852,8 +3221,8 @@ else
    as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 # If we didn't sleep, we still need to ensure time stamps of config.status and
 # generated files are strictly newer.
 am_sleep_pid=
@@ -2872,26 +3241,23 @@ test "$program_suffix" != NONE &&
 # Double any \ or $.
 # By default was `s,x,x', remove it if useless.
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
 
 # Expand $ac_aux_dir to an absolute path.
 am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
+
+  if test x"${MISSING+set}" != xset; then
+  MISSING="\${SHELL} '$am_aux_dir/missing'"
 fi
 # Use eval to expand $SHELL
 if eval "$MISSING --is-lightweight"; then
   am_missing_run="$MISSING "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh+set}" != xset; then
@@ -2911,11 +3277,12 @@ if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
@@ -2923,11 +3290,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2938,11 +3309,11 @@ fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -2951,11 +3322,12 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
@@ -2963,11 +3335,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2978,11 +3354,11 @@ fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -2990,8 +3366,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
@@ -3003,25 +3379,31 @@ fi
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${ac_cv_path_mkdir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
+          as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir ('*'coreutils) '* | \
+            'BusyBox '* | \
             'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
               break 3;;
           esac
         done
@@ -3032,7 +3414,7 @@ IFS=$as_save_IFS
 fi
 
   test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
+  if test ${ac_cv_path_mkdir+y}; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -3042,18 +3424,19 @@ fi
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
 
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
 else
@@ -3061,11 +3444,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3076,24 +3463,25 @@ fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
   test -n "$AWK" && break
 done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
 all:
@@ -3109,12 +3497,12 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -3149,17 +3537,13 @@ fi
 
 # Define the identity of the package.
  PACKAGE='cryptsetup'
- VERSION='2.3.3'
+ VERSION='2.3.7'
 
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
+printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
+printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
 
 # Some tools Automake needs.
 
@@ -3199,6 +3583,20 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+  CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+  ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+  CSCOPE=cscope
+fi
+
+
 
 # POSIX will say in a future version that running "rm -f" with no argument
 # is OK; and we want to be able to make that assumption in our Makefile
@@ -3248,26 +3646,29 @@ if test "x$prefix" = "xNONE"; then
 fi
 
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+  # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+  ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
 test "x$ac_build_alias" = x &&
   as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -3286,21 +3687,22 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+  ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -3319,12 +3721,21 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
+
+
+
+
+
+
+
+
+
 DEPDIR="${am__leading_dot}deps"
 
 ac_config_commands="$ac_config_commands depfiles"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
-$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
 cat > confinc.mk << 'END'
 am__doit:
        @echo this is the am__doit target >confinc.out
@@ -3360,11 +3771,12 @@ esac
   fi
 done
 rm -f confinc.* confmf.*
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
-$as_echo "${_am_result}" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
 
 # Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
+if test ${enable_dependency_tracking+y}
+then :
   enableval=$enable_dependency_tracking;
 fi
 
@@ -3390,11 +3802,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3402,11 +3815,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3417,11 +3834,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3430,11 +3847,12 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3442,11 +3860,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3457,11 +3879,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -3469,8 +3891,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3483,11 +3905,12 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3495,11 +3918,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3510,11 +3937,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3523,11 +3950,12 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3536,15 +3964,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3560,18 +3992,18 @@ if test $ac_prog_rejected = yes; then
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+    ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
   fi
 fi
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3582,11 +4014,12 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3594,11 +4027,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3609,11 +4046,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3626,11 +4063,12 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3638,11 +4076,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3653,11 +4095,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3669,8 +4111,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3678,46 +4120,150 @@ esac
 fi
 
 fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
   fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
 done
+  done
+IFS=$as_save_IFS
 
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
 
-int
-main ()
-{
 
-  ;
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+
+  ;
   return 0;
 }
 _ACEOF
@@ -3726,9 +4272,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
 ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3749,11 +4295,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -3770,7 +4317,7 @@ do
        # certainly right.
        break;;
     *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
        then :; else
           ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
        fi
@@ -3786,44 +4333,46 @@ do
 done
 test "$ac_cv_exeext" = no && ac_cv_exeext=
 
-else
+else $as_nop
   ac_file=''
 fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
 See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3837,15 +4386,15 @@ for ac_file in conftest.exe conftest conftest.*; do
     * ) break;;
   esac
 done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
@@ -3854,7 +4403,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 FILE *f = fopen ("conftest.out", "w");
  return ferror (f) || fclose (f) != 0;
@@ -3866,8 +4415,8 @@ _ACEOF
 ac_clean_files="$ac_clean_files conftest.out"
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
 if test "$cross_compiling" != yes; then
   { { ac_try="$ac_link"
 case "(($ac_try" in
@@ -3875,10 +4424,10 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
   if { ac_try='./conftest$ac_cv_exeext'
   { { case "(($ac_try" in
@@ -3886,39 +4435,40 @@ $as_echo "$ac_try_echo"; } >&5
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
        cross_compiling=yes
     else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
 
 rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -3932,11 +4482,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
@@ -3945,31 +4496,32 @@ $as_echo "$ac_try_echo"; } >&5
        break;;
   esac
 done
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -3979,29 +4531,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_compiler_gnu=yes
-else
+else $as_nop
   ac_compiler_gnu=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 if test $ac_compiler_gnu = yes; then
   GCC=yes
 else
   GCC=
 fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
@@ -4010,57 +4566,60 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
-else
+else $as_nop
   CFLAGS=""
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   ac_c_werror_flag=$ac_save_c_werror_flag
         CFLAGS="-g"
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
@@ -4075,94 +4634,144 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c11=no
 ac_save_CC=$CC
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c11" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+     CC="$CC $ac_cv_prog_cc_c11"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+  ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c99" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+     CC="$CC $ac_cv_prog_cc_c99"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+  ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c89_program
 _ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
+  if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_c89=$ac_arg
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
 rm -f conftest.$ac_ext
 CC=$ac_save_CC
-
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c89" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+     CC="$CC $ac_cv_prog_cc_c89"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+  ac_prog_cc_stdc=c89
+fi
 fi
 
 ac_ext=c
@@ -4171,21 +4780,23 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_ext=c
+
+  ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -4213,8 +4824,8 @@ _ACEOF
   rm -f core conftest*
   unset am_i
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
 if test "$am_cv_prog_cc_c_o" != yes; then
    # Losing compiler, so override with the script.
    # FIXME: It is wrong to rewrite CC.
@@ -4232,11 +4843,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
@@ -4343,8 +4955,8 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
  if
 
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
 do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+  if test $ac_cache; then
+    ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+    if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+      printf "%s\n" "#define $ac_item 1" >> confdefs.h
+    fi
+    ac_header= ac_cache=
+  elif test $ac_header; then
+    ac_cache=$ac_item
+  else
+    ac_header=$ac_item
+  fi
+done
 
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
 
-    done
-    ac_cv_prog_CPP=$CPP
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
+
+
+
+
+
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
 
-else
-  # Broken: fails on valid input.
-continue
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+  ac_cv_safe_to_define___extensions__=no
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_should_define__xopen_source=no
+    if test $ac_cv_header_wchar_h = yes
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
 
+          #include <wchar.h>
+          mbstate_t x;
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
 
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+            #define _XOPEN_SOURCE 500
+            #include <wchar.h>
+            mbstate_t x;
 int
-main ()
+main (void)
 {
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
+
+  ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_should_define__xopen_source=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
 
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
+  printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
 
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                 inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
 
-fi
+  printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
 
-done
+  printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
 
+  printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
 
+  printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
 
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
+  printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
 
-  if test "$MINIX" = yes; then
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
 
-$as_echo "#define _MINIX 1" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
 
-  fi
+  printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
 
+  if test $ac_cv_header_minix_config_h = yes
+then :
+  MINIX=yes
+    printf "%s\n" "#define _MINIX 1" >>confdefs.h
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
 
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
+    printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else $as_nop
+  MINIX=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+  if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+  printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
 
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+fi
+  if test $ac_cv_should_define__xopen_source = yes
+then :
+  printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
 
+fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -4825,11 +5149,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -4837,11 +5162,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4852,11 +5181,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -4865,11 +5194,12 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -4877,11 +5207,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4892,11 +5226,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -4904,8 +5238,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -4918,11 +5252,12 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -4930,11 +5265,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4945,11 +5284,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -4958,11 +5297,12 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -4971,15 +5311,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4995,33 +5339,144 @@ if test $ac_prog_rejected = yes; then
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+    ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
   fi
 fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
 
 fi
 if test -z "$CC"; then
   if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -5029,11 +5484,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5044,28 +5503,25 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
-    test -n "$CC" && break
-  done
 fi
-if test -z "$CC"; then
+if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -5073,11 +5529,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5088,50 +5548,48 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
-
-  test -n "$ac_ct_CC" && break
-done
-
   if test "x$ac_ct_CC" = x; then
     CC=""
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
   fi
+else
+  CC="$ac_cv_prog_CC"
 fi
 
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
 See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
   { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -5141,20 +5599,21 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
   fi
   rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -5164,29 +5623,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_compiler_gnu=yes
-else
+else $as_nop
   ac_compiler_gnu=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 if test $ac_compiler_gnu = yes; then
   GCC=yes
 else
   GCC=
 fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
@@ -5195,57 +5658,60 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
-else
+else $as_nop
   CFLAGS=""
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   ac_c_werror_flag=$ac_save_c_werror_flag
         CFLAGS="-g"
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
@@ -5260,94 +5726,144 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c11=no
 ac_save_CC=$CC
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c11" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+     CC="$CC $ac_cv_prog_cc_c11"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+  ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c99" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+     CC="$CC $ac_cv_prog_cc_c99"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+  ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c89_program
 _ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
+  if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_c89=$ac_arg
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
 rm -f conftest.$ac_ext
 CC=$ac_save_CC
-
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c89" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+     CC="$CC $ac_cv_prog_cc_c89"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+  ac_prog_cc_stdc=c89
+fi
 fi
 
 ac_ext=c
@@ -5356,21 +5872,23 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_ext=c
+
+  ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -5398,8 +5916,8 @@ _ACEOF
   rm -f core conftest*
   unset am_i
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
 if test "$am_cv_prog_cc_c_o" != yes; then
    # Losing compiler, so override with the script.
    # FIXME: It is wrong to rewrite CC.
@@ -5417,11 +5935,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
@@ -5528,8 +6047,8 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
  if
@@ -5549,40 +6068,36 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+  if test ${ac_cv_prog_CPP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+      # Double quotes because $CC needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
     do
       ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
                     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
-else
+else $as_nop
   # Broken: fails on valid input.
 continue
 fi
@@ -5594,10 +6109,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
   # Broken: success on invalid input.
 continue
-else
+else $as_nop
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -5607,7 +6123,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
   break
 fi
 
@@ -5619,29 +6136,24 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
                     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
-else
+else $as_nop
   # Broken: fails on valid input.
 continue
 fi
@@ -5653,10 +6165,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
   # Broken: success on invalid input.
 continue
-else
+else $as_nop
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -5666,11 +6179,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
 
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details" "$LINENO" 5; }
 fi
@@ -5682,13 +6196,14 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
 all:
@@ -5704,17 +6219,18 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
 # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
+if test ${enable_static+y}
+then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
     yes) enable_static=yes ;;
@@ -5732,7 +6248,7 @@ if test "${enable_static+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_static=no
 fi
 
@@ -5746,8 +6262,8 @@ fi
 
 case `pwd` in
   *\ * | *\    *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
 esac
 
 
@@ -5767,6 +6283,7 @@ macro_revision='2.4.6'
 
 
 
+
 ltmain=$ac_aux_dir/ltmain.sh
 
 # Backslashify metacharacters that are still active within
@@ -5790,8 +6307,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+printf %s "checking how to print strings... " >&6; }
 # Test print first, because it will be a builtin if present.
 if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
    test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
@@ -5817,12 +6334,12 @@ func_echo_all ()
 }
 
 case $ECHO in
-  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
-  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
-  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
+  printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+printf "%s\n" "printf" >&6; } ;;
+  print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+printf "%s\n" "print -r" >&6; } ;;
+  *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+printf "%s\n" "cat" >&6; } ;;
 esac
 
 
@@ -5838,11 +6355,12 @@ esac
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
      for ac_i in 1 2 3 4 5 6 7; do
        ac_script="$ac_script$as_nl$ac_script"
@@ -5856,10 +6374,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in sed gsed
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
@@ -5868,13 +6391,13 @@ case `"$ac_path_SED" --version 2>&1` in
   ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  printf %s 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
+    printf "%s\n" '' >> "conftest.nl"
     "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -5902,8 +6425,8 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
  SED="$ac_cv_path_SED"
   rm -f conftest.sed
 
@@ -5920,11 +6443,154 @@ Xsed="$SED -e 1s/^X//"
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in grep ggrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in egrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+printf %s "checking for fgrep... " >&6; }
+if test ${ac_cv_path_FGREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
    then ac_cv_path_FGREP="$GREP -F"
    else
@@ -5935,10 +6601,15 @@ else
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in fgrep; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in fgrep
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
@@ -5947,13 +6618,13 @@ case `"$ac_path_FGREP" --version 2>&1` in
   ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  printf %s 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo 'FGREP' >> "conftest.nl"
+    printf "%s\n" 'FGREP' >> "conftest.nl"
     "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -5982,8 +6653,8 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+printf "%s\n" "$ac_cv_path_FGREP" >&6; }
  FGREP="$ac_cv_path_FGREP"
 
 
@@ -6008,17 +6679,18 @@ test -z "$GREP" && GREP=grep
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
+if test ${with_gnu_ld+y}
+then :
   withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else
+else $as_nop
   with_gnu_ld=no
 fi
 
 ac_prog=ld
 if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return, which upsets mingw
@@ -6047,15 +6719,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test yes = "$with_gnu_ld"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
 fi
-if ${lt_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${lt_cv_path_LD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$LD"; then
   lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
@@ -6084,18 +6757,19 @@ fi
 
 LD=$lt_cv_path_LD
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
@@ -6106,8 +6780,8 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
@@ -6118,11 +6792,12 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if ${lt_cv_path_NM+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test ${lt_cv_path_NM+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$NM"; then
   # Let the user override the test.
   lt_cv_path_NM=$NM
@@ -6172,8 +6847,8 @@ else
   : ${lt_cv_path_NM=no}
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+printf "%s\n" "$lt_cv_path_NM" >&6; }
 if test no != "$lt_cv_path_NM"; then
   NM=$lt_cv_path_NM
 else
@@ -6186,11 +6861,12 @@ else
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DUMPBIN+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DUMPBIN"; then
   ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
 else
@@ -6198,11 +6874,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6213,11 +6893,11 @@ fi
 fi
 DUMPBIN=$ac_cv_prog_DUMPBIN
 if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+printf "%s\n" "$DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6230,11 +6910,12 @@ if test -z "$DUMPBIN"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DUMPBIN"; then
   ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
 else
@@ -6242,11 +6923,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6257,11 +6942,11 @@ fi
 fi
 ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
 if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6273,8 +6958,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DUMPBIN=$ac_ct_DUMPBIN
@@ -6302,11 +6987,12 @@ test -z "$NM" && NM=nm
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+printf %s "checking the name lister ($NM) interface... " >&6; }
+if test ${lt_cv_nm_interface+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
   (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
@@ -6322,26 +7008,27 @@ else
   fi
   rm -f conftest*
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+printf "%s\n" "$lt_cv_nm_interface" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
 LN_S=$as_ln_s
 if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
 fi
 
 # find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+printf %s "checking the maximum length of command line arguments... " >&6; }
+if test ${lt_cv_sys_max_cmd_len+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
     i=0
   teststring=ABCD
 
@@ -6468,11 +7155,11 @@ else
 fi
 
 if test -n "$lt_cv_sys_max_cmd_len"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
 
@@ -6516,11 +7203,12 @@ esac
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+printf %s "checking how to convert $build file names to $host format... " >&6; }
+if test ${lt_cv_to_host_file_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $host in
   *-*-mingw* )
     case $build in
@@ -6556,18 +7244,19 @@ esac
 fi
 
 to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+printf %s "checking how to convert $build file names to toolchain format... " >&6; }
+if test ${lt_cv_to_tool_file_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   #assume ordinary cross tools, or native build.
 lt_cv_to_tool_file_cmd=func_convert_file_noop
 case $host in
@@ -6583,22 +7272,23 @@ esac
 fi
 
 to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+printf %s "checking for $LD option to reload object files... " >&6; }
+if test ${lt_cv_ld_reload_flag+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_reload_flag='-r'
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
 reload_flag=$lt_cv_ld_reload_flag
 case $reload_flag in
 "" | " "*) ;;
@@ -6631,11 +7321,12 @@ esac
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OBJDUMP"; then
   ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
 else
@@ -6643,11 +7334,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6658,11 +7353,11 @@ fi
 fi
 OBJDUMP=$ac_cv_prog_OBJDUMP
 if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6671,11 +7366,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
   ac_ct_OBJDUMP=$OBJDUMP
   # Extract the first word of "objdump", so it can be a program name with args.
 set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OBJDUMP"; then
   ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
 else
@@ -6683,11 +7379,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6698,11 +7398,11 @@ fi
 fi
 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
 if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OBJDUMP" = x; then
@@ -6710,8 +7410,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OBJDUMP=$ac_ct_OBJDUMP
@@ -6730,11 +7430,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+printf %s "checking how to recognize dependent libraries... " >&6; }
+if test ${lt_cv_deplibs_check_method+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_file_magic_cmd='$MAGIC_CMD'
 lt_cv_file_magic_test_file=
 lt_cv_deplibs_check_method='unknown'
@@ -6930,8 +7631,8 @@ os2*)
 esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
 
 file_magic_glob=
 want_nocaseglob=no
@@ -6975,11 +7676,12 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DLLTOOL"; then
   ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
@@ -6987,11 +7689,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7002,11 +7708,11 @@ fi
 fi
 DLLTOOL=$ac_cv_prog_DLLTOOL
 if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7015,11 +7721,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then
   ac_ct_DLLTOOL=$DLLTOOL
   # Extract the first word of "dlltool", so it can be a program name with args.
 set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DLLTOOL"; then
   ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
@@ -7027,11 +7734,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7042,11 +7753,11 @@ fi
 fi
 ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
 if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_DLLTOOL" = x; then
@@ -7054,8 +7765,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DLLTOOL=$ac_ct_DLLTOOL
@@ -7075,11 +7786,12 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+printf %s "checking how to associate runtime and link libraries... " >&6; }
+if test ${lt_cv_sharedlib_from_linklib_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_sharedlib_from_linklib_cmd='unknown'
 
 case $host_os in
@@ -7102,8 +7814,8 @@ cygwin* | mingw* | pw32* | cegcc*)
 esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
 sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
 test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
 
@@ -7118,11 +7830,12 @@ if test -n "$ac_tool_prefix"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
 else
@@ -7130,11 +7843,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7145,11 +7862,11 @@ fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7162,11 +7879,12 @@ if test -z "$AR"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_AR"; then
   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
 else
@@ -7174,11 +7892,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7189,11 +7911,11 @@ fi
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7205,8 +7927,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
@@ -7226,30 +7948,32 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+printf %s "checking for archiver @FILE support... " >&6; }
+if test ${lt_cv_ar_at_file+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ar_at_file=no
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
   (eval $lt_ar_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
       if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
@@ -7257,7 +7981,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
   (eval $lt_ar_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
        if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
@@ -7266,11 +7990,11 @@ if ac_fn_c_try_compile "$LINENO"; then :
       rm -f conftest.* libconftest.a
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+printf "%s\n" "$lt_cv_ar_at_file" >&6; }
 
 if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
@@ -7287,11 +8011,12 @@ fi
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
@@ -7299,11 +8024,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7314,11 +8043,11 @@ fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7327,11 +8056,12 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
@@ -7339,11 +8069,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7354,11 +8088,11 @@ fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -7366,8 +8100,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
@@ -7386,11 +8120,12 @@ test -z "$STRIP" && STRIP=:
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
@@ -7398,11 +8133,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7413,11 +8152,11 @@ fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7426,11 +8165,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
 else
@@ -7438,11 +8178,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7453,11 +8197,11 @@ fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -7465,8 +8209,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -7555,11 +8299,12 @@ compiler=$CC
 
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if ${lt_cv_sys_global_symbol_pipe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+printf %s "checking command to parse $NM output from $compiler object... " >&6; }
+if test ${lt_cv_sys_global_symbol_pipe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
 # These are sane defaults that work on at least a few old systems.
 # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
@@ -7711,7 +8456,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
@@ -7784,7 +8529,7 @@ _LT_EOF
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
@@ -7819,11 +8564,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then
   lt_cv_sys_global_symbol_to_cdecl=
 fi
 if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+printf "%s\n" "ok" >&6; }
 fi
 
 # Response file support.
@@ -7869,13 +8614,14 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+printf %s "checking for sysroot... " >&6; }
 
 # Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
+if test ${with_sysroot+y}
+then :
   withval=$with_sysroot;
-else
+else $as_nop
   with_sysroot=no
 fi
 
@@ -7893,24 +8639,25 @@ case $with_sysroot in #(
  no|'')
    ;; #(
  *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+printf "%s\n" "$with_sysroot" >&6; }
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+printf "%s\n" "${lt_sysroot:-no}" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+printf %s "checking for a working dd... " >&6; }
+if test ${ac_cv_path_lt_DD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   printf 0123456789abcdef0123456789abcdef >conftest.i
 cat conftest.i conftest.i >conftest2.i
 : ${lt_DD:=$DD}
@@ -7921,10 +8668,15 @@ if test -z "$lt_DD"; then
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in dd; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in dd
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_lt_DD" || continue
 if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
   cmp -s conftest.i conftest.out \
@@ -7944,15 +8696,16 @@ fi
 
 rm -f conftest.i conftest2.i conftest.out
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+printf %s "checking how to truncate binary pipes... " >&6; }
+if test ${lt_cv_truncate_bin+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   printf 0123456789abcdef0123456789abcdef >conftest.i
 cat conftest.i conftest.i >conftest2.i
 lt_cv_truncate_bin=
@@ -7963,8 +8716,8 @@ fi
 rm -f conftest.i conftest2.i conftest.out
 test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+printf "%s\n" "$lt_cv_truncate_bin" >&6; }
 
 
 
@@ -7987,7 +8740,8 @@ func_cc_basename ()
 }
 
 # Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
+if test ${enable_libtool_lock+y}
+then :
   enableval=$enable_libtool_lock;
 fi
 
@@ -8003,7 +8757,7 @@ ia64-*-hpux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
@@ -8023,7 +8777,7 @@ ia64-*-hpux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -8061,7 +8815,7 @@ mips64*-*linux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     emul=elf
     case `/usr/bin/file conftest.$ac_objext` in
@@ -8102,7 +8856,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
       *32-bit*)
@@ -8165,11 +8919,12 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
   SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+printf %s "checking whether the C compiler needs -belf... " >&6; }
+if test ${lt_cv_cc_needs_belf+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -8180,19 +8935,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_cc_needs_belf=yes
-else
+else $as_nop
   lt_cv_cc_needs_belf=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -8201,8 +8957,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
   if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     CFLAGS=$SAVE_CFLAGS
@@ -8215,7 +8971,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
@@ -8252,11 +9008,12 @@ need_locks=$enable_libtool_lock
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
 set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_MANIFEST_TOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$MANIFEST_TOOL"; then
   ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
 else
@@ -8264,11 +9021,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8279,11 +9040,11 @@ fi
 fi
 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
 if test -n "$MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+printf "%s\n" "$MANIFEST_TOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8292,11 +9053,12 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
   ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
   # Extract the first word of "mt", so it can be a program name with args.
 set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_MANIFEST_TOOL"; then
   ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
 else
@@ -8304,11 +9066,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8319,11 +9085,11 @@ fi
 fi
 ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
 if test -n "$ac_ct_MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_MANIFEST_TOOL" = x; then
@@ -8331,8 +9097,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
@@ -8342,11 +9108,12 @@ else
 fi
 
 test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if test ${lt_cv_path_mainfest_tool+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_path_mainfest_tool=no
   echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
   $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
@@ -8356,8 +9123,8 @@ else
   fi
   rm -f conftest*
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
 if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
@@ -8372,11 +9139,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DSYMUTIL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DSYMUTIL"; then
   ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
 else
@@ -8384,11 +9152,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8399,11 +9171,11 @@ fi
 fi
 DSYMUTIL=$ac_cv_prog_DSYMUTIL
 if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+printf "%s\n" "$DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8412,11 +9184,12 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
   ac_ct_DSYMUTIL=$DSYMUTIL
   # Extract the first word of "dsymutil", so it can be a program name with args.
 set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DSYMUTIL"; then
   ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
 else
@@ -8424,11 +9197,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8439,11 +9216,11 @@ fi
 fi
 ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
 if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_DSYMUTIL" = x; then
@@ -8451,8 +9228,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DSYMUTIL=$ac_ct_DSYMUTIL
@@ -8464,11 +9241,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_NMEDIT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$NMEDIT"; then
   ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
 else
@@ -8476,11 +9254,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8491,11 +9273,11 @@ fi
 fi
 NMEDIT=$ac_cv_prog_NMEDIT
 if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+printf "%s\n" "$NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8504,11 +9286,12 @@ if test -z "$ac_cv_prog_NMEDIT"; then
   ac_ct_NMEDIT=$NMEDIT
   # Extract the first word of "nmedit", so it can be a program name with args.
 set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_NMEDIT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_NMEDIT"; then
   ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
 else
@@ -8516,11 +9299,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8531,11 +9318,11 @@ fi
 fi
 ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
 if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+printf "%s\n" "$ac_ct_NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_NMEDIT" = x; then
@@ -8543,8 +9330,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     NMEDIT=$ac_ct_NMEDIT
@@ -8556,11 +9343,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LIPO+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$LIPO"; then
   ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
 else
@@ -8568,11 +9356,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8583,11 +9375,11 @@ fi
 fi
 LIPO=$ac_cv_prog_LIPO
 if test -n "$LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+printf "%s\n" "$LIPO" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8596,11 +9388,12 @@ if test -z "$ac_cv_prog_LIPO"; then
   ac_ct_LIPO=$LIPO
   # Extract the first word of "lipo", so it can be a program name with args.
 set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LIPO+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_LIPO"; then
   ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
 else
@@ -8608,11 +9401,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8623,11 +9420,11 @@ fi
 fi
 ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
 if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+printf "%s\n" "$ac_ct_LIPO" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_LIPO" = x; then
@@ -8635,8 +9432,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     LIPO=$ac_ct_LIPO
@@ -8648,11 +9445,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OTOOL"; then
   ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
 else
@@ -8660,11 +9458,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8675,11 +9477,11 @@ fi
 fi
 OTOOL=$ac_cv_prog_OTOOL
 if test -n "$OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+printf "%s\n" "$OTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8688,11 +9490,12 @@ if test -z "$ac_cv_prog_OTOOL"; then
   ac_ct_OTOOL=$OTOOL
   # Extract the first word of "otool", so it can be a program name with args.
 set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OTOOL"; then
   ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
 else
@@ -8700,11 +9503,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8715,11 +9522,11 @@ fi
 fi
 ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
 if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+printf "%s\n" "$ac_ct_OTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OTOOL" = x; then
@@ -8727,8 +9534,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OTOOL=$ac_ct_OTOOL
@@ -8740,11 +9547,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL64+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OTOOL64"; then
   ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
 else
@@ -8752,11 +9560,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8767,11 +9579,11 @@ fi
 fi
 OTOOL64=$ac_cv_prog_OTOOL64
 if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+printf "%s\n" "$OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8780,11 +9592,12 @@ if test -z "$ac_cv_prog_OTOOL64"; then
   ac_ct_OTOOL64=$OTOOL64
   # Extract the first word of "otool64", so it can be a program name with args.
 set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL64+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OTOOL64"; then
   ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
 else
@@ -8792,11 +9605,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8807,11 +9624,11 @@ fi
 fi
 ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
 if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+printf "%s\n" "$ac_ct_OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OTOOL64" = x; then
@@ -8819,8 +9636,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OTOOL64=$ac_ct_OTOOL64
@@ -8855,11 +9672,12 @@ fi
 
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+printf %s "checking for -single_module linker flag... " >&6; }
+if test ${lt_cv_apple_cc_single_mod+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_apple_cc_single_mod=no
       if test -z "$LT_MULTI_MODULE"; then
        # By default we will add the -single_module flag. You can override
@@ -8888,14 +9706,15 @@ else
        rm -f conftest.*
       fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+printf %s "checking for -exported_symbols_list linker flag... " >&6; }
+if test ${lt_cv_ld_exported_symbols_list+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_exported_symbols_list=no
       save_LDFLAGS=$LDFLAGS
       echo "_main" > conftest.sym
@@ -8904,31 +9723,33 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_ld_exported_symbols_list=yes
-else
+else $as_nop
   lt_cv_ld_exported_symbols_list=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
        LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+printf %s "checking for -force_load linker flag... " >&6; }
+if test ${lt_cv_ld_force_load+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_force_load=no
       cat > conftest.c << _LT_EOF
 int forced_loaded() { return 2;}
@@ -8956,8 +9777,8 @@ _LT_EOF
         rm -rf conftest.dSYM
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+printf "%s\n" "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
       _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
@@ -8968,11 +9789,11 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+       10.0,*86*-darwin8*|10.0,*-darwin[912]*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[012][,.]*)
          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-       10.*)
+       10.*|11.*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
@@ -9028,19 +9849,14 @@ func_munge_path_list ()
     esac
 }
 
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
 "
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
 
 fi
 
-done
-
 
 
 
@@ -9056,7 +9872,8 @@ done
 
 
             # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
+if test ${enable_shared+y}
+then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
     yes) enable_shared=yes ;;
@@ -9074,7 +9891,7 @@ if test "${enable_shared+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_shared=yes
 fi
 
@@ -9089,7 +9906,8 @@ fi
 
 
 # Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
+if test ${with_pic+y}
+then :
   withval=$with_pic; lt_p=${PACKAGE-default}
     case $withval in
     yes|no) pic_mode=$withval ;;
@@ -9106,7 +9924,7 @@ if test "${with_pic+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   pic_mode=default
 fi
 
@@ -9118,7 +9936,8 @@ fi
 
 
   # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
+if test ${enable_fast_install+y}
+then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
     yes) enable_fast_install=yes ;;
@@ -9136,7 +9955,7 @@ if test "${enable_fast_install+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_fast_install=yes
 fi
 
@@ -9150,11 +9969,12 @@ fi
   shared_archive_member_spec=
 case $host,$enable_shared in
 power*-*-aix[5-9]*,yes)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
-$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+printf %s "checking which variant of shared library versioning to provide... " >&6; }
 
 # Check whether --with-aix-soname was given.
-if test "${with_aix_soname+set}" = set; then :
+if test ${with_aix_soname+y}
+then :
   withval=$with_aix_soname; case $withval in
     aix|svr4|both)
       ;;
@@ -9163,18 +9983,19 @@ if test "${with_aix_soname+set}" = set; then :
       ;;
     esac
     lt_cv_with_aix_soname=$with_aix_soname
-else
-  if ${lt_cv_with_aix_soname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  if test ${lt_cv_with_aix_soname+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_with_aix_soname=aix
 fi
 
     with_aix_soname=$lt_cv_with_aix_soname
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
-$as_echo "$with_aix_soname" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+printf "%s\n" "$with_aix_soname" >&6; }
   if test aix != "$with_aix_soname"; then
     # For the AIX way of multilib, we name the shared archive member
     # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
@@ -9256,11 +10077,12 @@ if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+printf %s "checking for objdir... " >&6; }
+if test ${lt_cv_objdir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   rm -f .libs 2>/dev/null
 mkdir .libs 2>/dev/null
 if test -d .libs; then
@@ -9271,17 +10093,15 @@ else
 fi
 rmdir .libs 2>/dev/null
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+printf "%s\n" "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
 
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
+printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
 
 
 
@@ -9327,11 +10147,12 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file
 case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+printf %s "checking for ${ac_tool_prefix}file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
   lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
 
 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+printf %s "checking for file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
   lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
 
 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -9535,11 +10357,12 @@ if test yes = "$GCC"; then
     lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
   esac
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test ${lt_cv_prog_compiler_rtti_exceptions+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_rtti_exceptions=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -9570,8 +10393,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
@@ -9934,26 +10757,28 @@ case $host_os in
     ;;
 esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+printf %s "checking for $compiler option to produce PIC... " >&6; }
+if test ${lt_cv_prog_compiler_pic+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
 lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
 #
 if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if ${lt_cv_prog_compiler_pic_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test ${lt_cv_prog_compiler_pic_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -9984,8 +10809,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_pic_works"; then
     case $lt_prog_compiler_pic in
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if ${lt_cv_prog_compiler_static_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test ${lt_cv_prog_compiler_static_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_static_works=no
    save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
@@ -10041,8 +10867,8 @@ else
    LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_static_works"; then
     :
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_c_o=no
    $RM -r conftest 2>/dev/null
    mkdir conftest
@@ -10103,19 +10930,20 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_c_o=no
    $RM -r conftest 2>/dev/null
    mkdir conftest
@@ -10158,8 +10986,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
@@ -10167,19 +10995,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 hard_links=nottested
 if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+printf %s "checking if we can lock with hard links... " >&6; }
   hard_links=yes
   $RM conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   touch conftest.a
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+printf "%s\n" "$hard_links" >&6; }
   if test no = "$hard_links"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
@@ -10191,8 +11019,8 @@ fi
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   runpath_var=
   allow_undefined_flag=
@@ -10750,21 +11578,23 @@ _LT_EOF
         if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_aix_libpath_+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
   lt_aix_libpath_sed='
       /Import File Strings/,/^$/ {
@@ -10779,7 +11609,7 @@ if ac_fn_c_try_link "$LINENO"; then :
     lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
     lt_cv_aix_libpath_=/usr/lib:/lib
         if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_aix_libpath_+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
   lt_aix_libpath_sed='
       /Import File Strings/,/^$/ {
@@ -10832,7 +11664,7 @@ if ac_fn_c_try_link "$LINENO"; then :
     lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
     lt_cv_aix_libpath_=/usr/lib:/lib
 
          # Older versions of the 11.00 compiler do not understand -b yet
          # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
-         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+printf %s "checking if $CC understands -b... " >&6; }
+if test ${lt_cv_prog_compiler__b+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler__b=no
    save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -b"
@@ -11111,8 +11944,8 @@ else
    LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
 
 if test yes = "$lt_cv_prog_compiler__b"; then
     archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
        # This should be the same for all languages, so no per-tag cache variable.
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if test ${lt_cv_irix_exported_symbol+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   save_LDFLAGS=$LDFLAGS
           LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int foo (void) { return 0; }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_irix_exported_symbol=yes
-else
+else $as_nop
   lt_cv_irix_exported_symbol=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
            LDFLAGS=$save_LDFLAGS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
        if test yes = "$lt_cv_irix_exported_symbol"; then
           archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
@@ -11454,8 +12289,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     fi
   fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+printf "%s\n" "$ld_shlibs" >&6; }
 test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
@@ -11491,18 +12326,19 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+if test ${lt_cv_archive_cmds_need_lc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   $RM conftest*
        echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
          soname=conftest
          lib=conftest
@@ -11520,7 +12356,7 @@ else
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
          then
            lt_cv_archive_cmds_need_lc=no
@@ -11534,8 +12370,8 @@ else
        $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
       archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
@@ -11694,8 +12530,8 @@ esac
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+printf %s "checking dynamic linker characteristics... " >&6; }
 
 if test yes = "$GCC"; then
   case $host_os in
@@ -12256,9 +13092,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   shlibpath_overrides_runpath=no
 
   # Some binutils ld are patched to set DT_RUNPATH
-  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_shlibpath_overrides_runpath+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_shlibpath_overrides_runpath=no
     save_LDFLAGS=$LDFLAGS
     save_libdir=$libdir
@@ -12268,19 +13105,21 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+if ac_fn_c_try_link "$LINENO"
+then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
+then :
   lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     LDFLAGS=$save_LDFLAGS
     libdir=$save_libdir
@@ -12524,8 +13363,8 @@ uts4*)
   dynamic_linker=no
   ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+printf "%s\n" "$dynamic_linker" >&6; }
 test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
@@ -12646,8 +13485,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+printf %s "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
    test -n "$runpath_var" ||
@@ -12671,8 +13510,8 @@ else
   # directories.
   hardcode_action=unsupported
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+printf "%s\n" "$hardcode_action" >&6; }
 
 if test relink = "$hardcode_action" ||
    test yes = "$inherit_rpath"; then
@@ -12716,11 +13555,12 @@ else
 
   darwin*)
     # if libdl is installed we need to link against it
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12729,32 +13569,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_dl_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
+else $as_nop
 
     lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
+if test "x$ac_cv_func_shl_load" = xyes
+then :
   lt_cv_dlopen=shl_load
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+printf %s "checking for shl_load in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_shl_load+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12790,41 +13631,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char shl_load ();
 int
-main ()
+main (void)
 {
 return shl_load ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dld_shl_load=yes
-else
+else $as_nop
   ac_cv_lib_dld_shl_load=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes
+then :
   lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
+else $as_nop
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
+if test "x$ac_cv_func_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12833,37 +13675,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_dl_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+printf %s "checking for dlopen in -lsvld... " >&6; }
+if test ${ac_cv_lib_svld_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsvld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12872,37 +13714,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_svld_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_svld_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+printf %s "checking for dld_link in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_dld_link+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12911,30 +13753,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dld_link ();
 int
-main ()
+main (void)
 {
 return dld_link ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dld_dld_link=yes
-else
+else $as_nop
   ac_cv_lib_dld_dld_link=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes
+then :
   lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
     save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+printf %s "checking whether a program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
          if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self=cross
 else
@@ -13056,7 +13898,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
@@ -13074,16 +13916,17 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+printf "%s\n" "$lt_cv_dlopen_self" >&6; }
 
     if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self_static+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self_static+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
          if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self_static=cross
 else
@@ -13162,7 +14005,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
@@ -13180,8 +14023,8 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
     fi
 
     CPPFLAGS=$save_CPPFLAGS
 
 striplib=
 old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+printf %s "checking whether stripping libraries is possible... " >&6; }
 if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
@@ -13233,16 +14076,16 @@ else
     if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
     fi
     ;;
   *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
     ;;
   esac
 fi
 
 
   # Report what library types will actually be built
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+printf %s "checking if libtool supports shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+printf "%s\n" "$can_build_shared" >&6; }
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+printf %s "checking whether to build shared libraries... " >&6; }
   test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
@@ -13289,15 +14132,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     fi
     ;;
   esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+printf "%s\n" "$enable_shared" >&6; }
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+printf %s "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
   test yes = "$enable_shared" || enable_static=yes
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+printf "%s\n" "$enable_static" >&6; }
 
 
 
@@ -13344,11 +14187,12 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PKG_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
@@ -13358,11 +14202,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -13374,11 +14222,11 @@ esac
 fi
 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
 if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+printf "%s\n" "$PKG_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -13387,11 +14235,12 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
   ac_pt_PKG_CONFIG=$PKG_CONFIG
   # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $ac_pt_PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
@@ -13401,11 +14250,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -13417,11 +14270,11 @@ esac
 fi
 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
 if test -n "$ac_pt_PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_pt_PKG_CONFIG" = x; then
@@ -13429,8 +14282,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     PKG_CONFIG=$ac_pt_PKG_CONFIG
 fi
 if test -n "$PKG_CONFIG"; then
        _pkg_min_version=0.9.0
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; }
        if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
        else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
                PKG_CONFIG=""
        fi
 fi
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
+if test ${with_gnu_ld+y}
+then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
+else $as_nop
   with_gnu_ld=no
 fi
 
@@ -13494,8 +14348,8 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -13524,15 +14378,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
 fi
-if ${acl_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${acl_cv_path_LD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$LD"; then
   acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
 
 LD="$acl_cv_path_LD"
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
@@ -13583,18 +14439,20 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
 
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+                                                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
@@ -13603,8 +14461,8 @@ else
     acl_cv_rpath=done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
   wl="$acl_cv_wl"
   acl_libext="$acl_cv_libext"
   acl_shlibext="$acl_cv_shlibext"
@@ -13615,24 +14473,27 @@ $as_echo "$acl_cv_rpath" >&6; }
   acl_hardcode_direct="$acl_cv_hardcode_direct"
   acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
     # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
+if test ${enable_rpath+y}
+then :
   enableval=$enable_rpath; :
-else
+else $as_nop
   enable_rpath=yes
 fi
 
 
 
 
+
   acl_libdirstem=lib
   acl_libdirstem2=
   case "$host_os" in
     solaris*)
-                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                                    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+printf %s "checking for 64-bit host... " >&6; }
+if test ${gl_cv_solaris_64bit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13642,17 +14503,18 @@ sixtyfour bits
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+  $EGREP "sixtyfour bits" >/dev/null 2>&1
+then :
   gl_cv_solaris_64bit=yes
-else
+else $as_nop
   gl_cv_solaris_64bit=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+printf "%s\n" "$gl_cv_solaris_64bit" >&6; }
       if test $gl_cv_solaris_64bit = yes; then
         acl_libdirstem=lib/64
         case "$host_cpu" in
@@ -13711,7 +14573,8 @@ $as_echo "$gl_cv_solaris_64bit" >&6; }
 
 
 # Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
+if test ${with_libiconv_prefix+y}
+then :
   withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
   done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
@@ -14196,7 +15060,7 @@ else
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
            iconv(cd,NULL,NULL,NULL,NULL);
@@ -14205,10 +15069,11 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
@@ -14220,7 +15085,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
              iconv(cd,NULL,NULL,NULL,NULL);
@@ -14229,37 +15094,40 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
                   am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
       fi
-      if test "$cross_compiling" = yes; then :
+      if test "$cross_compiling" = yes
+then :
 
          case "$host_os" in
            aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
            *)            am_cv_func_iconv_works="guessing yes" ;;
          esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -14362,9 +15230,10 @@ int main ()
   return result;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   am_cv_func_iconv_works=yes
-else
+else $as_nop
   am_cv_func_iconv_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -14374,8 +15243,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -14385,14 +15254,14 @@ $as_echo "$am_cv_func_iconv_works" >&6; }
   fi
   if test "$am_func_iconv" = yes; then
 
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -14402,11 +15271,12 @@ $as_echo "$LIBICONV" >&6; }
 
 
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
-$as_echo_n "checking for iconv declaration... " >&6; }
-    if ${am_cv_proto_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+printf %s "checking for iconv declaration... " >&6; }
+    if test ${am_cv_proto_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -14424,31 +15294,30 @@ size_t iconv();
 #endif
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   am_cv_proto_iconv_arg1=""
-else
+else $as_nop
   am_cv_proto_iconv_arg1="const"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
          $am_cv_proto_iconv" >&5
-$as_echo "
+printf "%s\n" "
          $am_cv_proto_iconv" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
+printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h
 
 
   fi
@@ -14457,68 +15326,73 @@ _ACEOF
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if ${ac_cv_c_restrict+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+printf %s "checking for C/C++ restrict keyword... " >&6; }
+if test ${ac_cv_c_restrict+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+   # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see:
+   # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html
+   # Put 'restrict' last, because C++ lacks it.
+   for ac_kw in __restrict__ __restrict _Restrict restrict; do
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-typedef int * int_ptr;
-       int foo (int_ptr $ac_kw ip) {
-       return ip[0];
-       }
+typedef int *int_ptr;
+          int foo (int_ptr $ac_kw ip) { return ip[0]; }
+          int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+          int bar (int ip[$ac_kw]) { return ip[0]; }
+
 int
-main ()
+main (void)
 {
 int s[1];
-       int * $ac_kw t = s;
-       t[0] = 0;
-       return foo(t)
+          int *$ac_kw t = s;
+          t[0] = 0;
+          return foo (t) + bar (t);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_restrict=$ac_kw
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
      test "$ac_cv_c_restrict" != no && break
    done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+printf "%s\n" "$ac_cv_c_restrict" >&6; }
 
  case $ac_cv_c_restrict in
    restrict) ;;
-   no) $as_echo "#define restrict /**/" >>confdefs.h
+   no) printf "%s\n" "#define restrict /**/" >>confdefs.h
  ;;
-   *)  cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
+   *)  printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h
  ;;
  esac
 
 
 ac_header_dirent=no
 for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+printf %s "checking for $ac_hdr that defines DIR... " >&6; }
+if eval test \${$as_ac_Header+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <$ac_hdr>
 
 int
-main ()
+main (void)
 {
 if ((DIR *) 0)
 return 0;
@@ -14526,19 +15400,21 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$as_ac_Header=yes"
-else
+else $as_nop
   eval "$as_ac_Header=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$as_ac_Header
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1
 _ACEOF
 
 ac_header_dirent=$ac_hdr; break
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -14559,56 +15436,59 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' dir; do
+for ac_lib in '' dir
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -14616,273 +15496,304 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' x; do
+for ac_lib in '' x
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
 
-int
-main ()
-{
+fi
+ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
 
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h
 
-else
-  ac_cv_header_stdc=no
 fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_statvfs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_STATVFS_H 1" >>confdefs.h
 
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
+fi
+ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_ctype_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_CTYPE_H 1" >>confdefs.h
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
 
-else
-  ac_cv_header_stdc=no
 fi
-rm -f conftest*
+ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "byteswap.h" "ac_cv_header_byteswap_h" "$ac_includes_default"
+if test "x$ac_cv_header_byteswap_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_BYTESWAP_H 1" >>confdefs.h
 
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+fi
+ac_fn_c_check_header_compile "$LINENO" "endian.h" "ac_cv_header_endian_h" "$ac_includes_default"
+if test "x$ac_cv_header_endian_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ENDIAN_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_save_CFLAGS=$CFLAGS
+   ac_cv_c_undeclared_builtin_options='cannot detect'
+   for ac_arg in '' -fno-builtin; do
+     CFLAGS="$ac_save_CFLAGS $ac_arg"
+     # This test program should *not* compile successfully.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
 
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
 int
-main ()
+main (void)
 {
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
+(void) strchr;
+  ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+else $as_nop
+  # This test program should compile successfully.
+        # No library function is consistently available on
+        # freestanding implementations, so test against a dummy
+        # declaration.  Include always-available headers on the
+        # off chance that they somehow elicit warnings.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
 
-fi
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+  (void) ac_decl;
 
-for ac_header in fcntl.h malloc.h inttypes.h sys/ioctl.h sys/mman.h \
-       sys/sysmacros.h sys/statvfs.h ctype.h unistd.h locale.h byteswap.h endian.h stdint.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  ;
+  return 0;
+}
 _ACEOF
-
+if ac_fn_c_try_compile "$LINENO"
+then :
+  if test x"$ac_arg" = x
+then :
+  ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+  ac_cv_c_undeclared_builtin_options=$ac_arg
 fi
+          break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+    done
+    CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+  case $ac_cv_c_undeclared_builtin_options in #(
+  'cannot detect') :
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+  'none needed') :
+    ac_c_undeclared_builtin_options='' ;; #(
+  *) :
+    ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
 
-done
-
-ac_fn_c_check_decl "$LINENO" "O_CLOEXEC" "ac_cv_have_decl_O_CLOEXEC" "
+ac_fn_check_decl "$LINENO" "O_CLOEXEC" "ac_cv_have_decl_O_CLOEXEC" "
 #ifdef HAVE_FCNTL_H
 # include <fcntl.h>
 #endif
 
-"
-if test "x$ac_cv_have_decl_O_CLOEXEC" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_O_CLOEXEC" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_O_CLOEXEC $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_O_CLOEXEC $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
 
-$as_echo "#define O_CLOEXEC 0" >>confdefs.h
+printf "%s\n" "#define O_CLOEXEC 0" >>confdefs.h
 
 fi
 
 
-for ac_header in uuid/uuid.h
+       for ac_header in uuid/uuid.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
-if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_UUID_UUID_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
+if test "x$ac_cv_header_uuid_uuid_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need the uuid library." "$LINENO" 5
 fi
 
 done
+ac_fn_c_check_header_compile "$LINENO" "libdevmapper.h" "ac_cv_header_libdevmapper_h" "$ac_includes_default"
+if test "x$ac_cv_header_libdevmapper_h" = xyes
+then :
 
-ac_fn_c_check_header_mongrel "$LINENO" "libdevmapper.h" "ac_cv_header_libdevmapper_h" "$ac_includes_default"
-if test "x$ac_cv_header_libdevmapper_h" = xyes; then :
-
-else
+else $as_nop
   as_fn_error $? "You need the device-mapper library." "$LINENO" 5
 fi
 
 
-
 # Check whether --enable-keyring was given.
-if test "${enable_keyring+set}" = set; then :
+if test ${enable_keyring+y}
+then :
   enableval=$enable_keyring;
-else
+else $as_nop
   enable_keyring=yes
 fi
 
 if test "x$enable_keyring" = "xyes"; then
-       for ac_header in linux/keyctl.h
+              for ac_header in linux/keyctl.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "linux/keyctl.h" "ac_cv_header_linux_keyctl_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_keyctl_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LINUX_KEYCTL_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "linux/keyctl.h" "ac_cv_header_linux_keyctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_keyctl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_KEYCTL_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need Linux kernel headers with kernel keyring service compiled." "$LINENO" 5
 fi
 
 done
 
+                       ac_fn_check_decl "$LINENO" "__NR_add_key" "ac_cv_have_decl___NR_add_key" "#include <syscall.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl___NR_add_key" = xyes
+then :
 
-                       ac_fn_c_check_decl "$LINENO" "__NR_add_key" "ac_cv_have_decl___NR_add_key" "#include <syscall.h>
-"
-if test "x$ac_cv_have_decl___NR_add_key" = xyes; then :
-
-else
+else $as_nop
   as_fn_error $? "The kernel is missing add_key syscall." "$LINENO" 5
 fi
+       ac_fn_check_decl "$LINENO" "__NR_keyctl" "ac_cv_have_decl___NR_keyctl" "#include <syscall.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl___NR_keyctl" = xyes
+then :
 
-       ac_fn_c_check_decl "$LINENO" "__NR_keyctl" "ac_cv_have_decl___NR_keyctl" "#include <syscall.h>
-"
-if test "x$ac_cv_have_decl___NR_keyctl" = xyes; then :
-
-else
+else $as_nop
   as_fn_error $? "The kernel is missing keyctl syscall." "$LINENO" 5
 fi
+       ac_fn_check_decl "$LINENO" "__NR_request_key" "ac_cv_have_decl___NR_request_key" "#include <syscall.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl___NR_request_key" = xyes
+then :
 
-       ac_fn_c_check_decl "$LINENO" "__NR_request_key" "ac_cv_have_decl___NR_request_key" "#include <syscall.h>
-"
-if test "x$ac_cv_have_decl___NR_request_key" = xyes; then :
-
-else
+else $as_nop
   as_fn_error $? "The kernel is missing request_key syscall." "$LINENO" 5
 fi
 
-
                        ac_fn_c_check_type "$LINENO" "key_serial_t" "ac_cv_type_key_serial_t" "
        $ac_includes_default
        #ifdef HAVE_LINUX_KEYCTL_H
        #endif
 
 "
-if test "x$ac_cv_type_key_serial_t" = xyes; then :
+if test "x$ac_cv_type_key_serial_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_KEY_SERIAL_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_KEY_SERIAL_T 1" >>confdefs.h
 
 
 fi
 
 
 
-$as_echo "#define KERNEL_KEYRING 1" >>confdefs.h
+printf "%s\n" "#define KERNEL_KEYRING 1" >>confdefs.h
 
 fi
  if test "x$enable_keyring" = "xyes"; then
 
 
 saved_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_clear in -luuid" >&5
-$as_echo_n "checking for uuid_clear in -luuid... " >&6; }
-if ${ac_cv_lib_uuid_uuid_clear+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_clear in -luuid" >&5
+printf %s "checking for uuid_clear in -luuid... " >&6; }
+if test ${ac_cv_lib_uuid_uuid_clear+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14927,37 +15838,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char uuid_clear ();
 int
-main ()
+main (void)
 {
 return uuid_clear ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_uuid_uuid_clear=yes
-else
+else $as_nop
   ac_cv_lib_uuid_uuid_clear=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_clear" >&5
-$as_echo "$ac_cv_lib_uuid_uuid_clear" >&6; }
-if test "x$ac_cv_lib_uuid_uuid_clear" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBUUID 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_clear" >&5
+printf "%s\n" "$ac_cv_lib_uuid_uuid_clear" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_clear" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBUUID 1" >>confdefs.h
 
   LIBS="-luuid $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "You need the uuid library." "$LINENO" 5
 fi
 
@@ -14965,11 +15873,12 @@ UUID_LIBS=$LIBS
 
 LIBS=$saved_LIBS
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
-$as_echo_n "checking for library containing clock_gettime... " >&6; }
-if ${ac_cv_search_clock_gettime+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+printf %s "checking for library containing clock_gettime... " >&6; }
+if test ${ac_cv_search_clock_gettime+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -14977,77 +15886,93 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char clock_gettime ();
 int
-main ()
+main (void)
 {
 return clock_gettime ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' rt posix4; do
+for ac_lib in '' rt posix4
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_clock_gettime=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_clock_gettime+:} false; then :
+  if test ${ac_cv_search_clock_gettime+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_clock_gettime+:} false; then :
+if test ${ac_cv_search_clock_gettime+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_clock_gettime=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
-$as_echo "$ac_cv_search_clock_gettime" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+printf "%s\n" "$ac_cv_search_clock_gettime" >&6; }
 ac_res=$ac_cv_search_clock_gettime
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-for ac_func in posix_memalign clock_gettime posix_fallocate explicit_bzero
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign"
+if test "x$ac_cv_func_posix_memalign" = xyes
+then :
+  printf "%s\n" "#define HAVE_POSIX_MEMALIGN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = xyes
+then :
+  printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "posix_fallocate" "ac_cv_func_posix_fallocate"
+if test "x$ac_cv_func_posix_fallocate" = xyes
+then :
+  printf "%s\n" "#define HAVE_POSIX_FALLOCATE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
+if test "x$ac_cv_func_explicit_bzero" = xyes
+then :
+  printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
 
 fi
-done
 
 
 if test "x$enable_largefile" = "xno"; then
   as_fn_error $? "Building with --disable-largefile is not supported, it can cause data corruption." "$LINENO" 5
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
 #ifndef __cplusplus
@@ -15060,7 +15985,7 @@ main ()
   /* NEC SVR4.0.2 mips cc rejects this.  */
   struct point {int x, y;};
   static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
+  /* IBM XL C 1.02.0.0 rejects this.
      It does not let you subtract one const X* pointer from another in
      an arm of an if-expression whose if-part is not a constant
      expression */
@@ -15088,7 +16013,7 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+  { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
     struct s { int j; const int *ap[3]; } bx;
     struct s *b = &bx; b->j = 5;
@@ -15104,26 +16029,28 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_const=yes
-else
+else $as_nop
   ac_cv_c_const=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-$as_echo "#define const /**/" >>confdefs.h
+printf "%s\n" "#define const /**/" >>confdefs.h
 
 fi
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_c_bigendian=unknown
     # See if we're dealing with a universal compiler.
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15134,7 +16061,8 @@ else
             typedef int dummy;
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
        # Check for potential -arch flags.  It is not universal unless
        # there are at least two -arch flags with different values.
@@ -15158,7 +16086,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
         fi
        done
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     if test $ac_cv_c_bigendian = unknown; then
       # See if sys/param.h defines the BYTE_ORDER macro.
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15167,7 +16095,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
             #include <sys/param.h>
 
 int
-main ()
+main (void)
 {
 #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
                     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
@@ -15179,7 +16107,8 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   # It does; now see whether it defined to BIG_ENDIAN or not.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15187,7 +16116,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
                #include <sys/param.h>
 
 int
-main ()
+main (void)
 {
 #if BYTE_ORDER != BIG_ENDIAN
                 not big endian
@@ -15197,14 +16126,15 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_bigendian=yes
-else
+else $as_nop
   ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     fi
     if test $ac_cv_c_bigendian = unknown; then
       # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
@@ -15213,7 +16143,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 #include <limits.h>
 
 int
-main ()
+main (void)
 {
 #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
              bogus endian macros
@@ -15223,14 +16153,15 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   # It does; now see whether it defined to _BIG_ENDIAN or not.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
 
 int
-main ()
+main (void)
 {
 #ifndef _BIG_ENDIAN
                 not big endian
@@ -15240,31 +16171,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_bigendian=yes
-else
+else $as_nop
   ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     fi
     if test $ac_cv_c_bigendian = unknown; then
       # Compile a test program.
-      if test "$cross_compiling" = yes; then :
+      if test "$cross_compiling" = yes
+then :
   # Try to guess by grepping values from an object file.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-short int ascii_mm[] =
+unsigned short int ascii_mm[] =
                  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-               short int ascii_ii[] =
+               unsigned short int ascii_ii[] =
                  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
                int use_ascii (int i) {
                  return ascii_mm[i] + ascii_ii[i];
                }
-               short int ebcdic_ii[] =
+               unsigned short int ebcdic_ii[] =
                  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-               short int ebcdic_mm[] =
+               unsigned short int ebcdic_mm[] =
                  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
                int use_ebcdic (int i) {
                  return ebcdic_mm[i] + ebcdic_ii[i];
@@ -15272,14 +16205,15 @@ short int ascii_mm[] =
                extern int foo;
 
 int
-main ()
+main (void)
 {
 return use_ascii (foo) == use_ebcdic (foo);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
              ac_cv_c_bigendian=yes
            fi
@@ -15292,13 +16226,13 @@ if ac_fn_c_try_compile "$LINENO"; then :
              fi
            fi
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 
             /* Are we little or big endian?  From Harbison&Steele.  */
@@ -15314,9 +16248,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_c_bigendian=no
-else
+else $as_nop
   ac_cv_c_bigendian=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
  case $ac_cv_c_bigendian in #(
    yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+     printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
 ;; #(
    no)
       ;; #(
    universal)
 
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
      ;; #(
    *)
@@ -15344,28 +16279,29 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
  esac
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = xyes; then :
+if test "x$ac_cv_type_off_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
-_ACEOF
+printf "%s\n" "#define off_t long int" >>confdefs.h
 
 fi
 
 # Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
+if test ${enable_largefile+y}
+then :
   enableval=$enable_largefile;
 fi
 
 if test "$enable_largefile" != no; then
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_sys_largefile_CC=no
      if test "$GCC" != yes; then
        ac_save_CC=$CC
@@ -15379,44 +16315,47 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         CC="$CC -n32"
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_largefile_CC=' -n32'; break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         break
        done
        CC=$ac_save_CC
        rm -f conftest.$ac_ext
     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
   if test "$ac_cv_sys_largefile_CC" != no; then
     CC=$CC$ac_cv_sys_largefile_CC
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15425,22 +16364,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _FILE_OFFSET_BITS 64
@@ -15449,43 +16389,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=64; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_file_offset_bits=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
 case $ac_cv_sys_file_offset_bits in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
+printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test ${ac_cv_sys_large_files+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15494,22 +16434,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _LARGE_FILES 1
@@ -15518,54 +16459,52 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=1; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_large_files=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+printf "%s\n" "$ac_cv_sys_large_files" >&6; }
 case $ac_cv_sys_large_files in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
+printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   fi
-
-
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
-$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_source+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_source+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h> /* for off_t */
      #include <stdio.h>
 int
-main ()
+main (void)
 {
 int (*fp) (FILE *, off_t, int) = fseeko;
      return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
@@ -15573,10 +16512,11 @@ int (*fp) (FILE *, off_t, int) = fseeko;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_sys_largefile_source=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15584,7 +16524,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <sys/types.h> /* for off_t */
      #include <stdio.h>
 int
-main ()
+main (void)
 {
 int (*fp) (FILE *, off_t, int) = fseeko;
      return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
@@ -15592,23 +16532,22 @@ int (*fp) (FILE *, off_t, int) = fseeko;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_sys_largefile_source=1; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   ac_cv_sys_largefile_source=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
-$as_echo "$ac_cv_sys_largefile_source" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
+printf "%s\n" "$ac_cv_sys_largefile_source" >&6; }
 case $ac_cv_sys_largefile_source in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
-_ACEOF
+printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
@@ -15618,16 +16557,17 @@ rm -rf conftest*
 # If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
 if test $ac_cv_sys_largefile_source != unknown; then
 
-$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h
+printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h
 
 fi
 
 if test $ac_cv_c_compiler_gnu = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
-$as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if ${ac_cv_prog_gcc_traditional+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
     ac_pattern="Autoconf.*'x'"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15635,12 +16575,13 @@ else
 Autoconf TIOCGETP
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
-else
+else $as_nop
   ac_cv_prog_gcc_traditional=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
   if test $ac_cv_prog_gcc_traditional = no; then
@@ -15650,55 +16591,54 @@ rm -f conftest*
 Autoconf TCGETA
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
-$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
   if test $ac_cv_prog_gcc_traditional = yes; then
     CC="$CC -traditional"
   fi
 fi
 
-ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
+ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strerror_r" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRERROR_R $ac_have_decl
-_ACEOF
 
-for ac_func in strerror_r
-do :
-  ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
-if test "x$ac_cv_func_strerror_r" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR_R 1
-_ACEOF
+if test $ac_cv_have_decl_strerror_r = yes; then
+  # For backward compatibility's sake, define HAVE_STRERROR_R.
+  # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well
+  # as AC_CHECK_DECLS_ONCE.)
+
+printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
 
 fi
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
-$as_echo_n "checking whether strerror_r returns char *... " >&6; }
-if ${ac_cv_func_strerror_r_char_p+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+printf %s "checking whether strerror_r returns char *... " >&6; }
+if test ${ac_cv_func_strerror_r_char_p+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     ac_cv_func_strerror_r_char_p=no
     if test $ac_cv_have_decl_strerror_r = yes; then
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$ac_includes_default
+#include <string.h>
 int
-main ()
+main (void)
 {
 
          char buf[100];
@@ -15710,66 +16650,38 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_func_strerror_r_char_p=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    else
-      # strerror_r is not declared.  Choose between
-      # systems that have relatively inaccessible declarations for the
-      # function.  BeOS and DEC UNIX 4.0 fall in this category, but the
-      # former has a strerror_r that returns char*, while the latter
-      # has a strerror_r that returns `int'.
-      # This test should segfault on the DEC system.
-      if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-       extern char *strerror_r ();
-int
-main ()
-{
-char buf[100];
-         char x = *strerror_r (0, buf, sizeof buf);
-         return ! isalpha (x);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_func_strerror_r_char_p=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
-$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; }
 if test $ac_cv_func_strerror_r_char_p = yes; then
 
-$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
+printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h
 
 fi
 
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+printf %s "checking whether NLS is requested... " >&6; }
     # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
+if test ${enable_nls+y}
+then :
   enableval=$enable_nls; USE_NLS=$enableval
-else
+else $as_nop
   USE_NLS=yes
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
 
 
 
@@ -15808,11 +16720,12 @@ rm -f conf$$.file
 
 # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGFMT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGFMT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$MSGFMT" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
@@ -15840,20 +16753,21 @@ esac
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
 if test "$MSGFMT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
-$as_echo "$MSGFMT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+printf "%s\n" "$MSGFMT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GMSGFMT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GMSGFMT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $GMSGFMT in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
@@ -15863,11 +16777,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -15880,11 +16798,11 @@ esac
 fi
 GMSGFMT=$ac_cv_path_GMSGFMT
 if test -n "$GMSGFMT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
-$as_echo "$GMSGFMT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+printf "%s\n" "$GMSGFMT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -15930,11 +16848,12 @@ rm -f conf$$.file
 
 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XGETTEXT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_XGETTEXT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$XGETTEXT" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
@@ -15962,11 +16881,11 @@ esac
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
 if test "$XGETTEXT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
-$as_echo "$XGETTEXT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+printf "%s\n" "$XGETTEXT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
     rm -f messages.po
@@ -16007,11 +16926,12 @@ rm -f conf$$.file
 
 # Extract the first word of "msgmerge", so it can be a program name with args.
 set dummy msgmerge; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGMERGE+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGMERGE+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$MSGMERGE" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
@@ -16038,11 +16958,11 @@ esac
 fi
 MSGMERGE="$ac_cv_path_MSGMERGE"
 if test "$MSGMERGE" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
-$as_echo "$MSGMERGE" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+printf "%s\n" "$MSGMERGE" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
 
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
-$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
-if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFPreferences.h>
 int
-main ()
+main (void)
 {
 CFPreferencesCopyAppValue(NULL, NULL)
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFPreferencesCopyAppValue=yes
-else
+else $as_nop
   gt_cv_func_CFPreferencesCopyAppValue=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
-$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
   fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+printf %s "checking for CFLocaleCopyCurrent... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyCurrent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFLocale.h>
 int
-main ()
+main (void)
 {
 CFLocaleCopyCurrent();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFLocaleCopyCurrent=yes
-else
+else $as_nop
   gt_cv_func_CFLocaleCopyCurrent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
 
   fi
   INTL_MACOSX_LIBS=
@@ -16189,11 +17113,12 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
           gt_expression_test_code=
         fi
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
-$as_echo_n "checking for GNU gettext in libc... " >&6; }
-if eval \${$gt_func_gnugettext_libc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+printf %s "checking for GNU gettext in libc... " >&6; }
+if eval test \${$gt_func_gnugettext_libc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -16203,7 +17128,7 @@ extern int _nl_msg_cat_cntr;
 extern int *_nl_domain_bindings;
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -16213,17 +17138,18 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_b
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$gt_func_gnugettext_libc=yes"
-else
+else $as_nop
   eval "$gt_func_gnugettext_libc=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 eval ac_res=\$$gt_func_gnugettext_libc
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
 
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
@@ -16256,11 +17182,12 @@ $as_echo "$ac_res" >&6; }
   done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
@@ -16271,7 +17198,7 @@ else
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
            iconv(cd,NULL,NULL,NULL,NULL);
@@ -16280,10 +17207,11 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
@@ -16295,7 +17223,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
              iconv(cd,NULL,NULL,NULL,NULL);
@@ -16304,37 +17232,40 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
                   am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
       fi
-      if test "$cross_compiling" = yes; then :
+      if test "$cross_compiling" = yes
+then :
 
          case "$host_os" in
            aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
            *)            am_cv_func_iconv_works="guessing yes" ;;
          esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -16437,9 +17368,10 @@ int main ()
   return result;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   am_cv_func_iconv_works=yes
-else
+else $as_nop
   am_cv_func_iconv_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -16449,8 +17381,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -16460,14 +17392,14 @@ $as_echo "$am_cv_func_iconv_works" >&6; }
   fi
   if test "$am_func_iconv" = yes; then
 
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -16499,7 +17431,8 @@ $as_echo "$LIBICONV" >&6; }
 
 
 # Check whether --with-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then :
+if test ${with_libintl_prefix+y}
+then :
   withval=$with_libintl_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
 
 
 
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
-$as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if eval \${$gt_func_gnugettext_libintl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+          { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+printf %s "checking for GNU gettext in libintl... " >&6; }
+if eval test \${$gt_func_gnugettext_libintl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
             gt_save_LIBS="$LIBS"
@@ -16960,7 +17894,7 @@ extern
 const char *_nl_expand_alias (const char *);
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -16970,12 +17904,13 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$gt_func_gnugettext_libintl=yes"
-else
+else $as_nop
   eval "$gt_func_gnugettext_libintl=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
                         if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
@@ -16992,7 +17927,7 @@ extern
 const char *_nl_expand_alias (const char *);
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -17002,21 +17937,22 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   LIBINTL="$LIBINTL $LIBICONV"
                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                  eval "$gt_func_gnugettext_libintl=yes"
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"
 fi
 eval ac_res=\$$gt_func_gnugettext_libintl
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
         fi
 
                                         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
@@ -17043,20 +17979,20 @@ $as_echo "$ac_res" >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes" \
        || test "$nls_cv_use_gnu_gettext" = "yes"; then
 
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h
 
     else
       USE_NLS=no
     fi
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
-$as_echo_n "checking whether to use NLS... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+printf %s "checking whether to use NLS... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
   if test "$USE_NLS" = "yes"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
-$as_echo_n "checking where the gettext function comes from... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+printf %s "checking where the gettext function comes from... " >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         gt_source="external libintl"
@@ -17066,18 +18002,18 @@ $as_echo_n "checking where the gettext function comes from... " >&6; }
     else
       gt_source="included intl directory"
     fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
-$as_echo "$gt_source" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+printf "%s\n" "$gt_source" >&6; }
   fi
 
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
-$as_echo_n "checking how to link with libintl... " >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
-$as_echo "$LIBINTL" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+printf %s "checking how to link with libintl... " >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+printf "%s\n" "$LIBINTL" >&6; }
 
   for element in $INCINTL; do
     haveit=
@@ -17104,10 +18040,10 @@ $as_echo "$LIBINTL" >&6; }
       fi
 
 
-$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h
 
 
-$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
     fi
 
@@ -17127,11 +18063,12 @@ $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
 
 saved_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptConfigFileToString in -lpopt" >&5
-$as_echo_n "checking for poptConfigFileToString in -lpopt... " >&6; }
-if ${ac_cv_lib_popt_poptConfigFileToString+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for poptConfigFileToString in -lpopt" >&5
+printf %s "checking for poptConfigFileToString in -lpopt... " >&6; }
+if test ${ac_cv_lib_popt_poptConfigFileToString+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpopt  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17140,37 +18077,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char poptConfigFileToString ();
 int
-main ()
+main (void)
 {
 return poptConfigFileToString ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_popt_poptConfigFileToString=yes
-else
+else $as_nop
   ac_cv_lib_popt_poptConfigFileToString=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptConfigFileToString" >&5
-$as_echo "$ac_cv_lib_popt_poptConfigFileToString" >&6; }
-if test "x$ac_cv_lib_popt_poptConfigFileToString" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPOPT 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptConfigFileToString" >&5
+printf "%s\n" "$ac_cv_lib_popt_poptConfigFileToString" >&6; }
+if test "x$ac_cv_lib_popt_poptConfigFileToString" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBPOPT 1" >>confdefs.h
 
   LIBS="-lpopt $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "You need popt 1.7 or newer to compile." "$LINENO" 5
 fi
 
@@ -17179,13 +18113,14 @@ POPT_LIBS=$LIBS
 LIBS=$saved_LIBS
 
 # Check whether --enable-fips was given.
-if test "${enable_fips+set}" = set; then :
+if test ${enable_fips+y}
+then :
   enableval=$enable_fips;
 fi
 
 if test "x$enable_fips" = "xyes"; then
 
-$as_echo "#define ENABLE_FIPS 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_FIPS 1" >>confdefs.h
 
 
        if test "x$enable_static" = "xyes" -o "x$enable_static_cryptsetup" = "xyes" ; then
 
 
 
+# Check whether --enable-luks2-reencryption was given.
+if test ${enable_luks2_reencryption+y}
+then :
+  enableval=$enable_luks2_reencryption;
+else $as_nop
+  enable_luks2_reencryption=yes
+fi
+
+if test "x$enable_luks2_reencryption" = "xyes"; then
+
+printf "%s\n" "#define USE_LUKS2_REENCRYPTION 1" >>confdefs.h
+
+fi
+
 # Check whether --enable-pwquality was given.
-if test "${enable_pwquality+set}" = set; then :
+if test ${enable_pwquality+y}
+then :
   enableval=$enable_pwquality;
 fi
 
 
 if test "x$enable_pwquality" = "xyes"; then
 
-$as_echo "#define ENABLE_PWQUALITY 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_PWQUALITY 1" >>confdefs.h
 
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pwquality >= 1.0.0" >&5
-$as_echo_n "checking for pwquality >= 1.0.0... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pwquality >= 1.0.0" >&5
+printf %s "checking for pwquality >= 1.0.0... " >&6; }
 
 if test -n "$PWQUALITY_CFLAGS"; then
     pkg_cv_PWQUALITY_CFLAGS="$PWQUALITY_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5
   ($PKG_CONFIG --exists --print-errors "pwquality >= 1.0.0") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PWQUALITY_CFLAGS=`$PKG_CONFIG --cflags "pwquality >= 1.0.0" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17231,10 +18181,10 @@ if test -n "$PWQUALITY_LIBS"; then
     pkg_cv_PWQUALITY_LIBS="$PWQUALITY_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pwquality >= 1.0.0\""; } >&5
   ($PKG_CONFIG --exists --print-errors "pwquality >= 1.0.0") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PWQUALITY_LIBS=`$PKG_CONFIG --libs "pwquality >= 1.0.0" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17248,8 +18198,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
        as_fn_error $? "You need pwquality library." "$LINENO" 5
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        as_fn_error $? "You need pwquality library." "$LINENO" 5
 else
        PWQUALITY_CFLAGS=$pkg_cv_PWQUALITY_CFLAGS
        PWQUALITY_LIBS=$pkg_cv_PWQUALITY_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
 
@@ -17281,7 +18231,8 @@ fi
 fi
 
 # Check whether --enable-passwdqc was given.
-if test "${enable_passwdqc+set}" = set; then :
+if test ${enable_passwdqc+y}
+then :
   enableval=$enable_passwdqc;
 fi
 
@@ -17292,17 +18243,87 @@ case "$enable_passwdqc" in
        *) as_fn_error $? "Unrecognized --enable-passwdqc parameter." "$LINENO" 5 ;;
 esac
 
-cat >>confdefs.h <<_ACEOF
-#define PASSWDQC_CONFIG_FILE "$use_passwdqc_config"
-_ACEOF
+printf "%s\n" "#define PASSWDQC_CONFIG_FILE \"$use_passwdqc_config\"" >>confdefs.h
 
 
 if test "x$enable_passwdqc" = "xyes"; then
 
-$as_echo "#define ENABLE_PASSWDQC 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_PASSWDQC 1" >>confdefs.h
+
+
+       saved_LIBS="$LIBS"
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing passwdqc_check" >&5
+printf %s "checking for library containing passwdqc_check... " >&6; }
+if test ${ac_cv_search_passwdqc_check+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+char passwdqc_check ();
+int
+main (void)
+{
+return passwdqc_check ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' passwdqc
+do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"
+then :
+  ac_cv_search_passwdqc_check=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext
+  if test ${ac_cv_search_passwdqc_check+y}
+then :
+  break
+fi
+done
+if test ${ac_cv_search_passwdqc_check+y}
+then :
+
+else $as_nop
+  ac_cv_search_passwdqc_check=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_passwdqc_check" >&5
+printf "%s\n" "$ac_cv_search_passwdqc_check" >&6; }
+ac_res=$ac_cv_search_passwdqc_check
+if test "$ac_res" != no
+then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+       case "$ac_cv_search_passwdqc_check" in
+               no) as_fn_error $? "failed to find passwdqc_check" "$LINENO" 5 ;;
+               -l*) PASSWDQC_LIBS="$ac_cv_search_passwdqc_check" ;;
+               *) PASSWDQC_LIBS= ;;
+       esac
+       ac_fn_c_check_func "$LINENO" "passwdqc_params_free" "ac_cv_func_passwdqc_params_free"
+if test "x$ac_cv_func_passwdqc_params_free" = xyes
+then :
+  printf "%s\n" "#define HAVE_PASSWDQC_PARAMS_FREE 1" >>confdefs.h
 
+fi
 
-       PASSWDQC_LIBS="-lpasswdqc"
+       LIBS="$saved_LIBS"
 fi
 
 if test "x$enable_pwquality$enable_passwdqc" = "xyesyes"; then
 saved_LIBS=$LIBS
 
 # Check whether --enable-static-cryptsetup was given.
-if test "${enable_static_cryptsetup+set}" = set; then :
+if test ${enable_static_cryptsetup+y}
+then :
   enableval=$enable_static_cryptsetup;
 fi
 
 if test "x$enable_static_cryptsetup" = "xyes"; then
        if test "x$enable_static" = "xno"; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Requested static cryptsetup build, enabling static library." >&5
-$as_echo "$as_me: WARNING: Requested static cryptsetup build, enabling static library." >&2;}
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Requested static cryptsetup build, enabling static library." >&5
+printf "%s\n" "$as_me: WARNING: Requested static cryptsetup build, enabling static library." >&2;}
                enable_static=yes
        fi
 fi
 
 
 # Check whether --enable-cryptsetup was given.
-if test "${enable_cryptsetup+set}" = set; then :
+if test ${enable_cryptsetup+y}
+then :
   enableval=$enable_cryptsetup;
-else
+else $as_nop
   enable_cryptsetup=yes
 fi
 
 
 
 # Check whether --enable-veritysetup was given.
-if test "${enable_veritysetup+set}" = set; then :
+if test ${enable_veritysetup+y}
+then :
   enableval=$enable_veritysetup;
-else
+else $as_nop
   enable_veritysetup=yes
 fi
 
 
 
 # Check whether --enable-cryptsetup-reencrypt was given.
-if test "${enable_cryptsetup_reencrypt+set}" = set; then :
+if test ${enable_cryptsetup_reencrypt+y}
+then :
   enableval=$enable_cryptsetup_reencrypt;
-else
+else $as_nop
   enable_cryptsetup_reencrypt=yes
 fi
 
 
 
 # Check whether --enable-integritysetup was given.
-if test "${enable_integritysetup+set}" = set; then :
+if test ${enable_integritysetup+y}
+then :
   enableval=$enable_integritysetup;
-else
+else $as_nop
   enable_integritysetup=yes
 fi
 
 
 
 # Check whether --enable-selinux was given.
-if test "${enable_selinux+set}" = set; then :
+if test ${enable_selinux+y}
+then :
   enableval=$enable_selinux;
-else
+else $as_nop
   enable_selinux=yes
 fi
 
 
 # Check whether --enable-udev was given.
-if test "${enable_udev+set}" = set; then :
+if test ${enable_udev+y}
+then :
   enableval=$enable_udev;
-else
+else $as_nop
   enable_udev=yes
 fi
 
 
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for devmapper >= 1.02.03" >&5
-$as_echo_n "checking for devmapper >= 1.02.03... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for devmapper >= 1.02.03" >&5
+printf %s "checking for devmapper >= 1.02.03... " >&6; }
 
 if test -n "$DEVMAPPER_CFLAGS"; then
     pkg_cv_DEVMAPPER_CFLAGS="$DEVMAPPER_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5
   ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.03") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_DEVMAPPER_CFLAGS=`$PKG_CONFIG --cflags "devmapper >= 1.02.03" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17449,10 +18477,10 @@ if test -n "$DEVMAPPER_LIBS"; then
     pkg_cv_DEVMAPPER_LIBS="$DEVMAPPER_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.03\""; } >&5
   ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.03") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_DEVMAPPER_LIBS=`$PKG_CONFIG --libs "devmapper >= 1.02.03" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17466,8 +18494,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
        echo "$DEVMAPPER_PKG_ERRORS" >&5
 
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5
-$as_echo_n "checking for dm_task_set_name in -ldevmapper... " >&6; }
-if ${ac_cv_lib_devmapper_dm_task_set_name+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5
+printf %s "checking for dm_task_set_name in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_set_name+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldevmapper  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17496,45 +18525,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dm_task_set_name ();
 int
-main ()
+main (void)
 {
 return dm_task_set_name ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_devmapper_dm_task_set_name=yes
-else
+else $as_nop
   ac_cv_lib_devmapper_dm_task_set_name=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5
-$as_echo "$ac_cv_lib_devmapper_dm_task_set_name" >&6; }
-if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDEVMAPPER 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_set_name" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDEVMAPPER 1" >>confdefs.h
 
   LIBS="-ldevmapper $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "You need the device-mapper library." "$LINENO" 5
 fi
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5
-$as_echo_n "checking for dm_task_set_message in -ldevmapper... " >&6; }
-if ${ac_cv_lib_devmapper_dm_task_set_message+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5
+printf %s "checking for dm_task_set_message in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_set_message+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldevmapper  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17543,51 +18570,49 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dm_task_set_message ();
 int
-main ()
+main (void)
 {
 return dm_task_set_message ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_devmapper_dm_task_set_message=yes
-else
+else $as_nop
   ac_cv_lib_devmapper_dm_task_set_message=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5
-$as_echo "$ac_cv_lib_devmapper_dm_task_set_message" >&6; }
-if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDEVMAPPER 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_set_message" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDEVMAPPER 1" >>confdefs.h
 
   LIBS="-ldevmapper $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "The device-mapper library on your system is too old." "$LINENO" 5
 fi
 
        DEVMAPPER_LIBS=$LIBS
 
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5
-$as_echo_n "checking for dm_task_set_name in -ldevmapper... " >&6; }
-if ${ac_cv_lib_devmapper_dm_task_set_name+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_name in -ldevmapper" >&5
+printf %s "checking for dm_task_set_name in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_set_name+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldevmapper  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17596,45 +18621,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dm_task_set_name ();
 int
-main ()
+main (void)
 {
 return dm_task_set_name ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_devmapper_dm_task_set_name=yes
-else
+else $as_nop
   ac_cv_lib_devmapper_dm_task_set_name=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5
-$as_echo "$ac_cv_lib_devmapper_dm_task_set_name" >&6; }
-if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDEVMAPPER 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_name" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_set_name" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_set_name" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDEVMAPPER 1" >>confdefs.h
 
   LIBS="-ldevmapper $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "You need the device-mapper library." "$LINENO" 5
 fi
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5
-$as_echo_n "checking for dm_task_set_message in -ldevmapper... " >&6; }
-if ${ac_cv_lib_devmapper_dm_task_set_message+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_message in -ldevmapper" >&5
+printf %s "checking for dm_task_set_message in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_set_message+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldevmapper  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17643,37 +18666,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dm_task_set_message ();
 int
-main ()
+main (void)
 {
 return dm_task_set_message ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_devmapper_dm_task_set_message=yes
-else
+else $as_nop
   ac_cv_lib_devmapper_dm_task_set_message=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5
-$as_echo "$ac_cv_lib_devmapper_dm_task_set_message" >&6; }
-if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDEVMAPPER 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_message" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_set_message" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_set_message" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDEVMAPPER 1" >>confdefs.h
 
   LIBS="-ldevmapper $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "The device-mapper library on your system is too old." "$LINENO" 5
 fi
 
 else
        DEVMAPPER_CFLAGS=$pkg_cv_DEVMAPPER_CFLAGS
        DEVMAPPER_LIBS=$pkg_cv_DEVMAPPER_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
 LIBS=$saved_LIBS
 
 LIBS="$LIBS $DEVMAPPER_LIBS"
-ac_fn_c_check_decl "$LINENO" "dm_task_secure_data" "ac_cv_have_decl_dm_task_secure_data" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_task_secure_data" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_task_secure_data" "ac_cv_have_decl_dm_task_secure_data" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_task_secure_data" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_TASK_SECURE_DATA $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_TASK_SECURE_DATA $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "dm_task_retry_remove" "ac_cv_have_decl_dm_task_retry_remove" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_task_retry_remove" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_task_retry_remove" "ac_cv_have_decl_dm_task_retry_remove" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_task_retry_remove" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_TASK_RETRY_REMOVE $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_TASK_RETRY_REMOVE $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "dm_task_deferred_remove" "ac_cv_have_decl_dm_task_deferred_remove" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_task_deferred_remove" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_task_deferred_remove" "ac_cv_have_decl_dm_task_deferred_remove" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_task_deferred_remove" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_TASK_DEFERRED_REMOVE $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_TASK_DEFERRED_REMOVE $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "dm_device_has_mounted_fs" "ac_cv_have_decl_dm_device_has_mounted_fs" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_device_has_mounted_fs" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_device_has_mounted_fs" "ac_cv_have_decl_dm_device_has_mounted_fs" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_device_has_mounted_fs" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_DEVICE_HAS_MOUNTED_FS $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_DEVICE_HAS_MOUNTED_FS $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "dm_device_has_holders" "ac_cv_have_decl_dm_device_has_holders" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_device_has_holders" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_device_has_holders" "ac_cv_have_decl_dm_device_has_holders" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_device_has_holders" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_DEVICE_HAS_HOLDERS $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_DEVICE_HAS_HOLDERS $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "dm_device_get_name" "ac_cv_have_decl_dm_device_get_name" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_dm_device_get_name" = xyes; then :
+ac_fn_check_decl "$LINENO" "dm_device_get_name" "ac_cv_have_decl_dm_device_get_name" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_dm_device_get_name" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_DEVICE_GET_NAME $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_DEVICE_GET_NAME $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "DM_DEVICE_GET_TARGET_VERSION" "ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" = xyes; then :
+ac_fn_check_decl "$LINENO" "DM_DEVICE_GET_TARGET_VERSION" "ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_DM_DEVICE_GET_TARGET_VERSION" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_DM_DEVICE_GET_TARGET_VERSION $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_DEVICE_GET_TARGET_VERSION $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "DM_UDEV_DISABLE_DISK_RULES_FLAG" "ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" "#include <libdevmapper.h>
-"
-if test "x$ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" = xyes; then :
+ac_fn_check_decl "$LINENO" "DM_UDEV_DISABLE_DISK_RULES_FLAG" "ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" "#include <libdevmapper.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_DM_UDEV_DISABLE_DISK_RULES_FLAG" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DM_UDEV_DISABLE_DISK_RULES_FLAG $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_DM_UDEV_DISABLE_DISK_RULES_FLAG $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   have_cookie=yes
-else
+else $as_nop
   have_cookie=no
 fi
 
 if test "x$enable_udev" = xyes; then
        if test "x$have_cookie" = xno; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&5
-$as_echo "$as_me: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&2;}
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&5
+printf "%s\n" "$as_me: WARNING: The device-mapper library on your system has no udev support, udev support disabled." >&2;}
        else
 
-$as_echo "#define USE_UDEV 1" >>confdefs.h
+printf "%s\n" "#define USE_UDEV 1" >>confdefs.h
 
        fi
 fi
@@ -17804,17 +18809,17 @@ LIBS=$saved_LIBS
 
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for json-c" >&5
-$as_echo_n "checking for json-c... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for json-c" >&5
+printf %s "checking for json-c... " >&6; }
 
 if test -n "$JSON_C_CFLAGS"; then
     pkg_cv_JSON_C_CFLAGS="$JSON_C_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5
   ($PKG_CONFIG --exists --print-errors "json-c") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_JSON_C_CFLAGS=`$PKG_CONFIG --cflags "json-c" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17828,10 +18833,10 @@ if test -n "$JSON_C_LIBS"; then
     pkg_cv_JSON_C_LIBS="$JSON_C_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5
   ($PKG_CONFIG --exists --print-errors "json-c") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_JSON_C_LIBS=`$PKG_CONFIG --libs "json-c" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -17845,8 +18850,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
@@ -17872,10 +18877,10 @@ Alternatively, you may set the environment variables JSON_C_CFLAGS
 and JSON_C_LIBS to avoid the need to call pkg-config.
 See the pkg-config man page for more details." "$LINENO" 5
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
 is in your PATH or set the PKG_CONFIG environment variable to the full
 path to pkg-config.
@@ -17889,69 +18894,65 @@ See \`config.log' for more details" "$LINENO" 5; }
 else
        JSON_C_CFLAGS=$pkg_cv_JSON_C_CFLAGS
        JSON_C_LIBS=$pkg_cv_JSON_C_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
-ac_fn_c_check_decl "$LINENO" "json_object_object_add_ex" "ac_cv_have_decl_json_object_object_add_ex" "#include <json-c/json.h>
-"
-if test "x$ac_cv_have_decl_json_object_object_add_ex" = xyes; then :
+ac_fn_check_decl "$LINENO" "json_object_object_add_ex" "ac_cv_have_decl_json_object_object_add_ex" "#include <json-c/json.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_json_object_object_add_ex" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "json_object_deep_copy" "ac_cv_have_decl_json_object_deep_copy" "#include <json-c/json.h>
-"
-if test "x$ac_cv_have_decl_json_object_deep_copy" = xyes; then :
+ac_fn_check_decl "$LINENO" "json_object_deep_copy" "ac_cv_have_decl_json_object_deep_copy" "#include <json-c/json.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_json_object_deep_copy" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_JSON_OBJECT_DEEP_COPY $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_JSON_OBJECT_DEEP_COPY $ac_have_decl" >>confdefs.h
 
 
 
 # Check whether --with-crypto_backend was given.
-if test "${with_crypto_backend+set}" = set; then :
+if test ${with_crypto_backend+y}
+then :
   withval=$with_crypto_backend;
-else
+else $as_nop
   with_crypto_backend=openssl
 fi
 
 
 # Check whether --enable-kernel_crypto was given.
-if test "${enable_kernel_crypto+set}" = set; then :
+if test ${enable_kernel_crypto+y}
+then :
   enableval=$enable_kernel_crypto;
-else
+else $as_nop
   enable_kernel_crypto=yes
 fi
 
 
 if test "x$enable_kernel_crypto" = "xyes"; then
-       for ac_header in linux/if_alg.h
+              for ac_header in linux/if_alg.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_if_alg_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LINUX_IF_ALG_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_if_alg_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_IF_ALG_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need Linux kernel headers with userspace crypto interface. (Or use --disable-kernel_crypto.)" "$LINENO" 5
 fi
 
 done
 
-
-$as_echo "#define ENABLE_AF_ALG 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_AF_ALG 1" >>confdefs.h
 
 fi
 
@@ -17965,19 +18966,21 @@ case $with_crypto_backend in
 
 
        # Check whether --enable-gcrypt-pbkdf2 was given.
-if test "${enable_gcrypt_pbkdf2+set}" = set; then :
+if test ${enable_gcrypt_pbkdf2+y}
+then :
   enableval=$enable_gcrypt_pbkdf2; if test "x$enableval" = "xyes"; then
                        use_internal_pbkdf2=0
                else
                        use_internal_pbkdf2=1
                fi
-else
+else $as_nop
 
 
 # Check whether --with-libgcrypt-prefix was given.
-if test "${with_libgcrypt_prefix+set}" = set; then :
+if test ${with_libgcrypt_prefix+y}
+then :
   withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval"
-else
+else $as_nop
   libgcrypt_config_prefix=""
 fi
 
@@ -17991,8 +18994,8 @@ fi
   if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
     if $GPGRT_CONFIG libgcrypt --exists; then
       LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5
-$as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5
+printf "%s\n" "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
       use_gpgrt_config=yes
     fi
   fi
@@ -18007,18 +19010,19 @@ $as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
          '')
            ;;
           *)
-           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
-$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
+printf "%s\n" "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
            ;;
       esac
     fi
     # Extract the first word of "libgcrypt-config", so it can be a program name with args.
 set dummy libgcrypt-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_LIBGCRYPT_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $LIBGCRYPT_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
@@ -18028,11 +19032,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -18045,11 +19053,11 @@ esac
 fi
 LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
 if test -n "$LIBGCRYPT_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
-$as_echo "$LIBGCRYPT_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
+printf "%s\n" "$LIBGCRYPT_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -18064,8 +19072,8 @@ fi
      min_libgcrypt_version="$tmp"
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
-$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
+printf %s "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
   ok=no
   if test "$LIBGCRYPT_CONFIG" != "no" ; then
     req_major=`echo $min_libgcrypt_version | \
@@ -18102,11 +19110,11 @@ $as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6;
     fi
   fi
   if test $ok = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
-$as_echo "yes ($libgcrypt_config_version)" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
+printf "%s\n" "yes ($libgcrypt_config_version)" >&6; }
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   fi
   if test $ok = yes; then
      # If we have a recent libgcrypt, we should also check that the
@@ -18118,15 +19126,15 @@ $as_echo "no" >&6; }
            tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0`
        fi
         if test "$tmp" -gt 0 ; then
-           { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
-$as_echo_n "checking LIBGCRYPT API version... " >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
+printf %s "checking LIBGCRYPT API version... " >&6; }
            if test "$req_libgcrypt_api" -eq "$tmp" ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5
-$as_echo "okay" >&6; }
+             { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: okay" >&5
+printf "%s\n" "okay" >&6; }
            else
              ok=no
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
-$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
+             { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
+printf "%s\n" "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
            fi
         fi
      fi
@@ -18142,7 +19150,7 @@ $as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
     fi
     if test x"$libgcrypt_config_host" != xnone ; then
       if test x"$libgcrypt_config_host" != x"$host" ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
 ***
 *** The config script \"$LIBGCRYPT_CONFIG\" was
 *** built for $libgcrypt_config_host and thus may not match the
@@ -18150,7 +19158,7 @@ $as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
 *** You may want to use the configure option --with-libgcrypt-prefix
 *** to specify a matching config script or use \$SYSROOT.
 ***" >&5
-$as_echo "$as_me: WARNING:
+printf "%s\n" "$as_me: WARNING:
 ***
 *** The config script \"$LIBGCRYPT_CONFIG\" was
 *** built for $libgcrypt_config_host and thus may not match the
 
 
 # Check whether --with-libgcrypt-prefix was given.
-if test "${with_libgcrypt_prefix+set}" = set; then :
+if test ${with_libgcrypt_prefix+y}
+then :
   withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval"
-else
+else $as_nop
   libgcrypt_config_prefix=""
 fi
 
@@ -18190,8 +19199,8 @@ fi
   if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
     if $GPGRT_CONFIG libgcrypt --exists; then
       LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5
-$as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Use gpgrt-config as libgcrypt-config" >&5
+printf "%s\n" "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
       use_gpgrt_config=yes
     fi
   fi
@@ -18206,18 +19215,19 @@ $as_echo "$as_me: Use gpgrt-config as libgcrypt-config" >&6;}
          '')
            ;;
           *)
-           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
-$as_echo "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
+printf "%s\n" "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
            ;;
       esac
     fi
     # Extract the first word of "libgcrypt-config", so it can be a program name with args.
 set dummy libgcrypt-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_LIBGCRYPT_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $LIBGCRYPT_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
@@ -18227,11 +19237,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -18244,11 +19258,11 @@ esac
 fi
 LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
 if test -n "$LIBGCRYPT_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
-$as_echo "$LIBGCRYPT_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
+printf "%s\n" "$LIBGCRYPT_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -18263,8 +19277,8 @@ fi
      min_libgcrypt_version="$tmp"
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
-$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
+printf %s "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
   ok=no
   if test "$LIBGCRYPT_CONFIG" != "no" ; then
     req_major=`echo $min_libgcrypt_version | \
@@ -18301,11 +19315,11 @@ $as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6;
     fi
   fi
   if test $ok = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
-$as_echo "yes ($libgcrypt_config_version)" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
+printf "%s\n" "yes ($libgcrypt_config_version)" >&6; }
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   fi
   if test $ok = yes; then
      # If we have a recent libgcrypt, we should also check that the
@@ -18317,15 +19331,15 @@ $as_echo "no" >&6; }
            tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0`
        fi
         if test "$tmp" -gt 0 ; then
-           { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
-$as_echo_n "checking LIBGCRYPT API version... " >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
+printf %s "checking LIBGCRYPT API version... " >&6; }
            if test "$req_libgcrypt_api" -eq "$tmp" ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5
-$as_echo "okay" >&6; }
+             { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: okay" >&5
+printf "%s\n" "okay" >&6; }
            else
              ok=no
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
-$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
+             { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
+printf "%s\n" "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
            fi
         fi
      fi
@@ -18341,7 +19355,7 @@ $as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
     fi
     if test x"$libgcrypt_config_host" != xnone ; then
       if test x"$libgcrypt_config_host" != x"$host" ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
 ***
 *** The config script \"$LIBGCRYPT_CONFIG\" was
 *** built for $libgcrypt_config_host and thus may not match the
@@ -18349,7 +19363,7 @@ $as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
 *** You may want to use the configure option --with-libgcrypt-prefix
 *** to specify a matching config script or use \$SYSROOT.
 ***" >&5
-$as_echo "$as_me: WARNING:
+printf "%s\n" "$as_me: WARNING:
 ***
 *** The config script \"$LIBGCRYPT_CONFIG\" was
 *** built for $libgcrypt_config_host and thus may not match the
@@ -18369,14 +19383,14 @@ $as_echo "$as_me: WARNING:
 
 
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if internal cryptsetup PBKDF2 is compiled-in" >&5
-$as_echo_n "checking if internal cryptsetup PBKDF2 is compiled-in... " >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if internal cryptsetup PBKDF2 is compiled-in" >&5
+printf %s "checking if internal cryptsetup PBKDF2 is compiled-in... " >&6; }
        if test $use_internal_pbkdf2 = 0; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
        if test "x$enable_fips" = "xyes"; then
                as_fn_error $? "This option is not compatible with FIPS." "$LINENO" 5
@@ -18384,27 +19398,26 @@ $as_echo "yes" >&6; }
 
        fi
 
-       ac_fn_c_check_decl "$LINENO" "GCRY_CIPHER_MODE_XTS" "ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" "#include <gcrypt.h>
-"
-if test "x$ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" = xyes; then :
+       ac_fn_check_decl "$LINENO" "GCRY_CIPHER_MODE_XTS" "ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" "#include <gcrypt.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_GCRY_CIPHER_MODE_XTS" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GCRY_CIPHER_MODE_XTS $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_GCRY_CIPHER_MODE_XTS $ac_have_decl" >>confdefs.h
 
 
        if test "x$enable_static_cryptsetup" = "xyes"; then
                saved_LIBS=$LIBS
                LIBS="$saved_LIBS $LIBGCRYPT_LIBS -static"
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_check_version in -lgcrypt" >&5
-$as_echo_n "checking for gcry_check_version in -lgcrypt... " >&6; }
-if ${ac_cv_lib_gcrypt_gcry_check_version+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcry_check_version in -lgcrypt" >&5
+printf %s "checking for gcry_check_version in -lgcrypt... " >&6; }
+if test ${ac_cv_lib_gcrypt_gcry_check_version+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lgcrypt -lgpg-error $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -18413,37 +19426,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char gcry_check_version ();
 int
-main ()
+main (void)
 {
 return gcry_check_version ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_gcrypt_gcry_check_version=yes
-else
+else $as_nop
   ac_cv_lib_gcrypt_gcry_check_version=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcrypt_gcry_check_version" >&5
-$as_echo "$ac_cv_lib_gcrypt_gcry_check_version" >&6; }
-if test "x$ac_cv_lib_gcrypt_gcry_check_version" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBGCRYPT 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcrypt_gcry_check_version" >&5
+printf "%s\n" "$ac_cv_lib_gcrypt_gcry_check_version" >&6; }
+if test "x$ac_cv_lib_gcrypt_gcry_check_version" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBGCRYPT 1" >>confdefs.h
 
   LIBS="-lgcrypt $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "Cannot find static gcrypt library." "$LINENO" 5
 fi
 
        CRYPTO_STATIC_LIBS=$LIBGCRYPT_STATIC_LIBS
 
 
-cat >>confdefs.h <<_ACEOF
-#define GCRYPT_REQ_VERSION "$GCRYPT_REQ_VERSION"
-_ACEOF
+printf "%s\n" "#define GCRYPT_REQ_VERSION \"$GCRYPT_REQ_VERSION\"" >>confdefs.h
 
  ;;
        openssl)
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl >= 0.9.8" >&5
-$as_echo_n "checking for openssl >= 0.9.8... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl >= 0.9.8" >&5
+printf %s "checking for openssl >= 0.9.8... " >&6; }
 
 if test -n "$OPENSSL_CFLAGS"; then
     pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5
   ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.8") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl >= 0.9.8" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18488,10 +19496,10 @@ if test -n "$OPENSSL_LIBS"; then
     pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.8\""; } >&5
   ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.8") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl >= 0.9.8" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18505,8 +19513,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
        as_fn_error $? "You need openssl library." "$LINENO" 5
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        as_fn_error $? "You need openssl library." "$LINENO" 5
 else
        OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS
        OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
        CRYPTO_CFLAGS=$OPENSSL_CFLAGS
                PKG_CONFIG="$PKG_CONFIG --static"
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5
-$as_echo_n "checking for openssl... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5
+printf %s "checking for openssl... " >&6; }
 
 if test -n "$OPENSSL_STATIC_CFLAGS"; then
     pkg_cv_OPENSSL_STATIC_CFLAGS="$OPENSSL_STATIC_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
   ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_OPENSSL_STATIC_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18566,10 +19574,10 @@ if test -n "$OPENSSL_STATIC_LIBS"; then
     pkg_cv_OPENSSL_STATIC_LIBS="$OPENSSL_STATIC_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
   ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_OPENSSL_STATIC_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18583,8 +19591,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
@@ -18610,10 +19618,10 @@ Alternatively, you may set the environment variables OPENSSL_STATIC_CFLAGS
 and OPENSSL_STATIC_LIBS to avoid the need to call pkg-config.
 See the pkg-config man page for more details." "$LINENO" 5
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
 is in your PATH or set the PKG_CONFIG environment variable to the full
 path to pkg-config.
@@ -18627,8 +19635,8 @@ See \`config.log' for more details" "$LINENO" 5; }
 else
        OPENSSL_STATIC_CFLAGS=$pkg_cv_OPENSSL_STATIC_CFLAGS
        OPENSSL_STATIC_LIBS=$pkg_cv_OPENSSL_STATIC_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
                CRYPTO_STATIC_LIBS=$OPENSSL_STATIC_LIBS
                as_fn_error $? "Static build of cryptsetup is not supported with NSS." "$LINENO" 5
        fi
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&5
-$as_echo "$as_me: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&5
+printf "%s\n" "$as_me: WARNING: NSS backend does NOT provide backward compatibility (missing ripemd160 hash)." >&2;}
 
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss" >&5
-$as_echo_n "checking for nss... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nss" >&5
+printf %s "checking for nss... " >&6; }
 
 if test -n "$NSS_CFLAGS"; then
     pkg_cv_NSS_CFLAGS="$NSS_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5
   ($PKG_CONFIG --exists --print-errors "nss") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_NSS_CFLAGS=`$PKG_CONFIG --cflags "nss" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18669,10 +19677,10 @@ if test -n "$NSS_LIBS"; then
     pkg_cv_NSS_LIBS="$NSS_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss\""; } >&5
   ($PKG_CONFIG --exists --print-errors "nss") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_NSS_LIBS=`$PKG_CONFIG --libs "nss" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18686,8 +19694,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
        as_fn_error $? "You need nss library." "$LINENO" 5
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        as_fn_error $? "You need nss library." "$LINENO" 5
 else
        NSS_CFLAGS=$pkg_cv_NSS_CFLAGS
        NSS_LIBS=$pkg_cv_NSS_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
 
        saved_CFLAGS=$CFLAGS
        CFLAGS="$CFLAGS $NSS_CFLAGS"
-       ac_fn_c_check_decl "$LINENO" "NSS_GetVersion" "ac_cv_have_decl_NSS_GetVersion" "#include <nss.h>
-"
-if test "x$ac_cv_have_decl_NSS_GetVersion" = xyes; then :
+       ac_fn_check_decl "$LINENO" "NSS_GetVersion" "ac_cv_have_decl_NSS_GetVersion" "#include <nss.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_NSS_GetVersion" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NSS_GETVERSION $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_NSS_GETVERSION $ac_have_decl" >>confdefs.h
 
        CFLAGS=$saved_CFLAGS
 
@@ -18741,20 +19747,18 @@ _ACEOF
 
  ;;
        kernel)
-       for ac_header in linux/if_alg.h
+              for ac_header in linux/if_alg.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_if_alg_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LINUX_IF_ALG_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "linux/if_alg.h" "ac_cv_header_linux_if_alg_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_if_alg_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_IF_ALG_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need Linux kernel headers with userspace crypto interface." "$LINENO" 5
 fi
 
 done
-
 #      AC_CHECK_DECLS([AF_ALG],,
 #              [AC_MSG_ERROR([You need Linux kernel with userspace crypto interface.])],
 #              [#include <sys/socket.h>])
@@ -18766,39 +19770,33 @@ done
 
  ;;
        nettle)
-       for ac_header in nettle/sha.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "nettle/sha.h" "ac_cv_header_nettle_sha_h" "$ac_includes_default"
-if test "x$ac_cv_header_nettle_sha_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_NETTLE_SHA_H 1
-_ACEOF
+              for ac_header in nettle/sha.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "nettle/sha.h" "ac_cv_header_nettle_sha_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_sha_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_SHA_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need Nettle cryptographic library." "$LINENO" 5
 fi
 
 done
-
-       for ac_header in nettle/version.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "nettle/version.h" "ac_cv_header_nettle_version_h" "$ac_includes_default"
-if test "x$ac_cv_header_nettle_version_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_NETTLE_VERSION_H 1
-_ACEOF
+       ac_fn_c_check_header_compile "$LINENO" "nettle/version.h" "ac_cv_header_nettle_version_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_version_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_VERSION_H 1" >>confdefs.h
 
 fi
 
-done
-
 
        saved_LIBS=$LIBS
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nettle_pbkdf2_hmac_sha256 in -lnettle" >&5
-$as_echo_n "checking for nettle_pbkdf2_hmac_sha256 in -lnettle... " >&6; }
-if ${ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nettle_pbkdf2_hmac_sha256 in -lnettle" >&5
+printf %s "checking for nettle_pbkdf2_hmac_sha256 in -lnettle... " >&6; }
+if test ${ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnettle  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -18807,37 +19805,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char nettle_pbkdf2_hmac_sha256 ();
 int
-main ()
+main (void)
 {
 return nettle_pbkdf2_hmac_sha256 ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256=yes
-else
+else $as_nop
   ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&5
-$as_echo "$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&6; }
-if test "x$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNETTLE 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&5
+printf "%s\n" "$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" >&6; }
+if test "x$ac_cv_lib_nettle_nettle_pbkdf2_hmac_sha256" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBNETTLE 1" >>confdefs.h
 
   LIBS="-lnettle $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "You need Nettle library version 2.6 or more recent." "$LINENO" 5
 fi
 
@@ -18904,61 +19899,59 @@ else
 fi
 
 
-cat >>confdefs.h <<_ACEOF
-#define USE_INTERNAL_PBKDF2 $use_internal_pbkdf2
-_ACEOF
+printf "%s\n" "#define USE_INTERNAL_PBKDF2 $use_internal_pbkdf2" >>confdefs.h
 
 
 # Check whether --enable-internal-argon2 was given.
-if test "${enable_internal_argon2+set}" = set; then :
+if test ${enable_internal_argon2+y}
+then :
   enableval=$enable_internal_argon2;
-else
+else $as_nop
   enable_internal_argon2=yes
 fi
 
 
 # Check whether --enable-libargon2 was given.
-if test "${enable_libargon2+set}" = set; then :
+if test ${enable_libargon2+y}
+then :
   enableval=$enable_libargon2;
 fi
 
 
 if test "x$enable_libargon2" = "xyes" ; then
-       for ac_header in argon2.h
+              for ac_header in argon2.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "argon2.h" "ac_cv_header_argon2_h" "$ac_includes_default"
-if test "x$ac_cv_header_argon2_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ARGON2_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "argon2.h" "ac_cv_header_argon2_h" "$ac_includes_default"
+if test "x$ac_cv_header_argon2_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGON2_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need libargon2 development library installed." "$LINENO" 5
 fi
 
 done
+       ac_fn_check_decl "$LINENO" "Argon2_id" "ac_cv_have_decl_Argon2_id" "#include <argon2.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_Argon2_id" = xyes
+then :
 
-       ac_fn_c_check_decl "$LINENO" "Argon2_id" "ac_cv_have_decl_Argon2_id" "#include <argon2.h>
-"
-if test "x$ac_cv_have_decl_Argon2_id" = xyes; then :
-
-else
+else $as_nop
   as_fn_error $? "You need more recent Argon2 library with support for Argon2id." "$LINENO" 5
 fi
 
-
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libargon2" >&5
-$as_echo_n "checking for libargon2... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libargon2" >&5
+printf %s "checking for libargon2... " >&6; }
 
 if test -n "$LIBARGON2_CFLAGS"; then
     pkg_cv_LIBARGON2_CFLAGS="$LIBARGON2_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5
   ($PKG_CONFIG --exists --print-errors "libargon2") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_LIBARGON2_CFLAGS=`$PKG_CONFIG --cflags "libargon2" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18972,10 +19965,10 @@ if test -n "$LIBARGON2_LIBS"; then
     pkg_cv_LIBARGON2_LIBS="$LIBARGON2_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libargon2\""; } >&5
   ($PKG_CONFIG --exists --print-errors "libargon2") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_LIBARGON2_LIBS=`$PKG_CONFIG --libs "libargon2" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -18989,8 +19982,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
        LIBARGON2_LIBS="-largon2"
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        LIBARGON2_LIBS="-largon2"
 else
        LIBARGON2_CFLAGS=$pkg_cv_LIBARGON2_CFLAGS
        LIBARGON2_LIBS=$pkg_cv_LIBARGON2_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
        enable_internal_argon2=no
 else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&5
-$as_echo "$as_me: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&5
+printf "%s\n" "$as_me: WARNING: Argon2 bundled (slow) reference implementation will be used, please consider to use system library with --enable-libargon2." >&2;}
 
        # Check whether --enable-internal-sse-argon2 was given.
-if test "${enable_internal_sse_argon2+set}" = set; then :
+if test ${enable_internal_sse_argon2+y}
+then :
   enableval=$enable_internal_sse_argon2;
 fi
 
 
        if test "x$enable_internal_sse_argon2" = "xyes"; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Argon2 SSE optimization can be used" >&5
-$as_echo_n "checking if Argon2 SSE optimization can be used... " >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if Argon2 SSE optimization can be used" >&5
+printf %s "checking if Argon2 SSE optimization can be used... " >&6; }
                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19040,28 +20034,29 @@ $as_echo_n "checking if Argon2 SSE optimization can be used... " >&6; }
                        }
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-else
+else $as_nop
   enable_internal_sse_argon2=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_internal_sse_argon2" >&5
-$as_echo "$enable_internal_sse_argon2" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_internal_sse_argon2" >&5
+printf "%s\n" "$enable_internal_sse_argon2" >&6; }
        fi
 fi
 
 if test "x$enable_internal_argon2" = "xyes"; then
 
-$as_echo "#define USE_INTERNAL_ARGON2 1" >>confdefs.h
+printf "%s\n" "#define USE_INTERNAL_ARGON2 1" >>confdefs.h
 
 fi
  if test "x$enable_internal_argon2" = "xyes"; then
 
 
 # Check whether --enable-blkid was given.
-if test "${enable_blkid+set}" = set; then :
+if test ${enable_blkid+y}
+then :
   enableval=$enable_blkid;
-else
+else $as_nop
   enable_blkid=yes
 fi
 
 if test "x$enable_blkid" = "xyes"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid" >&5
-$as_echo_n "checking for blkid... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for blkid" >&5
+printf %s "checking for blkid... " >&6; }
 
 if test -n "$BLKID_CFLAGS"; then
     pkg_cv_BLKID_CFLAGS="$BLKID_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5
   ($PKG_CONFIG --exists --print-errors "blkid") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_BLKID_CFLAGS=`$PKG_CONFIG --cflags "blkid" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -19116,10 +20112,10 @@ if test -n "$BLKID_LIBS"; then
     pkg_cv_BLKID_LIBS="$BLKID_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid\""; } >&5
   ($PKG_CONFIG --exists --print-errors "blkid") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_BLKID_LIBS=`$PKG_CONFIG --libs "blkid" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -19133,8 +20129,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
        LIBBLKID_LIBS="-lblkid"
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
        LIBBLKID_LIBS="-lblkid"
 else
        BLKID_CFLAGS=$pkg_cv_BLKID_CFLAGS
        BLKID_LIBS=$pkg_cv_BLKID_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
-$as_echo "#define HAVE_BLKID 1" >>confdefs.h
+printf "%s\n" "#define HAVE_BLKID 1" >>confdefs.h
 
 fi
 
-       for ac_header in blkid/blkid.h
+              for ac_header in blkid/blkid.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "blkid/blkid.h" "ac_cv_header_blkid_blkid_h" "$ac_includes_default"
-if test "x$ac_cv_header_blkid_blkid_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BLKID_BLKID_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "blkid/blkid.h" "ac_cv_header_blkid_blkid_h" "$ac_includes_default"
+if test "x$ac_cv_header_blkid_blkid_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_BLKID_BLKID_H 1" >>confdefs.h
 
-else
+else $as_nop
   as_fn_error $? "You need blkid development library installed." "$LINENO" 5
 fi
 
 done
+       ac_fn_check_decl "$LINENO" "blkid_do_wipe" "ac_cv_have_decl_blkid_do_wipe" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_do_wipe" = xyes
+then :
 
-       ac_fn_c_check_decl "$LINENO" "blkid_do_wipe" "ac_cv_have_decl_blkid_do_wipe" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_do_wipe" = xyes; then :
-
-$as_echo "#define HAVE_BLKID_WIPE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_BLKID_WIPE 1" >>confdefs.h
 
                        enable_blkid_wipe=yes
 
 fi
+       ac_fn_check_decl "$LINENO" "blkid_probe_step_back" "ac_cv_have_decl_blkid_probe_step_back" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_probe_step_back" = xyes
+then :
 
-       ac_fn_c_check_decl "$LINENO" "blkid_probe_step_back" "ac_cv_have_decl_blkid_probe_step_back" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_probe_step_back" = xyes; then :
-
-$as_echo "#define HAVE_BLKID_STEP_BACK 1" >>confdefs.h
+printf "%s\n" "#define HAVE_BLKID_STEP_BACK 1" >>confdefs.h
 
                        enable_blkid_step_back=yes
 
 fi
-
-       ac_fn_c_check_decl "$LINENO" "blkid_reset_probe" "ac_cv_have_decl_blkid_reset_probe" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_reset_probe" = xyes; then :
+       ac_fn_check_decl "$LINENO" "blkid_reset_probe" "ac_cv_have_decl_blkid_reset_probe" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_reset_probe" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_RESET_PROBE $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_RESET_PROBE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
-ac_fn_c_check_decl "$LINENO" "blkid_probe_set_device" "ac_cv_have_decl_blkid_probe_set_device" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_probe_set_device" = xyes; then :
+ac_fn_check_decl "$LINENO" "blkid_probe_set_device" "ac_cv_have_decl_blkid_probe_set_device" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_probe_set_device" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_PROBE_SET_DEVICE $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_PROBE_SET_DEVICE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
-ac_fn_c_check_decl "$LINENO" "blkid_probe_filter_superblocks_type" "ac_cv_have_decl_blkid_probe_filter_superblocks_type" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_probe_filter_superblocks_type" = xyes; then :
+ac_fn_check_decl "$LINENO" "blkid_probe_filter_superblocks_type" "ac_cv_have_decl_blkid_probe_filter_superblocks_type" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_probe_filter_superblocks_type" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_PROBE_FILTER_SUPERBLOCKS_TYPE $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_PROBE_FILTER_SUPERBLOCKS_TYPE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
-ac_fn_c_check_decl "$LINENO" "blkid_do_safeprobe" "ac_cv_have_decl_blkid_do_safeprobe" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_do_safeprobe" = xyes; then :
+ac_fn_check_decl "$LINENO" "blkid_do_safeprobe" "ac_cv_have_decl_blkid_do_safeprobe" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_do_safeprobe" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_DO_SAFEPROBE $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_DO_SAFEPROBE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
-ac_fn_c_check_decl "$LINENO" "blkid_do_probe" "ac_cv_have_decl_blkid_do_probe" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_do_probe" = xyes; then :
+ac_fn_check_decl "$LINENO" "blkid_do_probe" "ac_cv_have_decl_blkid_do_probe" "#include <blkid/blkid.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_do_probe" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_DO_PROBE $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_DO_PROBE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
-ac_fn_c_check_decl "$LINENO" "blkid_probe_lookup_value
+ac_fn_check_decl "$LINENO" "blkid_probe_lookup_value
                       " "ac_cv_have_decl_blkid_probe_lookup_value__________" "#include <blkid/blkid.h>
-"
-if test "x$ac_cv_have_decl_blkid_probe_lookup_value__________" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_blkid_probe_lookup_value__________" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_BLKID_PROBE_LOOKUP_VALUE__________ $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BLKID_PROBE_LOOKUP_VALUE__________ $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
+else $as_nop
   as_fn_error $? "Can not compile with blkid support, disable it by --disable-blkid." "$LINENO" 5
 fi
 
@@ -19327,11 +20315,12 @@ if test "x$enable_static_cryptsetup" = "xyes"; then
        PKG_CONFIG="$PKG_CONFIG --static"
 
        LIBS="$saved_LIBS -static"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5
-$as_echo_n "checking for poptGetContext in -lpopt... " >&6; }
-if ${ac_cv_lib_popt_poptGetContext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5
+printf %s "checking for poptGetContext in -lpopt... " >&6; }
+if test ${ac_cv_lib_popt_poptGetContext+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpopt  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19340,37 +20329,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char poptGetContext ();
 int
-main ()
+main (void)
 {
 return poptGetContext ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_popt_poptGetContext=yes
-else
+else $as_nop
   ac_cv_lib_popt_poptGetContext=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5
-$as_echo "$ac_cv_lib_popt_poptGetContext" >&6; }
-if test "x$ac_cv_lib_popt_poptGetContext" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPOPT 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5
+printf "%s\n" "$ac_cv_lib_popt_poptGetContext" >&6; }
+if test "x$ac_cv_lib_popt_poptGetContext" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBPOPT 1" >>confdefs.h
 
   LIBS="-lpopt $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "Cannot find static popt library." "$LINENO" 5
 fi
 
                LIBS="$saved_LIBS -static"
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for devmapper >= 1.02.27" >&5
-$as_echo_n "checking for devmapper >= 1.02.27... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for devmapper >= 1.02.27" >&5
+printf %s "checking for devmapper >= 1.02.27... " >&6; }
 
 if test -n "$DEVMAPPER_STATIC_CFLAGS"; then
     pkg_cv_DEVMAPPER_STATIC_CFLAGS="$DEVMAPPER_STATIC_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5
   ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.27") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_DEVMAPPER_STATIC_CFLAGS=`$PKG_CONFIG --cflags "devmapper >= 1.02.27" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -19402,10 +20388,10 @@ if test -n "$DEVMAPPER_STATIC_LIBS"; then
     pkg_cv_DEVMAPPER_STATIC_LIBS="$DEVMAPPER_STATIC_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.27\""; } >&5
   ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.27") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_DEVMAPPER_STATIC_LIBS=`$PKG_CONFIG --libs "devmapper >= 1.02.27" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -19419,8 +20405,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
 
                DEVMAPPER_STATIC_LIBS=$DEVMAPPER_LIBS
                if test "x$enable_selinux" = "xyes"; then
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5
-$as_echo_n "checking for sepol_bool_set in -lsepol... " >&6; }
-if ${ac_cv_lib_sepol_sepol_bool_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5
+printf %s "checking for sepol_bool_set in -lsepol... " >&6; }
+if test ${ac_cv_lib_sepol_sepol_bool_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsepol  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19451,43 +20438,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char sepol_bool_set ();
 int
-main ()
+main (void)
 {
 return sepol_bool_set ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_sepol_sepol_bool_set=yes
-else
+else $as_nop
   ac_cv_lib_sepol_sepol_bool_set=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5
-$as_echo "$ac_cv_lib_sepol_sepol_bool_set" >&6; }
-if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSEPOL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5
+printf "%s\n" "$ac_cv_lib_sepol_sepol_bool_set" >&6; }
+if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBSEPOL 1" >>confdefs.h
 
   LIBS="-lsepol $LIBS"
 
 fi
 
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
-$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
-if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+printf %s "checking for is_selinux_enabled in -lselinux... " >&6; }
+if test ${ac_cv_lib_selinux_is_selinux_enabled+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lselinux  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19496,33 +20481,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char is_selinux_enabled ();
 int
-main ()
+main (void)
 {
 return is_selinux_enabled ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_selinux_is_selinux_enabled=yes
-else
+else $as_nop
   ac_cv_lib_selinux_is_selinux_enabled=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
-$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
-if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSELINUX 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+printf "%s\n" "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBSELINUX 1" >>confdefs.h
 
   LIBS="-lselinux $LIBS"
 
                fi
 
 elif test $pkg_failed = untried; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
                DEVMAPPER_STATIC_LIBS=$DEVMAPPER_LIBS
                if test "x$enable_selinux" = "xyes"; then
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5
-$as_echo_n "checking for sepol_bool_set in -lsepol... " >&6; }
-if ${ac_cv_lib_sepol_sepol_bool_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sepol_bool_set in -lsepol" >&5
+printf %s "checking for sepol_bool_set in -lsepol... " >&6; }
+if test ${ac_cv_lib_sepol_sepol_bool_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsepol  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19550,43 +20533,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char sepol_bool_set ();
 int
-main ()
+main (void)
 {
 return sepol_bool_set ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_sepol_sepol_bool_set=yes
-else
+else $as_nop
   ac_cv_lib_sepol_sepol_bool_set=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5
-$as_echo "$ac_cv_lib_sepol_sepol_bool_set" >&6; }
-if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSEPOL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sepol_sepol_bool_set" >&5
+printf "%s\n" "$ac_cv_lib_sepol_sepol_bool_set" >&6; }
+if test "x$ac_cv_lib_sepol_sepol_bool_set" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBSEPOL 1" >>confdefs.h
 
   LIBS="-lsepol $LIBS"
 
 fi
 
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
-$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
-if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+printf %s "checking for is_selinux_enabled in -lselinux... " >&6; }
+if test ${ac_cv_lib_selinux_is_selinux_enabled+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lselinux  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19595,33 +20576,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char is_selinux_enabled ();
 int
-main ()
+main (void)
 {
 return is_selinux_enabled ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_selinux_is_selinux_enabled=yes
-else
+else $as_nop
   ac_cv_lib_selinux_is_selinux_enabled=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
-$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
-if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSELINUX 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+printf "%s\n" "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBSELINUX 1" >>confdefs.h
 
   LIBS="-lselinux $LIBS"
 
 else
        DEVMAPPER_STATIC_CFLAGS=$pkg_cv_DEVMAPPER_STATIC_CFLAGS
        DEVMAPPER_STATIC_LIBS=$pkg_cv_DEVMAPPER_STATIC_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
 fi
        LIBS="$saved_LIBS $DEVMAPPER_STATIC_LIBS"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_uuid in -ldevmapper" >&5
-$as_echo_n "checking for dm_task_set_uuid in -ldevmapper... " >&6; }
-if ${ac_cv_lib_devmapper_dm_task_set_uuid+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_set_uuid in -ldevmapper" >&5
+printf %s "checking for dm_task_set_uuid in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_set_uuid+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldevmapper  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19651,47 +20630,45 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dm_task_set_uuid ();
 int
-main ()
+main (void)
 {
 return dm_task_set_uuid ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_devmapper_dm_task_set_uuid=yes
-else
+else $as_nop
   ac_cv_lib_devmapper_dm_task_set_uuid=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_uuid" >&5
-$as_echo "$ac_cv_lib_devmapper_dm_task_set_uuid" >&6; }
-if test "x$ac_cv_lib_devmapper_dm_task_set_uuid" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDEVMAPPER 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_set_uuid" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_set_uuid" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_set_uuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDEVMAPPER 1" >>confdefs.h
 
   LIBS="-ldevmapper $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "Cannot link with static device-mapper library." "$LINENO" 5
 fi
 
 
                LIBS="$saved_LIBS -static"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
-$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
-if ${ac_cv_lib_uuid_uuid_generate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
+printf %s "checking for uuid_generate in -luuid... " >&6; }
+if test ${ac_cv_lib_uuid_uuid_generate+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19700,37 +20677,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char uuid_generate ();
 int
-main ()
+main (void)
 {
 return uuid_generate ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_uuid_uuid_generate=yes
-else
+else $as_nop
   ac_cv_lib_uuid_uuid_generate=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
-$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBUUID 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
+printf "%s\n" "$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_generate" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBUUID 1" >>confdefs.h
 
   LIBS="-luuid $LIBS"
 
-else
+else $as_nop
   as_fn_error $? "Cannot find static uuid library." "$LINENO" 5
 fi
 
        PKG_CONFIG=$saved_PKG_CONFIG
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd tmpfiles config directory" >&5
-$as_echo_n "checking for systemd tmpfiles config directory... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for systemd tmpfiles config directory" >&5
+printf %s "checking for systemd tmpfiles config directory... " >&6; }
 
 if test -n "$systemd_tmpfilesdir"; then
     pkg_cv_systemd_tmpfilesdir="$systemd_tmpfilesdir"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5
   ($PKG_CONFIG --exists --print-errors "systemd") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_systemd_tmpfilesdir=`$PKG_CONFIG --variable="tmpfilesdir" "systemd" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 fi
 systemd_tmpfilesdir=$pkg_cv_systemd_tmpfilesdir
 
-if test "x$systemd_tmpfilesdir" = x""; then :
+if test "x$systemd_tmpfilesdir" = x""
+then :
   systemd_tmpfilesdir=no
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $systemd_tmpfilesdir" >&5
-$as_echo "$systemd_tmpfilesdir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $systemd_tmpfilesdir" >&5
+printf "%s\n" "$systemd_tmpfilesdir" >&6; }
 
 
 
@@ -19787,7 +20762,8 @@ $as_echo "$systemd_tmpfilesdir" >&6; }
 
 
 # Check whether --enable-dev-random was given.
-if test "${enable_dev_random+set}" = set; then :
+if test ${enable_dev_random+y}
+then :
   enableval=$enable_dev_random;
 fi
 
@@ -19797,9 +20773,7 @@ else
        default_rng=/dev/urandom
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_RNG "$default_rng"
-_ACEOF
+printf "%s\n" "#define DEFAULT_RNG \"$default_rng\"" >>confdefs.h
 
 
 
@@ -19812,18 +20786,15 @@ _ACEOF
 
 
 # Check whether --with-plain-hash was given.
-if test "${with_plain_hash+set}" = set; then :
+if test ${with_plain_hash+y}
+then :
   withval=$with_plain_hash;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_HASH "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_HASH \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_HASH "ripemd160"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_HASH \"ripemd160\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-plain-cipher was given.
-if test "${with_plain_cipher+set}" = set; then :
+if test ${with_plain_cipher+y}
+then :
   withval=$with_plain_cipher;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_CIPHER "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_CIPHER \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_CIPHER "aes"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_CIPHER \"aes\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-plain-mode was given.
-if test "${with_plain_mode+set}" = set; then :
+if test ${with_plain_mode+y}
+then :
   withval=$with_plain_mode;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_MODE "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_MODE \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_MODE "cbc-essiv:sha256"
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_MODE \"cbc-essiv:sha256\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-plain-keybits was given.
-if test "${with_plain_keybits+set}" = set; then :
+if test ${with_plain_keybits+y}
+then :
   withval=$with_plain_keybits;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_KEYBITS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_KEYBITS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PLAIN_KEYBITS 256
-_ACEOF
+printf "%s\n" "#define DEFAULT_PLAIN_KEYBITS 256" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks1-hash was given.
-if test "${with_luks1_hash+set}" = set; then :
+if test ${with_luks1_hash+y}
+then :
   withval=$with_luks1_hash;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_HASH "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_HASH \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_HASH "sha256"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_HASH \"sha256\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks1-cipher was given.
-if test "${with_luks1_cipher+set}" = set; then :
+if test ${with_luks1_cipher+y}
+then :
   withval=$with_luks1_cipher;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_CIPHER "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_CIPHER \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_CIPHER "aes"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_CIPHER \"aes\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks1-mode was given.
-if test "${with_luks1_mode+set}" = set; then :
+if test ${with_luks1_mode+y}
+then :
   withval=$with_luks1_mode;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_MODE "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_MODE \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_MODE "xts-plain64"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_MODE \"xts-plain64\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks1-keybits was given.
-if test "${with_luks1_keybits+set}" = set; then :
+if test ${with_luks1_keybits+y}
+then :
   withval=$with_luks1_keybits;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_KEYBITS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_KEYBITS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_KEYBITS 256
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_KEYBITS 256" >>confdefs.h
 
 
 
 
 
 # Check whether --enable-luks_adjust_xts_keysize was given.
-if test "${enable_luks_adjust_xts_keysize+set}" = set; then :
+if test ${enable_luks_adjust_xts_keysize+y}
+then :
   enableval=$enable_luks_adjust_xts_keysize;
-else
+else $as_nop
   enable_luks_adjust_xts_keysize=yes
 fi
 
 if test "x$enable_luks_adjust_xts_keysize" = "xyes"; then
 
-$as_echo "#define ENABLE_LUKS_ADJUST_XTS_KEYSIZE 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_LUKS_ADJUST_XTS_KEYSIZE 1" >>confdefs.h
 
 fi
 
 
 # Check whether --with-luks2-pbkdf was given.
-if test "${with_luks2_pbkdf+set}" = set; then :
+if test ${with_luks2_pbkdf+y}
+then :
   withval=$with_luks2_pbkdf;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_PBKDF "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_PBKDF \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_PBKDF "argon2i"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_PBKDF \"argon2i\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks1-iter-time was given.
-if test "${with_luks1_iter_time+set}" = set; then :
+if test ${with_luks1_iter_time+y}
+then :
   withval=$with_luks1_iter_time;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_ITER_TIME $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_ITER_TIME $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS1_ITER_TIME 2000
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS1_ITER_TIME 2000" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-iter-time was given.
-if test "${with_luks2_iter_time+set}" = set; then :
+if test ${with_luks2_iter_time+y}
+then :
   withval=$with_luks2_iter_time;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_ITER_TIME $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_ITER_TIME $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_ITER_TIME 2000
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_ITER_TIME 2000" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-memory-kb was given.
-if test "${with_luks2_memory_kb+set}" = set; then :
+if test ${with_luks2_memory_kb+y}
+then :
   withval=$with_luks2_memory_kb;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_MEMORY_KB $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_MEMORY_KB $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_MEMORY_KB 1048576
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_MEMORY_KB 1048576" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-parallel-threads was given.
-if test "${with_luks2_parallel_threads+set}" = set; then :
+if test ${with_luks2_parallel_threads+y}
+then :
   withval=$with_luks2_parallel_threads;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_PARALLEL_THREADS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_PARALLEL_THREADS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_PARALLEL_THREADS 4
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_PARALLEL_THREADS 4" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-keyslot-cipher was given.
-if test "${with_luks2_keyslot_cipher+set}" = set; then :
+if test ${with_luks2_keyslot_cipher+y}
+then :
   withval=$with_luks2_keyslot_cipher;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_KEYSLOT_CIPHER "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_KEYSLOT_CIPHER \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_KEYSLOT_CIPHER "aes-xts-plain64"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_KEYSLOT_CIPHER \"aes-xts-plain64\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-keyslot-keybits was given.
-if test "${with_luks2_keyslot_keybits+set}" = set; then :
+if test ${with_luks2_keyslot_keybits+y}
+then :
   withval=$with_luks2_keyslot_keybits;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_KEYSLOT_KEYBITS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_KEYSLOT_KEYBITS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_KEYSLOT_KEYBITS 512
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_KEYSLOT_KEYBITS 512" >>confdefs.h
 
 
 
 
 
 # Check whether --with-loopaes-cipher was given.
-if test "${with_loopaes_cipher+set}" = set; then :
+if test ${with_loopaes_cipher+y}
+then :
   withval=$with_loopaes_cipher;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LOOPAES_CIPHER "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LOOPAES_CIPHER \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LOOPAES_CIPHER "aes"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LOOPAES_CIPHER \"aes\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-loopaes-keybits was given.
-if test "${with_loopaes_keybits+set}" = set; then :
+if test ${with_loopaes_keybits+y}
+then :
   withval=$with_loopaes_keybits;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LOOPAES_KEYBITS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LOOPAES_KEYBITS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LOOPAES_KEYBITS 256
-_ACEOF
+printf "%s\n" "#define DEFAULT_LOOPAES_KEYBITS 256" >>confdefs.h
 
 
 
 
 
 # Check whether --with-keyfile-size-maxkb was given.
-if test "${with_keyfile_size_maxkb+set}" = set; then :
+if test ${with_keyfile_size_maxkb+y}
+then :
   withval=$with_keyfile_size_maxkb;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_KEYFILE_SIZE_MAXKB $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_KEYFILE_SIZE_MAXKB $withval" >>confdefs.h
 
 
-else
+else $as_nop
+
+printf "%s\n" "#define DEFAULT_KEYFILE_SIZE_MAXKB 8192" >>confdefs.h
+
+
+
+fi
+
+
+# Check whether --with-integrity-keyfile-size-maxkb was given.
+if test ${with_integrity_keyfile_size_maxkb+y}
+then :
+  withval=$with_integrity_keyfile_size_maxkb;
+printf "%s\n" "#define DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB $withval" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_KEYFILE_SIZE_MAXKB 8192
-_ACEOF
+
+else $as_nop
+
+printf "%s\n" "#define DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB 4" >>confdefs.h
 
 
 
 
 
 # Check whether --with-passphrase-size-max was given.
-if test "${with_passphrase_size_max+set}" = set; then :
+if test ${with_passphrase_size_max+y}
+then :
   withval=$with_passphrase_size_max;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PASSPHRASE_SIZE_MAX $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_PASSPHRASE_SIZE_MAX $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_PASSPHRASE_SIZE_MAX 512
-_ACEOF
+printf "%s\n" "#define DEFAULT_PASSPHRASE_SIZE_MAX 512" >>confdefs.h
 
 
 
 
 
 # Check whether --with-verity-hash was given.
-if test "${with_verity_hash+set}" = set; then :
+if test ${with_verity_hash+y}
+then :
   withval=$with_verity_hash;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_HASH "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_HASH \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_HASH "sha256"
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_HASH \"sha256\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-verity-data-block was given.
-if test "${with_verity_data_block+set}" = set; then :
+if test ${with_verity_data_block+y}
+then :
   withval=$with_verity_data_block;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_DATA_BLOCK $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_DATA_BLOCK $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_DATA_BLOCK 4096
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_DATA_BLOCK 4096" >>confdefs.h
 
 
 
 
 
 # Check whether --with-verity-hash-block was given.
-if test "${with_verity_hash_block+set}" = set; then :
+if test ${with_verity_hash_block+y}
+then :
   withval=$with_verity_hash_block;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_HASH_BLOCK $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_HASH_BLOCK $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_HASH_BLOCK 4096
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_HASH_BLOCK 4096" >>confdefs.h
 
 
 
 
 
 # Check whether --with-verity-salt-size was given.
-if test "${with_verity_salt_size+set}" = set; then :
+if test ${with_verity_salt_size+y}
+then :
   withval=$with_verity_salt_size;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_SALT_SIZE $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_SALT_SIZE $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_SALT_SIZE 32
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_SALT_SIZE 32" >>confdefs.h
 
 
 
 
 
 # Check whether --with-verity-fec-roots was given.
-if test "${with_verity_fec_roots+set}" = set; then :
+if test ${with_verity_fec_roots+y}
+then :
   withval=$with_verity_fec_roots;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_FEC_ROOTS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_FEC_ROOTS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_VERITY_FEC_ROOTS 2
-_ACEOF
+printf "%s\n" "#define DEFAULT_VERITY_FEC_ROOTS 2" >>confdefs.h
 
 
 
 
 
 # Check whether --with-tmpfilesdir was given.
-if test "${with_tmpfilesdir+set}" = set; then :
+if test ${with_tmpfilesdir+y}
+then :
   withval=$with_tmpfilesdir;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_TMPFILESDIR "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_TMPFILESDIR \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_TMPFILESDIR ""
-_ACEOF
+printf "%s\n" "#define DEFAULT_TMPFILESDIR \"\"" >>confdefs.h
 
 
 
 
 
 # Check whether --with-luks2-lock-path was given.
-if test "${with_luks2_lock_path+set}" = set; then :
+if test ${with_luks2_lock_path+y}
+then :
   withval=$with_luks2_lock_path;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_LOCK_PATH "$withval"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_LOCK_PATH \"$withval\"" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_LOCK_PATH "/run/cryptsetup"
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_LOCK_PATH \"/run/cryptsetup\"" >>confdefs.h
 
 
 
@@ -20356,18 +21269,15 @@ DEFAULT_LUKS2_LOCK_PATH=$with_luks2_lock_path
 
 
 # Check whether --with-luks2-lock-dir-perms was given.
-if test "${with_luks2_lock_dir_perms+set}" = set; then :
+if test ${with_luks2_lock_dir_perms+y}
+then :
   withval=$with_luks2_lock_dir_perms;
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_LOCK_DIR_PERMS $withval
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_LOCK_DIR_PERMS $withval" >>confdefs.h
 
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS2_LOCK_DIR_PERMS 0700
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS2_LOCK_DIR_PERMS 0700" >>confdefs.h
 
 
 
@@ -20379,9 +21289,10 @@ DEFAULT_LUKS2_LOCK_DIR_PERMS=$with_luks2_lock_dir_perms
 
 
 # Check whether --with-default_luks_format was given.
-if test "${with_default_luks_format+set}" = set; then :
+if test ${with_default_luks_format+y}
+then :
   withval=$with_default_luks_format;
-else
+else $as_nop
   with_default_luks_format=LUKS2
 fi
 
@@ -20392,9 +21303,7 @@ case $with_default_luks_format in
        *) as_fn_error $? "Unknown default LUKS format. Use LUKS1 or LUKS2 only." "$LINENO" 5 ;;
 esac
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_LUKS_FORMAT $default_luks
-_ACEOF
+printf "%s\n" "#define DEFAULT_LUKS_FORMAT $default_luks" >>confdefs.h
 
 
 
@@ -20427,8 +21336,8 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -20458,15 +21367,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      /^ac_cv_env_/b end
      t clear
      :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
      t end
      s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
       if test ! -f "$cache_file" || test -h "$cache_file"; then
        cat confcache >"$cache_file"
       else
@@ -20480,8 +21389,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
       fi
     fi
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -20498,7 +21407,7 @@ U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -20509,14 +21418,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
    if test -n "$am_sleep_pid"; then
      # Hide warnings about reused PIDs.
      wait $am_sleep_pid 2>/dev/null
    fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -20615,8 +21524,8 @@ fi
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
 as_write_fail=0
 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
@@ -20639,14 +21548,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -20656,46 +21567,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -20704,13 +21615,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -20719,8 +21623,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -20732,30 +21640,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -20768,13 +21656,14 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -20801,18 +21690,20 @@ as_fn_unset ()
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
+
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -20824,12 +21715,13 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
@@ -20860,7 +21752,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -20882,6 +21774,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -20895,6 +21791,12 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -20936,7 +21838,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -20945,7 +21847,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -21007,8 +21909,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by cryptsetup $as_me 2.3.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+This file was extended by cryptsetup $as_me 2.3.7, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -21070,14 +21972,16 @@ $config_commands
 Report bugs to the package provider."
 
 _ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-cryptsetup config.status 2.3.3
-configured by $0, generated by GNU Autoconf 2.69,
+cryptsetup config.status 2.3.7
+configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
+    printf "%s\n" "$ac_cs_version"; exit ;;
   --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
+    printf "%s\n" "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -21133,7 +22037,7 @@ do
   --header | --heade | --head | --hea )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -21142,7 +22046,7 @@ do
     as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
+    printf "%s\n" "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
@@ -21170,7 +22074,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
   set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
   exec "\$@"
@@ -21184,7 +22088,7 @@ exec 5>>config.log
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  $as_echo "$ac_log"
+  printf "%s\n" "$ac_log"
 } >&5
 
 _ACEOF
@@ -21512,9 +22416,9 @@ done
 # We use the long form for the default assignment because of an extremely
 # bizarre bug on SunOS 4.1.3.
 if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+  test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+  test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+  test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
@@ -21850,7 +22754,7 @@ do
           esac ||
           as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
     configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+         printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
        `' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
     fi
     # Neutralize special characters interpreted by sed in replacement strings.
     case $configure_input in #(
     *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
+       ac_sed_conf_input=`printf "%s\n" "$configure_input" |
        sed 's/[\\\\&|]/\\\\&/g'`;; #(
     *) ac_sed_conf_input=$configure_input;;
     esac
@@ -21885,7 +22789,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$ac_file" : 'X\(//\)[^/]' \| \
         X"$ac_file" : 'X\(//\)$' \| \
         X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -21909,9 +22813,9 @@ $as_echo X"$ac_file" |
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -21973,8 +22877,8 @@ ac_sed_dataroot='
 case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
@@ -22018,9 +22922,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
       "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$ac_tmp/stdin"
@@ -22036,20 +22940,20 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
   #
   if test x"$ac_file" != x-; then
     {
-      $as_echo "/* $configure_input  */" \
+      printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
     } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$ac_tmp/config.h" "$ac_file" \
        || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
-    $as_echo "/* $configure_input  */" \
+    printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
@@ -22069,7 +22973,7 @@ $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$_am_arg" : 'X\(//\)[^/]' \| \
         X"$_am_arg" : 'X\(//\)$' \| \
         X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
+printf "%s\n" X"$_am_arg" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -22089,8 +22993,8 @@ $as_echo X"$_am_arg" |
          s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
 
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
+  :C)  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
 
@@ -22116,7 +23020,7 @@ esac
   for am_mf
   do
     # Strip MF so we end up with the name of the file.
-    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile which includes
     # dependency-tracking related rules and includes.
     # Grep'ing the whole file directly is not great: AIX grep has a line
@@ -22128,7 +23032,7 @@ $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$am_mf" : 'X\(//\)[^/]' \| \
         X"$am_mf" : 'X\(//\)$' \| \
         X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$am_mf" |
+printf "%s\n" X"$am_mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -22150,7 +23054,7 @@ $as_echo X"$am_mf" |
 $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
         X"$am_mf" : 'X\(//\)$' \| \
         X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$am_mf" |
+printf "%s\n" X/"$am_mf" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -22175,8 +23079,8 @@ $as_echo X/"$am_mf" |
    (exit $ac_status); } || am_rc=$?
   done
   if test $am_rc -ne 0; then
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Something went wrong bootstrapping makefile fragments
     for automatic dependency tracking.  If GNU make was not used, consider
     re-running the configure script with MAKE=\"gmake\" (or whatever is
@@ -22719,6 +23623,7 @@ _LT_EOF
   esac
 
 
+
 ltmain=$ac_aux_dir/ltmain.sh
 
 
@@ -22882,7 +23787,8 @@ if test "$no_create" != yes; then
   $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
+
index c5d7c6c..8f74740 100644 (file)
@@ -1,5 +1,5 @@
 AC_PREREQ([2.67])
-AC_INIT([cryptsetup],[2.3.3])
+AC_INIT([cryptsetup],[2.3.7])
 
 dnl library version from <major>.<minor>.<release>[-<suffix>]
 LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-)
@@ -57,7 +57,6 @@ dnl ==========================================================================
 AC_C_RESTRICT
 
 AC_HEADER_DIRENT
-AC_HEADER_STDC
 AC_CHECK_HEADERS(fcntl.h malloc.h inttypes.h sys/ioctl.h sys/mman.h \
        sys/sysmacros.h sys/statvfs.h ctype.h unistd.h locale.h byteswap.h endian.h stdint.h)
 AC_CHECK_DECLS([O_CLOEXEC],,[AC_DEFINE([O_CLOEXEC],[0], [Defined to 0 if not provided])],
@@ -146,6 +145,14 @@ AC_DEFUN([NO_FIPS], [
        fi
 ])
 
+dnl LUKS2 online reencryption
+AC_ARG_ENABLE([luks2-reencryption],
+       AS_HELP_STRING([--disable-luks2-reencryption], [disable LUKS2 online reencryption extension]),
+       [], [enable_luks2_reencryption=yes])
+if test "x$enable_luks2_reencryption" = "xyes"; then
+       AC_DEFINE(USE_LUKS2_REENCRYPTION, 1, [Use LUKS2 online reencryption extension])
+fi
+
 dnl ==========================================================================
 dnl pwquality library (cryptsetup CLI only)
 AC_ARG_ENABLE([pwquality],
@@ -176,7 +183,15 @@ AC_DEFINE_UNQUOTED([PASSWDQC_CONFIG_FILE], ["$use_passwdqc_config"], [passwdqc l
 if test "x$enable_passwdqc" = "xyes"; then
        AC_DEFINE(ENABLE_PASSWDQC, 1, [Enable password quality checking using passwdqc library])
 
-       PASSWDQC_LIBS="-lpasswdqc"
+       saved_LIBS="$LIBS"
+       AC_SEARCH_LIBS([passwdqc_check], [passwdqc])
+       case "$ac_cv_search_passwdqc_check" in
+               no) AC_MSG_ERROR([failed to find passwdqc_check]) ;;
+               -l*) PASSWDQC_LIBS="$ac_cv_search_passwdqc_check" ;;
+               *) PASSWDQC_LIBS= ;;
+       esac
+       AC_CHECK_FUNCS([passwdqc_params_free])
+       LIBS="$saved_LIBS"
 fi
 
 if test "x$enable_pwquality$enable_passwdqc" = "xyesyes"; then
@@ -596,7 +611,8 @@ CS_STR_WITH([loopaes-cipher], [cipher for loop-AES mode], [aes])
 CS_NUM_WITH([loopaes-keybits],[key length in bits for loop-AES mode], [256])
 
 CS_NUM_WITH([keyfile-size-maxkb],[maximum keyfile size (in KiB)], [8192])
-CS_NUM_WITH([passphrase-size-max],[maximum keyfile size (in characters)], [512])
+CS_NUM_WITH([integrity-keyfile-size-maxkb],[maximum integritysetup keyfile size (in KiB)], [4])
+CS_NUM_WITH([passphrase-size-max],[maximum passphrase size (in characters)], [512])
 
 CS_STR_WITH([verity-hash],       [hash function for verity mode], [sha256])
 CS_NUM_WITH([verity-data-block], [data block size for verity mode], [4096])
diff --git a/depcomp b/depcomp
index 6b39162..715e343 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2020 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index d8364af..b0cdd56 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * libcryptsetup API log example
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 7299a1c..f99bfc7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  libcryptsetup API - using LUKS device example
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index f4ecda3..3f09952 100644 (file)
Binary files a/docs/on-disk-format-luks2.pdf and b/docs/on-disk-format-luks2.pdf differ
diff --git a/docs/v2.3.4-ReleaseNotes b/docs/v2.3.4-ReleaseNotes
new file mode 100644 (file)
index 0000000..fb5a411
--- /dev/null
@@ -0,0 +1,112 @@
+Cryptsetup 2.3.4 Release Notes
+==============================
+Stable bug-fix release with a security fix (32-bit only).
+
+All users of cryptsetup 2.2.x and later should upgrade to this version.
+
+Changes since version 2.3.3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Fix a possible out-of-bounds memory write while validating LUKS2 data
+  segments metadata (CVE-2020-14382).
+
+  This problem can be triggered only on 32-bit builds (64-bit systems
+  are not affected).
+
+  LUKS2 format validation code contains a bug in segments validation code
+  where the code does not check for possible overflow on memory allocation.
+
+  Due to the bug, the libcryptsetup can be tricked to expect such allocation
+  was successful. Later it may read data from image crafted by an attacker and
+  actually write such data beyond allocated memory.
+
+  The bug was introduced in cryptsetup 2.2.0. All later releases until 2.3.4
+  are affected.
+
+  If you only backport the fix for this CVE, these master branch git commits
+  should be backported:
+    52f5cb8cedf22fb3e14c744814ec8af7614146c7
+    46ee71edcd13e1dad50815ad65c28779aa6f7503
+    752c9a52798f11d3b765b673ebaa3058eb25316e
+
+  Thanks to Tobias Stoeckmann for discovering this issue.
+
+* Ignore reported optimal IO size if not aligned to minimal page size.
+
+  Some USB enclosures report bogus block device topology (see lsblk -t) that
+  prevents LUKS2 format with 4k sector size (reported values are not correctly
+  aligned). The code now ignores such values and uses the default alignment.
+
+* Added support for new no_read/write_wrokqueue dm-crypt options (kernel 5.9).
+
+  These performance options, introduced in kernel 5.9, configure dm-crypt
+  to bypass read or write workqueues and run encryption synchronously.
+
+  Use --perf-no_read_workqueue or --perf-no_write_workqueue cryptsetup arguments
+  to use these dm-crypt flags.
+
+  These options are available only for low-level dm-crypt performance tuning,
+  use only if you need a change to default dm-crypt behavior.
+
+  For LUKS2, these flags can be persistently stored in metadata with
+  the --persistent option.
+
+* Added support panic_on_corruption option for dm-verity devices (kernel 5.9).
+
+  Veritysetup now supports --panic-on-corruption argument that configures
+  the dm-verity device to panics kernel if a corruption is detected.
+
+  This option is intended for specific configurations, do not use it in
+  standard configurations.
+
+* Support --master-key-file option for online LUKS2 reencryption
+
+  This can be used for reencryption of devices that uses protected key AES cipher
+  on some mainframes crypto accelerators.
+
+* Always return EEXIST error code if a device already exists.
+
+  Some libcryptsetup functions (activate_by*) now return EEXIST error code,
+  so the caller can distinguish that call fails because some parallel process
+  already activated the device.
+  Previously all fails returned EINVAL (invalid value).
+
+* Fix a problem in integritysetup if a hash algorithm has dash in the name.
+
+  If users want to use blake2b/blake2s, the kernel algorithm name includes
+  a dash (like "blake2s-256").
+  Theses algorithms can now be used for integritysetup devices.
+
+* Fix crypto backend to properly handle ECB mode.
+
+  Even though it should never be used, it should still work for testing :)
+  This fixes a bug introduced in cryptsetup version 2.3.2.
+
+* TrueCrypt/VeraCrypt compatible mode now supports the activation of devices
+  with a larger sector.
+
+  TrueCrypt/VeraCrypt always uses 512-byte sector for encryption, but for devices
+  with a larger native sector, it stores this value in the header.
+
+  This patch allows activation of such devices, basically ignoring
+  the mentioned sector size.
+
+* LUKS2: Do not create excessively large headers.
+
+  When creating a LUKS2 header with a specified --offset larger than
+  the LUKS2 header size, do not create a larger file than needed.
+
+* Fix unspecified sector size for BitLocker compatible mode.
+
+  Some BitLocker devices can contain zeroed sector size in the header.
+  In this case, the 512-byte sector should be used.
+  The bug was introduced in version 2.3.3.
+
+* Fix reading key data size in metadata for BitLocker compatible mode.
+
+  Such devices with an unexpected entry in metadata can now be activated.
+
+  Thanks to all users reporting these problems, BitLocker metadata documentation
+  is not publicly available, and we depend only on these reports.
+
+* Fix typos in documentation.
diff --git a/docs/v2.3.5-ReleaseNotes b/docs/v2.3.5-ReleaseNotes
new file mode 100644 (file)
index 0000000..bad4fdf
--- /dev/null
@@ -0,0 +1,181 @@
+Cryptsetup 2.3.5 Release Notes
+==============================
+Stable bug-fix release with minor extensions.
+
+All users of cryptsetup 2.x and later should upgrade to this version.
+
+Changes since version 2.3.4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Fix partial reads of passphrase from an interactive terminal.
+  Some stable kernels (5.3.11) started to return buffer from a terminal
+  in parts of maximal size 64 bytes.
+  This breaks the reading of passphrases longer than 64 characters
+  entered through an interactive terminal. The change is already fixed
+  in later kernel releases, but tools now support such partial read from
+  terminal properly.
+
+* Fix maximal length of password entered through a terminal.
+  Now the maximal interactive passphrase length is exactly
+  512 characters (not 511).
+
+* integritysetup: support new dm-integrity HMAC recalculation options.
+
+  In older kernels (since version 4.19), an attacker can force
+  an automatic recalculation of integrity tags by modifying
+  the dm-integrity superblock.
+  This is a problem with a keyed algorithms (HMAC), where it expects
+  nobody can trigger such recalculation without the key.
+  (Automatic recalculation will start after the next activation.)
+
+  Note that dm-integrity in standalone mode was *not* supposed
+  to provide cryptographic data integrity protection.
+  Despite that, we try to keep the system secure if keyed algorithms
+  are used.
+  Thank Daniel Glöckner for the original report of this problem.
+
+  Authenticated encryption that provides data integrity protection (in
+  combination with dm-crypt and LUKS2) is not affected by this problem.
+
+  The fix in the kernel for this problem contains two parts.
+
+  Firstly, the dm-integrity kernel module disables integrity
+  recalculation if keyed algorithms (HMAC) are used.
+  This change is included in long-term stable kernels.
+
+  Secondly, since the kernel version 5.11, dm-integrity introduces
+  modified protection where a journal-integrity algorithm guards
+  superblock; also, journal sections are protected. An attacker cannot
+  copy sectors from one journal section to another, and the superblock
+  also contains salt to prevent header replacement from another device.
+
+  If you want to protect data with HMAC, you should always also use HMAC
+  for --journal-integrity. Keys can be independent.
+  If HMAC is used for data but not for the journal, the recalculation
+  option is disabled.
+
+  If you need to use (insecure) backward compatibility implementation,
+  two new integritysetup options are introduced:
+    - Use --integrity-legacy-recalc (instead of --integrity-recalc)
+      to allow recalculation on legacy devices.
+    - Use --integrity-legacy-hmac in format action to force old insecure
+      HMAC format.
+
+  Libcryptsetup API also introduces flags
+    CRYPT_COMPAT_LEGACY_INTEGRITY_HMAC and
+    CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC
+  to set these through crypt_set_compatibility() call.
+
+* integritysetup: display of recalculating sector in dump command.
+
+* veritysetup: fix verity FEC if stored in the same image with hashes.
+
+  Optional FEC (Forward Error Correction) data should cover the whole
+  data area, hashes (Merkle tree), and optionally additional metadata
+  (located after hash area).
+
+  Unfortunately, if FEC data is stored in the same file as hash,
+  the calculation wrongly used the whole file size, thus overlaps with
+  the FEC area itself. This produced unusable and too large FEC data.
+  There is no problem if the FEC image is a separate image.
+
+  The problem is now fixed, introducing FEC blocks calculation as:
+    - If the hash device is in a separate image, metadata covers the
+      whole rest of the image after the hash area. (Unchanged behavior.)
+    - If hash and FEC device is in the image, metadata ends on the FEC
+      area offset.
+
+  Note: there is also a fix for FEC in the dm-verity kernel (on the way
+  to stable kernels) that fixes error correction with larger RS roots.
+
+* veritysetup: run FEC repair check even if root hash fails.
+
+  Note: The userspace FEC verify command reports are only informational
+  for now. Code does not check verity hash after FEC recovery in
+  userspace. The Reed-Solomon decoder can then report the possibility
+  that it fixed data even if parity is too damaged.
+  This will be fixed in the next major release.
+
+* veritysetup: do not process hash image if hash area is empty.
+
+  Sometimes the device is so small that there is only a root hash
+  needed, and the hash area is not used.
+  Also, the size of the hash image is not increased for hash block
+  alignment in this case.
+
+* veritysetup: store verity hash algorithm in superblock in lowercase.
+
+  Otherwise, the kernel could refuse the activation of the device.
+
+* bitlk: fix a crash if the device disappears during BitLocker scan.
+
+* bitlk: show a better error when trying to open an NTFS device.
+
+  Both BitLocker version 1 and NTFS have the same signature.
+  If a user opens an NTFS device without BitLocker, it now correctly
+  informs that it is not a BITLK device.
+
+* bitlk: add support for startup key protected VMKs.
+
+  The startup key can be provided in --key-file option for open command.
+
+* Fix LUKS1 repair code (regression since version 1.7.x).
+
+  We cannot trust possibly broken keyslots metadata in repair, so the
+  code recalculates them instead.
+  This makes the repair code working again when the master boot record
+  signature overwrites the LUKS header.
+
+* Fix luksKeyChange for LUKS2 with assigned tokens.
+
+  The token references are now correctly assigned to the new keyslot
+  number.
+
+* Fix cryptsetup resize using LUKS2 tokens.
+
+  Code needlessly asked for passphrase even though volume key was
+  already unlocked via LUKS2 token.
+
+* Print a visible error if device resize is not supported.
+
+* Add error message when suspending wrong non-LUKS device.
+
+* Fix default XTS mode key size in reencryption.
+
+  The same luksFormat logic (double key size because XTS uses two keys)
+  is applied in the reencryption code.
+
+* Rephrase missing locking directory warning and move it to debug level.
+
+  The system should later provide a safe transition to tempdir
+  configuration, so creating locking directory inside libcryptsetup
+  call is safe.
+
+* Many fixes for the use of cipher_null (empty debug cipher).
+
+  Support for this empty cipher was intended as a debug feature and for
+  measuring performance overhead. Unfortunately, many systems started to
+  use it as an "empty shell" for LUKS (to enable encryption later).
+
+  This use is very dangerous and it creates a false sense of security.
+
+  Anyway, to not break such systems, we try to support these
+  configurations.
+  Using cipher_null in any production system is strongly discouraged!
+
+  Fixes include:
+   - allow LUKS resume for a device with cipher_null.
+   - do not upload key in keyring when data cipher is null.
+   - switch to default cipher when reencrypting cipher_null device.
+   - replace possible bogus cipher_null keyslots before reencryption.
+   - fix broken detection of null cipher in LUKS2.
+     cipher_null is no longer possible to be used in keyslot encryption
+     in LUKS2, it can be used only for data for debugging purposes.
+
+* Fixes for libpasswdqc 2.0.x (optional passphrase quality check).
+
+* Fixes for problems discovered by various tools for code analysis.
+
+  Fixes include a rework of libpopt command line option string leaks.
+
+* Various fixes to man pages.
diff --git a/docs/v2.3.6-ReleaseNotes b/docs/v2.3.6-ReleaseNotes
new file mode 100644 (file)
index 0000000..deb975e
--- /dev/null
@@ -0,0 +1,56 @@
+Cryptsetup 2.3.6 Release Notes
+==============================
+Stable bug-fix release with minor extensions.
+
+All users of cryptsetup 2.x and later should upgrade to this version.
+
+Changes since version 2.3.5
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* integritysetup: Fix possible dm-integrity mapping table truncation.
+
+  While integritysetup in standalone mode (no encryption) was not
+  designed to provide keyed (and cryptographically strong) data
+  integrity protection, some options can use such algorithms (HMAC).
+
+  If a key is used, it is directly sent to the kernel dm-integrity as
+  a mapping table option (no key derivation is performed).
+  For HMAC, such a key could be quite long (up to 4096 bytes in
+  integritysetup CLI).
+
+  Unfortunately, due to fixed buffers and not correctly checking string
+  truncation, some parameter combinations could cause truncation
+  of the dm-integrity mapping table.
+  In most cases, the table was rejected by the kernel.
+  The worst possible case was key truncation for HMAC options
+  (internal_hash and journal_mac dm-integrity table options).
+
+  This release fixes possible truncation and also adds more sanity
+  checks to reject truncated options.
+  Also, integritysetup now mentions maximal allowed key size
+  in --help output.
+
+  For old standalone dm-integrity devices where the key length was
+  truncated, you have to modify (shorten) --integrity-key-size
+  resp. --journal-integrity-key-size option now.
+
+  This bug is _not_ present for dm-crypt/LUKS, LUKS2 (including
+  integrity protection), or dm-verity devices; it affects only
+  standalone dm-integrity with HMAC integrity protection.
+
+* cryptsetup: Backup header can be used to activate TCRYPT device.
+  Use --header option to specify the header.
+
+* cryptsetup: Avoid LUKS2 decryption without detached header.
+  This feature will be added later and is currently not supported.
+
+* Additional fixes and workarounds for common warnings produced
+  by some static analysis tools (like gcc-11 analyzer) and additional
+  code hardening.
+
+* Fix standalone libintl detection for compiled tests.
+
+* Add Blake2b and Blake2s hash support for crypto backends.
+  Kernel and gcrypt crypto backend support all variants.
+  OpenSSL supports only Blake2b-512 and Blake2s-256.
+  Crypto backend supports kernel notation e.g. "blake2b-512".
diff --git a/docs/v2.3.7-ReleaseNotes b/docs/v2.3.7-ReleaseNotes
new file mode 100644 (file)
index 0000000..5305d6f
--- /dev/null
@@ -0,0 +1,95 @@
+Cryptsetup 2.3.7 Release Notes
+==============================
+Stable security bug-fix release that fixes CVE-2021-4122.
+
+All users of cryptsetup 2.3.x must upgrade to this version.
+
+Changes since version 2.3.6
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Fix possible attacks against data confidentiality through LUKS2 online
+  reencryption extension crash recovery (CVE-2021-4122).
+
+  An attacker can modify on-disk metadata to simulate decryption in
+  progress with crashed (unfinished) reencryption step and persistently
+  decrypt part of the LUKS device.
+
+  This attack requires repeated physical access to the LUKS device but
+  no knowledge of user passphrases.
+
+  The decryption step is performed after a valid user activates
+  the device with a correct passphrase and modified metadata.
+  There are no visible warnings for the user that such recovery happened
+  (except using the luksDump command). The attack can also be reversed
+  afterward (simulating crashed encryption from a plaintext) with
+  possible modification of revealed plaintext.
+
+  The size of possible decrypted data depends on configured LUKS2 header
+  size (metadata size is configurable for LUKS2).
+  With the default parameters (16 MiB LUKS2 header) and only one
+  allocated keyslot (512 bit key for AES-XTS), simulated decryption with
+  checksum resilience SHA1 (20 bytes checksum for 4096-byte blocks),
+  the maximal decrypted size can be over 3GiB.
+
+  The attack is not applicable to LUKS1 format, but the attacker can
+  update metadata in place to LUKS2 format as an additional step.
+  For such a converted LUKS2 header, the keyslot area is limited to
+  decrypted size (with SHA1 checksums) over 300 MiB.
+
+  The issue is present in all cryptsetup releases since 2.2.0.
+  Versions 1.x, 2.0.x, and 2.1.x are not affected, as these do not
+  contain LUKS2 reencryption extension.
+
+  The problem was caused by reusing a mechanism designed for actual
+  reencryption operation without reassessing the security impact for new
+  encryption and decryption operations. While the reencryption requires
+  calculating and verifying both key digests, no digest was needed to
+  initiate decryption recovery if the destination is plaintext (no
+  encryption key). Also, some metadata (like encryption cipher) is not
+  protected, and an attacker could change it. Note that LUKS2 protects
+  visible metadata only when a random change occurs. It does not protect
+  against intentional modification but such modification must not cause
+  a violation of data confidentiality.
+
+  The fix introduces additional digest protection of reencryption
+  metadata. The digest is calculated from known keys and critical
+  reencryption metadata. Now an attacker cannot create correct metadata
+  digest without knowledge of a passphrase for used keyslots.
+  For more details, see LUKS2 On-Disk Format Specification version 1.1.0.
+
+  The former reencryption operation (without the additional digest) is no
+  longer supported (reencryption with the digest is not backward
+  compatible). You need to finish in-progress reencryption before
+  updating to new packages. The alternative approach is to perform
+  a repair command from the updated package to recalculate reencryption
+  digest and fix metadata.
+  The reencryption repair operation always require a user passphrase.
+
+  WARNING: Devices with older reencryption in progress can be no longer
+  activated without performing the action mentioned above.
+
+  Encryption in progress can be detected by running the luksDump command
+  (output includes reencrypt keyslot with reencryption parameters). Also,
+  during the active reencryption, no keyslot operations are available
+  (change of passphrases, etc.).
+
+  The issue was found by Milan Broz as cryptsetup maintainer.
+
+Other changes
+~~~~~~~~~~~~~
+* Add configure option --disable-luks2-reencryption to completely disable
+  LUKS2 reencryption code.
+
+  When used, the libcryptsetup library can read metadata with
+  reencryption code, but all reencryption API calls and cryptsetup
+  reencrypt commands are disabled.
+
+  Devices with online reencryption in progress cannot be activated.
+  This option can cause some incompatibilities. Please use with care.
+
+* Improve internal metadata validation code for reencryption metadata.
+
+* Add updated documentation for LUKS2 On-Disk Format Specification
+  version 1.1.0 (with reencryption extension description and updated
+  metadata description). See docs/on-disk-format-luks2.pdf or online
+  version in https://gitlab.com/cryptsetup/LUKS2-docs repository.
index bf4230b..69159fa 100644 (file)
@@ -104,6 +104,7 @@ libcryptsetup_la_SOURCES = \
        lib/luks2/luks2_keyslot_luks2.c \
        lib/luks2/luks2_keyslot_reenc.c \
        lib/luks2/luks2_reencrypt.c     \
+       lib/luks2/luks2_reencrypt_digest.c      \
        lib/luks2/luks2_segment.c       \
        lib/luks2/luks2_token_keyring.c \
        lib/luks2/luks2_token.c         \
index 2ce3a94..8846660 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * BITLK (BitLocker-compatible) volume handling
  *
- * Copyright (C) 2019-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2019-2020 Milan Broz
- * Copyright (C) 2019-2020 Vojtech Trefny
+ * Copyright (C) 2019-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2019-2021 Milan Broz
+ * Copyright (C) 2019-2021 Vojtech Trefny
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -54,6 +54,9 @@
 #define BITLK_RECOVERY_PARTS 8
 #define BITLK_RECOVERY_PART_LEN 6
 
+#define BITLK_BEK_FILE_HEADER_LEN 48
+#define BITLK_STARTUP_KEY_HEADER_LEN 24
+
 #define BITLK_KDF_HASH "sha256"
 #define BITLK_KDF_ITERATION_COUNT 0x100000
 
@@ -162,6 +165,18 @@ struct bitlk_kdf_data {
        uint64_t count;
 };
 
+struct bitlk_bek_header {
+       uint32_t metadata_size;
+       uint32_t metadata_version;
+       uint32_t metadata_header_size;
+       uint32_t metada_size_copy;
+       struct bitlk_guid guid;
+       uint32_t next_nonce;
+       uint16_t encryption;
+       uint16_t unknown;
+       uint64_t creation_time;
+} __attribute__ ((packed));
+
 static BITLKVMKProtection get_vmk_protection(uint16_t protection)
 {
        switch (protection) {
@@ -311,7 +326,9 @@ static int parse_vmk_entry(struct crypt_device *cd, uint8_t *data, int start, in
        bool supported = false;
 
        /* only passphrase or recovery passphrase vmks are supported (can be used to activate) */
-       supported = (*vmk)->protection == BITLK_PROTECTION_PASSPHRASE || (*vmk)->protection == BITLK_PROTECTION_RECOVERY_PASSPHRASE;
+       supported = (*vmk)->protection == BITLK_PROTECTION_PASSPHRASE ||
+                   (*vmk)->protection == BITLK_PROTECTION_RECOVERY_PASSPHRASE ||
+                   (*vmk)->protection == BITLK_PROTECTION_STARTUP_KEY;
 
        while (end - start > 2) {
                /* size of this entry */
@@ -394,6 +411,9 @@ static int parse_vmk_entry(struct crypt_device *cd, uint8_t *data, int start, in
                                (*vmk)->name = string;
                                string = NULL;
                        }
+               /* no idea what this is, lets hope it's not important */
+               } else if (key_entry_value == BITLK_ENTRY_VALUE_USE_KEY && (*vmk)->protection == BITLK_PROTECTION_STARTUP_KEY) {
+                       ;
                } else {
                        if (supported) {
                                log_err(cd, _("Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."), key_entry_value);
@@ -436,6 +456,9 @@ void BITLK_bitlk_vmk_free(struct bitlk_vmk *vmk)
 
 void BITLK_bitlk_metadata_free(struct bitlk_metadata *metadata)
 {
+       if (!metadata)
+               return;
+
        free(metadata->guid);
        if (metadata->description)
                free(metadata->description);
@@ -481,6 +504,18 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
                goto out;
        }
 
+       if (memcmp(sig.signature, BITLK_SIGNATURE, sizeof(sig.signature)) == 0) {
+               params->togo = false;
+               fve_offset = BITLK_HEADER_METADATA_OFFSET;
+       } else if (memcmp(sig.signature, BITLK_SIGNATURE_TOGO, sizeof(sig.signature)) == 0) {
+               params->togo = true;
+               fve_offset = BITLK_HEADER_METADATA_OFFSET_TOGO;
+       } else {
+               log_err(cd, _("Invalid or unknown signature for BITLK device."));
+               r = -EINVAL;
+               goto out;
+       }
+
        if (memcmp(sig.boot_code, BITLK_BOOTCODE_V1, sizeof(sig.boot_code)) == 0) {
                log_err(cd, _("BITLK version 1 is currently not supported."));
                r = -ENOTSUP;
@@ -493,19 +528,12 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
                goto out;
        }
 
-       if (memcmp(sig.signature, BITLK_SIGNATURE, sizeof(sig.signature)) == 0) {
-               params->togo = false;
-               fve_offset = BITLK_HEADER_METADATA_OFFSET;
-       } else if (memcmp(sig.signature, BITLK_SIGNATURE_TOGO, sizeof(sig.signature)) == 0) {
-               params->togo = true;
-               fve_offset = BITLK_HEADER_METADATA_OFFSET_TOGO;
-       } else {
-               log_err(cd, _("Invalid or unknown signature for BITLK device."));
-               r = -EINVAL;
-               goto out;
+       params->sector_size = le16_to_cpu(sig.sector_size);
+       if (params->sector_size == 0) {
+               log_dbg(cd, "Got sector size 0, assuming 512.");
+               params->sector_size = SECTOR_SIZE;
        }
 
-       params->sector_size = le16_to_cpu(sig.sector_size);
        if (!(params->sector_size == 512 || params->sector_size == 4096)) {
                log_err(cd, _("Unsupported sector size %" PRIu16 "."), params->sector_size);
                r = -EINVAL;
@@ -559,12 +587,12 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
        switch (le16_to_cpu(fve.encryption)) {
        /* AES-CBC with Elephant difuser */
        case 0x8000:
-               params->key_size = 128;
+               params->key_size = 256;
                params->cipher = "aes";
                params->cipher_mode = "cbc-elephant";
                break;
        case 0x8001:
-               params->key_size = 256;
+               params->key_size = 512;
                params->cipher = "aes";
                params->cipher_mode = "cbc-elephant";
                break;
@@ -581,12 +609,12 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
                break;
        /* AES-XTS */
        case 0x8004:
-               params->key_size = 128;
+               params->key_size = 256;
                params->cipher = "aes";
                params->cipher_mode = "xts-plain64";
                break;
        case 0x8005:
-               params->key_size = 256;
+               params->key_size = 512;
                params->cipher = "aes";
                params->cipher_mode = "xts-plain64";
                break;
@@ -623,7 +651,7 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
 
        if (read_lseek_blockwise(devfd, device_block_size(cd, device),
                device_alignment(device), fve_entries, fve_metadata_size - BITLK_FVE_METADATA_HEADER_LEN,
-               params->metadata_offset[0] + BITLK_FVE_METADATA_HEADERS_LEN) != fve_metadata_size - BITLK_FVE_METADATA_HEADER_LEN) {
+               params->metadata_offset[0] + BITLK_FVE_METADATA_HEADERS_LEN) != (ssize_t)(fve_metadata_size - BITLK_FVE_METADATA_HEADER_LEN)) {
                log_err(cd, _("Failed to read BITLK metadata entries from %s."), device_path(device));
                r = -EINVAL;
                goto out;
@@ -649,6 +677,10 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
                               sizeof(entry_vmk));
 
                        vmk = malloc(sizeof(struct bitlk_vmk));
+                       if (!vmk) {
+                               r = -ENOMEM;
+                               goto out;
+                       }
                        memset(vmk, 0, sizeof(struct bitlk_vmk));
 
                        guid_to_string(&entry_vmk.guid, guid_buf);
@@ -677,6 +709,10 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params)
                /* FVEK */
                } else if (entry_type == BITLK_ENTRY_TYPE_FVEK) {
                        params->fvek = malloc(sizeof(struct bitlk_fvek));
+                       if (!params->fvek) {
+                               r = -ENOMEM;
+                               goto out;
+                       }
                        memcpy(params->fvek->nonce,
                               fve_entries + start + BITLK_ENTRY_HEADER_LEN,
                               sizeof(params->fvek->nonce));
@@ -833,6 +869,120 @@ static int get_recovery_key(struct crypt_device *cd,
        return 0;
 }
 
+static int parse_external_key_entry(struct crypt_device *cd, const char *data, int start, int end, struct volume_key **vk)
+{
+       uint16_t key_entry_size = 0;
+       uint16_t key_entry_type = 0;
+       uint16_t key_entry_value = 0;
+       size_t key_size = 0;
+       const char *key = NULL;
+
+       while (end - start > 2) {
+               /* size of this entry */
+               memcpy(&key_entry_size, data + start, sizeof(key_entry_size));
+               key_entry_size = le16_to_cpu(key_entry_size);
+               if (key_entry_size == 0)
+                       break;
+
+               /* type and value of this entry */
+               memcpy(&key_entry_type, data + start + sizeof(key_entry_size), sizeof(key_entry_type));
+               memcpy(&key_entry_value,
+                      data + start + sizeof(key_entry_size) + sizeof(key_entry_type),
+                      sizeof(key_entry_value));
+               key_entry_type = le16_to_cpu(key_entry_type);
+               key_entry_value = le16_to_cpu(key_entry_value);
+
+               /* only properties should be in this entry */
+               if (key_entry_type != BITLK_ENTRY_TYPE_PROPERTY) {
+                       log_err(cd, _("Unexpected metadata entry type '%u' found when parsing external key."), key_entry_type);
+                       return -EINVAL;
+               }
+
+               if (key_entry_value == BITLK_ENTRY_VALUE_KEY) {
+                       key_size = key_entry_size - (BITLK_ENTRY_HEADER_LEN + 4);
+                       key = (const char *) data + start + BITLK_ENTRY_HEADER_LEN + 4;
+                       *vk = crypt_alloc_volume_key(key_size, key);
+                       if (*vk == NULL)
+                               return -ENOMEM;
+                       return 0;
+               /* optional "ExternalKey" string, we can safely ignore it */
+               } else if (key_entry_value == BITLK_ENTRY_VALUE_STRING)
+                       ;
+               else {
+                       log_err(cd, _("Unexpected metadata entry value '%u' found when parsing external key."), key_entry_value);
+                       return -EINVAL;
+               }
+
+               start += key_entry_size;
+       }
+
+       /* if we got here we failed to parse the metadata */
+       return -EINVAL;
+}
+
+/* check if given passphrase can be a startup key (has right format) and convert it */
+static int get_startup_key(struct crypt_device *cd,
+                          const char *password,
+                          size_t passwordLen,
+                          const struct bitlk_vmk *vmk,
+                          struct volume_key **su_key)
+{
+       struct bitlk_bek_header bek_header = {0};
+       char guid_buf[UUID_STR_LEN] = {0};
+
+       uint16_t key_entry_size = 0;
+       uint16_t key_entry_type = 0;
+       uint16_t key_entry_value = 0;
+
+       if (passwordLen < BITLK_BEK_FILE_HEADER_LEN)
+               return -EPERM;
+
+       memcpy(&bek_header, password, BITLK_BEK_FILE_HEADER_LEN);
+
+       /* metadata should contain GUID of the VMK this startup key is used for */
+       guid_to_string(&bek_header.guid, guid_buf);
+       if (strcmp(guid_buf, vmk->guid) == 0)
+               log_dbg(cd, "Found matching startup key for VMK %s", vmk->guid);
+       else
+               return -EPERM;
+
+       if (bek_header.metadata_version != 1) {
+               log_err(cd, "Unsupported BEK metadata version %" PRIu32 "", bek_header.metadata_version);
+               return -ENOTSUP;
+       }
+
+       if (bek_header.metadata_size != passwordLen) {
+               log_err(cd, "Unexpected BEK metadata size  %" PRIu32 " does not match BEK file length", bek_header.metadata_size);
+               return -EINVAL;
+       }
+
+       /* we are expecting exactly one metadata entry starting immediately after the header */
+       memcpy(&key_entry_size, password + BITLK_BEK_FILE_HEADER_LEN, sizeof(key_entry_size));
+       key_entry_size = le16_to_cpu(key_entry_size);
+       if (key_entry_size < BITLK_ENTRY_HEADER_LEN) {
+               log_dbg(cd, "Unexpected metadata entry size %" PRIu16 " when parsing BEK file", key_entry_size);
+               return -EINVAL;
+       }
+
+       /* type and value of this entry */
+       memcpy(&key_entry_type, password + BITLK_BEK_FILE_HEADER_LEN + sizeof(key_entry_size), sizeof(key_entry_type));
+       memcpy(&key_entry_value,
+              password + BITLK_BEK_FILE_HEADER_LEN + sizeof(key_entry_size) + sizeof(key_entry_type),
+              sizeof(key_entry_value));
+       key_entry_type = le16_to_cpu(key_entry_type);
+       key_entry_value = le16_to_cpu(key_entry_value);
+
+       if (key_entry_type == BITLK_ENTRY_TYPE_STARTUP_KEY && key_entry_value == BITLK_ENTRY_VALUE_EXTERNAL_KEY) {
+               return parse_external_key_entry(cd, password,
+                                               BITLK_BEK_FILE_HEADER_LEN + BITLK_ENTRY_HEADER_LEN + BITLK_STARTUP_KEY_HEADER_LEN,
+                                               passwordLen, su_key);
+       } else {
+               log_err(cd, _("Unexpected metadata entry found when parsing startup key."));
+               log_dbg(cd, "Entry type: %u, entry value: %u", key_entry_type, key_entry_value);
+               return -EINVAL;
+       }
+}
+
 static int bitlk_kdf(struct crypt_device *cd,
                     const char *password,
                     size_t passwordLen,
@@ -908,7 +1058,7 @@ static int decrypt_key(struct crypt_device *cd,
 {
        char *outbuf;
        int r;
-       uint32_t key_size = 0;
+       uint16_t key_size = 0;
 
        outbuf = crypt_safe_alloc(enc_key->keylength);
        if (!outbuf)
@@ -923,16 +1073,18 @@ static int decrypt_key(struct crypt_device *cd,
        }
 
        /* key_data has it's size as part of the metadata */
-       memcpy(&key_size, outbuf, 4);
-       key_size = le32_to_cpu(key_size);
+       memcpy(&key_size, outbuf, 2);
+       key_size = le16_to_cpu(key_size);
        if (enc_key->keylength != key_size) {
-               log_err(cd, _("Wrong key size."));
+               log_err(cd, _("Unexpected key data size."));
+               log_dbg(cd, "Expected key data size: %zu, got %" PRIu16 "", enc_key->keylength, key_size);
+
                r = -EINVAL;
                goto out;
        }
 
        if (is_fvek && strcmp(crypt_get_cipher_mode(cd), "cbc-elephant") == 0 &&
-               crypt_get_volume_key_size(cd) == 16) {
+               crypt_get_volume_key_size(cd) == 32) {
                /* 128bit AES-CBC with Elephant -- key size is 256 bit (2 keys) but key data is 512 bits,
                   data: 16B CBC key, 16B empty, 16B elephant key, 16B empty */
                memcpy(outbuf + 16 + BITLK_OPEN_KEY_METADATA_LEN,
@@ -993,12 +1145,18 @@ int BITLK_activate(struct crypt_device *cd,
        while (next_vmk) {
                if (next_vmk->protection == BITLK_PROTECTION_PASSPHRASE) {
                        r = bitlk_kdf(cd, password, passwordLen, false, next_vmk->salt, &vmk_dec_key);
-                       if (r)
-                               return r;
+                       if (r) {
+                               /* something wrong happened, but we still want to check other key slots */
+                               next_vmk = next_vmk->next;
+                               continue;
+                       }
                } else if (next_vmk->protection == BITLK_PROTECTION_RECOVERY_PASSPHRASE) {
                        r = get_recovery_key(cd, password, passwordLen, &recovery_key);
-                       if (r)
-                               return r;
+                       if (r) {
+                               /* something wrong happened, but we still want to check other key slots */
+                               next_vmk = next_vmk->next;
+                               continue;
+                       }
                        if (recovery_key == NULL) {
                                /* r = 0 but no key -> given passphrase is not a recovery passphrase */
                                r = -EPERM;
@@ -1011,8 +1169,15 @@ int BITLK_activate(struct crypt_device *cd,
                        crypt_free_volume_key(recovery_key);
                        if (r)
                                return r;
+               } else if (next_vmk->protection == BITLK_PROTECTION_STARTUP_KEY) {
+                       r = get_startup_key(cd, password, passwordLen, next_vmk, &vmk_dec_key);
+                       if (r) {
+                               next_vmk = next_vmk->next;
+                               continue;
+                       }
+                       log_dbg(cd, "Trying to use external key found in provided password.");
                } else {
-                       /* only passphrase and recovery passphrase VMKs supported right now */
+                       /* only passphrase, recovery passphrase and startup key VMKs supported right now */
                        log_dbg(cd, "Skipping %s", get_vmk_protection_string(next_vmk->protection));
                        next_vmk = next_vmk->next;
                        if (r == 0)
index a784883..1081519 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * BITLK (BitLocker-compatible) header definition
  *
- * Copyright (C) 2019-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2019-2020 Milan Broz
- * Copyright (C) 2019-2020 Vojtech Trefny
+ * Copyright (C) 2019-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2019-2021 Milan Broz
+ * Copyright (C) 2019-2021 Vojtech Trefny
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 77d72fc..180d08a 100644 (file)
@@ -2,8 +2,8 @@
  * cryptsetup plain device helper functions
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index f748bcc..c784fca 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
@@ -450,6 +450,8 @@ const char *argon2_error_message(int error_code) {
 
 size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism,
                          uint32_t saltlen, uint32_t hashlen, argon2_type type) {
+  if (!argon2_type2string(type, 0))
+      return 0;
   return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) +
          numlen(t_cost) + numlen(m_cost) + numlen(parallelism) +
          b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) + 1;
index fc8682c..20df933 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index e77ad92..dcac827 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 9f97e1c..0c1b0ee 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index b8651f2..d8f69e8 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 2c8942e..3127f2a 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index b8f2cf4..16cfc1c 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index f5b0067..b204ba9 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 78000ba..59e2564 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 9de606e..a717263 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 7e83ec9..5b8b2dd 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index f6c2052..6c5e403 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index ad1cf46..10e45eb 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index e099a00..3ae2fb2 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 49d8836..d4ca10c 100644 (file)
@@ -8,8 +8,8 @@
  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
  * these licenses can be found at:
  *
- * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
- * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0
+ * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
+ * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
  *
  * You should have received a copy of both of these licenses along with this
  * software. If not, they may be obtained at the above URLs.
index 64cf10b..d8a5b21 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Argon2 PBKDF2 library wrapper
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Milan Broz
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 2119d97..70515ee 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Cipher performance check
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2018-2020 Milan Broz
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 0ddec59..bce36e0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Linux kernel cipher generic utilities
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2018-2020 Milan Broz
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 13fd47c..5a49e70 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -109,7 +109,7 @@ int crypt_cipher_check_kernel(const char *name, const char *mode,
 /* Storage encryption wrappers */
 int crypt_storage_init(struct crypt_storage **ctx, size_t sector_size,
                       const char *cipher, const char *cipher_mode,
-                      const void *key, size_t key_length);
+                      const void *key, size_t key_length, bool large_iv);
 void crypt_storage_destroy(struct crypt_storage *ctx);
 int crypt_storage_decrypt(struct crypt_storage *ctx, uint64_t iv_offset,
                          uint64_t length, char *buffer);
index 6128cd4..9d1bfb2 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 1a8aecf..607c3d3 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Linux kernel userspace API crypto backend implementation (skcipher)
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -96,11 +96,14 @@ int crypt_cipher_init_kernel(struct crypt_cipher_kernel *ctx, const char *name,
                .salg_family = AF_ALG,
                .salg_type = "skcipher",
        };
+       int r;
 
        if (!strcmp(name, "cipher_null"))
                key_length = 0;
 
-       snprintf((char *)sa.salg_name, sizeof(sa.salg_name), "%s(%s)", mode, name);
+       r = snprintf((char *)sa.salg_name, sizeof(sa.salg_name), "%s(%s)", mode, name);
+       if (r < 0 || (size_t)r >= sizeof(sa.salg_name))
+               return -EINVAL;
 
        return _crypt_cipher_init(ctx, key, key_length, 0, &sa);
 }
@@ -152,6 +155,9 @@ static int _crypt_cipher_crypt(struct crypt_cipher_kernel *ctx,
        /* Set IV */
        if (iv) {
                header = CMSG_NXTHDR(&msg, header);
+               if (!header)
+                       return -EINVAL;
+
                header->cmsg_level = SOL_ALG;
                header->cmsg_type = ALG_SET_IV;
                header->cmsg_len = iv_msg_size;
@@ -227,7 +233,10 @@ int crypt_cipher_check_kernel(const char *name, const char *mode,
        }
 
        salg_type = aead ? "aead" : "skcipher";
-       snprintf((char *)sa.salg_type, sizeof(sa.salg_type), "%s", salg_type);
+       r = snprintf((char *)sa.salg_type, sizeof(sa.salg_type), "%s", salg_type);
+       if (r < 0 || (size_t)r >= sizeof(sa.salg_name))
+               return -EINVAL;
+
        memset(tmp_salg_name, 0, sizeof(tmp_salg_name));
 
        /* FIXME: this is duplicating a part of devmapper backend */
@@ -240,7 +249,7 @@ int crypt_cipher_check_kernel(const char *name, const char *mode,
        else
                r = snprintf(tmp_salg_name, sizeof(tmp_salg_name), "%s(%s)", real_mode, name);
 
-       if (r <= 0 || r > (int)(sizeof(sa.salg_name) - 1))
+       if (r < 0 || (size_t)r >= sizeof(tmp_salg_name))
                return -EINVAL;
 
        memcpy(sa.salg_name, tmp_salg_name, sizeof(sa.salg_name));
index f2cf3c6..698b52a 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * GCRYPT crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -51,9 +51,14 @@ struct crypt_cipher {
        } u;
 };
 
+struct hash_alg {
+       const char *name;
+       const char *gcrypt_name;
+};
+
 /*
  * Test for wrong Whirlpool variant,
- * Ref: http://lists.gnupg.org/pipermail/gcrypt-devel/2014-January/002889.html
+ * Ref: https://lists.gnupg.org/pipermail/gcrypt-devel/2014-January/002889.html
  */
 static void crypt_hash_test_whirlpool_bug(void)
 {
@@ -91,6 +96,8 @@ static void crypt_hash_test_whirlpool_bug(void)
 
 int crypt_backend_init(void)
 {
+       int r;
+
        if (crypto_backend_initialised)
                return 0;
 
@@ -120,11 +127,12 @@ int crypt_backend_init(void)
        crypto_backend_initialised = 1;
        crypt_hash_test_whirlpool_bug();
 
-       snprintf(version, 64, "gcrypt %s%s%s",
+       r = snprintf(version, sizeof(version), "gcrypt %s%s%s",
                 gcry_check_version(NULL),
                 crypto_backend_secmem ? "" : ", secmem disabled",
-                crypto_backend_whirlpool_bug > 0 ? ", flawed whirlpool" : ""
-               );
+                crypto_backend_whirlpool_bug > 0 ? ", flawed whirlpool" : "");
+       if (r < 0 || (size_t)r >= sizeof(version))
+               return -EINVAL;
 
        return 0;
 }
@@ -150,10 +158,24 @@ uint32_t crypt_backend_flags(void)
 static const char *crypt_hash_compat_name(const char *name, unsigned int *flags)
 {
        const char *hash_name = name;
+       int i;
+       static struct hash_alg hash_algs[] = {
+       { "blake2b-160", "blake2b_160" },
+       { "blake2b-256", "blake2b_256" },
+       { "blake2b-384", "blake2b_384" },
+       { "blake2b-512", "blake2b_512" },
+       { "blake2s-128", "blake2s_128" },
+       { "blake2s-160", "blake2s_160" },
+       { "blake2s-224", "blake2s_224" },
+       { "blake2s-256", "blake2s_256" },
+       { NULL,          NULL,         }};
+
+       if (!name)
+               return NULL;
 
        /* "whirlpool_gcryptbug" is out shortcut to flawed whirlpool
         * in libgcrypt < 1.6.0 */
-       if (name && !strcasecmp(name, "whirlpool_gcryptbug")) {
+       if (!strcasecmp(name, "whirlpool_gcryptbug")) {
 #if GCRYPT_VERSION_NUMBER >= 0x010601
                if (flags)
                        *flags |= GCRY_MD_FLAG_BUGEMU1;
@@ -161,6 +183,15 @@ static const char *crypt_hash_compat_name(const char *name, unsigned int *flags)
                hash_name = "whirlpool";
        }
 
+       i = 0;
+       while (hash_algs[i].name) {
+               if (!strcasecmp(name, hash_algs[i].name)) {
+                       hash_name =  hash_algs[i].gcrypt_name;
+                       break;
+               }
+               i++;
+       }
+
        return hash_name;
 }
 
index bb80d73..2881ed4 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Linux kernel userspace API crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -62,6 +62,14 @@ static struct hash_alg hash_algs[] = {
        { "stribog256","streebog256", 32,  64 },
        { "stribog512","streebog512", 64,  64 },
        { "sm3",       "sm3",         32,  64 },
+       { "blake2b-160","blake2b-160",20, 128 },
+       { "blake2b-256","blake2b-256",32, 128 },
+       { "blake2b-384","blake2b-384",48, 128 },
+       { "blake2b-512","blake2b-512",64, 128 },
+       { "blake2s-128","blake2s-128",16,  64 },
+       { "blake2s-160","blake2s-160",20,  64 },
+       { "blake2s-224","blake2s-224",28,  64 },
+       { "blake2s-256","blake2s-256",32,  64 },
        { NULL,        NULL,           0,   0 }
 };
 
@@ -118,7 +126,7 @@ int crypt_backend_init(void)
                .salg_type = "hash",
                .salg_name = "sha256",
        };
-       int tfmfd = -1, opfd = -1;
+       int r, tfmfd = -1, opfd = -1;
 
        if (crypto_backend_initialised)
                return 0;
@@ -126,15 +134,17 @@ int crypt_backend_init(void)
        if (uname(&uts) == -1 || strcmp(uts.sysname, "Linux"))
                return -EINVAL;
 
+       r = snprintf(version, sizeof(version), "%s %s kernel cryptoAPI",
+               uts.sysname, uts.release);
+       if (r < 0 || (size_t)r >= sizeof(version))
+               return -EINVAL;
+
        if (crypt_kernel_socket_init(&sa, &tfmfd, &opfd, NULL, 0) < 0)
                return -EINVAL;
 
        close(tfmfd);
        close(opfd);
 
-       snprintf(version, sizeof(version), "%s %s kernel cryptoAPI",
-                uts.sysname, uts.release);
-
        crypto_backend_initialised = 1;
        return 0;
 }
@@ -255,6 +265,7 @@ int crypt_hmac_init(struct crypt_hmac **ctx, const char *name,
                .salg_family = AF_ALG,
                .salg_type = "hash",
        };
+       int r;
 
        h = malloc(sizeof(*h));
        if (!h)
@@ -267,8 +278,12 @@ int crypt_hmac_init(struct crypt_hmac **ctx, const char *name,
        }
        h->hash_len = ha->length;
 
-       snprintf((char *)sa.salg_name, sizeof(sa.salg_name),
+       r = snprintf((char *)sa.salg_name, sizeof(sa.salg_name),
                 "hmac(%s)", ha->kernel_name);
+       if (r < 0 || (size_t)r >= sizeof(sa.salg_name)) {
+               free(h);
+               return -EINVAL;
+       }
 
        if (crypt_kernel_socket_init(&sa, &h->tfmfd, &h->opfd, key, key_length) < 0) {
                free(h);
index c2ec305..3cffba9 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Nettle crypto backend implementation
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2011-2020 Milan Broz
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index f141432..7e4db80 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * NSS crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -77,6 +77,8 @@ static struct hash_alg *_get_alg(const char *name)
 
 int crypt_backend_init(void)
 {
+       int r;
+
        if (crypto_backend_initialised)
                return 0;
 
@@ -84,10 +86,13 @@ int crypt_backend_init(void)
                return -EINVAL;
 
 #if HAVE_DECL_NSS_GETVERSION
-       snprintf(version, 64, "NSS %s", NSS_GetVersion());
+       r = snprintf(version, sizeof(version), "NSS %s", NSS_GetVersion());
 #else
-       snprintf(version, 64, "NSS");
+       r = snprintf(version, sizeof(version), "NSS");
 #endif
+       if (r < 0 || (size_t)r >= sizeof(version))
+               return -EINVAL;
+
        crypto_backend_initialised = 1;
        return 0;
 }
index 2edec7b..8681aab 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * OPENSSL crypto backend implementation
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2010-2020 Milan Broz
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -63,6 +63,11 @@ struct crypt_cipher {
        } u;
 };
 
+struct hash_alg {
+       const char *name;
+       const char *openssl_name;
+};
+
 /*
  * Compatible wrappers for OpenSSL < 1.1.0 and LibreSSL < 2.7.0
  */
@@ -147,11 +152,36 @@ const char *crypt_backend_version(void)
        return openssl_backend_version();
 }
 
+static const char *crypt_hash_compat_name(const char *name)
+{
+       const char *hash_name = name;
+       int i;
+       static struct hash_alg hash_algs[] = {
+       { "blake2b-512", "blake2b512" },
+       { "blake2s-256", "blake2s256" },
+       { NULL,          NULL,         }};
+
+       if (!name)
+               return NULL;
+
+       i = 0;
+       while (hash_algs[i].name) {
+               if (!strcasecmp(name, hash_algs[i].name)) {
+                       hash_name =  hash_algs[i].openssl_name;
+                       break;
+               }
+               i++;
+       }
+
+       return hash_name;
+}
+
 /* HASH */
 int crypt_hash_size(const char *name)
 {
-       const EVP_MD *hash_id = EVP_get_digestbyname(name);
+       const EVP_MD *hash_id;
 
+       hash_id = EVP_get_digestbyname(crypt_hash_compat_name(name));
        if (!hash_id)
                return -EINVAL;
 
@@ -172,7 +202,7 @@ int crypt_hash_init(struct crypt_hash **ctx, const char *name)
                return -ENOMEM;
        }
 
-       h->hash_id = EVP_get_digestbyname(name);
+       h->hash_id = EVP_get_digestbyname(crypt_hash_compat_name(name));
        if (!h->hash_id) {
                EVP_MD_CTX_free(h->md);
                free(h);
@@ -257,7 +287,7 @@ int crypt_hmac_init(struct crypt_hmac **ctx, const char *name,
                return -ENOMEM;
        }
 
-       h->hash_id = EVP_get_digestbyname(name);
+       h->hash_id = EVP_get_digestbyname(crypt_hash_compat_name(name));
        if (!h->hash_id) {
                HMAC_CTX_free(h->md);
                free(h);
@@ -333,7 +363,7 @@ int crypt_pbkdf(const char *kdf, const char *hash,
                return -EINVAL;
 
        if (!strcmp(kdf, "pbkdf2")) {
-               hash_id = EVP_get_digestbyname(hash);
+               hash_id = EVP_get_digestbyname(crypt_hash_compat_name(hash));
                if (!hash_id)
                        return -EINVAL;
 
@@ -372,7 +402,7 @@ static int _cipher_init(EVP_CIPHER_CTX **hd_enc, EVP_CIPHER_CTX **hd_dec, const
                key_bits /= 2;
 
        r = snprintf(cipher_name, sizeof(cipher_name), "%s-%d-%s", name, key_bits, mode);
-       if (r < 0 || r >= (int)sizeof(cipher_name))
+       if (r < 0 || (size_t)r >= sizeof(cipher_name))
                return -EINVAL;
 
        type = EVP_get_cipherbyname(cipher_name);
index 846f17c..14ab7fe 100644 (file)
@@ -2,7 +2,7 @@
  * Generic wrapper for storage encryption modes and Initial Vectors
  * (reimplementation of some functions from Linux dm-crypt kernel)
  *
- * Copyright (C) 2014-2020 Milan Broz
+ * Copyright (C) 2014-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ struct crypt_sector_iv {
 
 /* Block encryption storage context */
 struct crypt_storage {
-       unsigned sector_shift;
+       size_t sector_size;
        unsigned iv_shift;
        struct crypt_cipher *cipher;
        struct crypt_sector_iv cipher_iv;
@@ -56,14 +56,15 @@ static int int_log2(unsigned int x)
 
 static int crypt_sector_iv_init(struct crypt_sector_iv *ctx,
                         const char *cipher_name, const char *mode_name,
-                        const char *iv_name, const void *key, size_t key_length, size_t sector_size)
+                        const char *iv_name, const void *key, size_t key_length,
+                        size_t sector_size)
 {
        int r;
 
        memset(ctx, 0, sizeof(*ctx));
 
        ctx->iv_size = crypt_cipher_ivsize(cipher_name, mode_name);
-       if (ctx->iv_size < 8)
+       if (ctx->iv_size < 0 || (strcmp(mode_name, "ecb") && ctx->iv_size < 8))
                return -ENOENT;
 
        if (!strcmp(cipher_name, "cipher_null") ||
@@ -212,7 +213,8 @@ int crypt_storage_init(struct crypt_storage **ctx,
                       size_t sector_size,
                       const char *cipher,
                       const char *cipher_mode,
-                      const void *key, size_t key_length)
+                      const void *key, size_t key_length,
+                      bool large_iv)
 {
        struct crypt_storage *s;
        char mode_name[64];
@@ -250,8 +252,8 @@ int crypt_storage_init(struct crypt_storage **ctx,
                return r;
        }
 
-       s->sector_shift = int_log2(sector_size);
-       s->iv_shift = s->sector_shift - SECTOR_SHIFT;
+       s->sector_size = sector_size;
+       s->iv_shift = large_iv ? int_log2(sector_size) - SECTOR_SHIFT : 0;
 
        *ctx = s;
        return 0;
@@ -264,19 +266,20 @@ int crypt_storage_decrypt(struct crypt_storage *ctx,
        uint64_t i;
        int r = 0;
 
-       if (length & ((1 << ctx->sector_shift) - 1))
+       if (length & (ctx->sector_size - 1))
                return -EINVAL;
 
-       length >>= ctx->sector_shift;
+       if (iv_offset & ((ctx->sector_size >> SECTOR_SHIFT) - 1))
+               return -EINVAL;
 
-       for (i = 0; i < length; i++) {
-               r = crypt_sector_iv_generate(&ctx->cipher_iv, iv_offset + (uint64_t)(i << ctx->iv_shift));
+       for (i = 0; i < length; i += ctx->sector_size) {
+               r = crypt_sector_iv_generate(&ctx->cipher_iv, (iv_offset + (i >> SECTOR_SHIFT)) >> ctx->iv_shift);
                if (r)
                        break;
                r = crypt_cipher_decrypt(ctx->cipher,
-                                        &buffer[i << ctx->sector_shift],
-                                        &buffer[i << ctx->sector_shift],
-                                        1 << ctx->sector_shift,
+                                        &buffer[i],
+                                        &buffer[i],
+                                        ctx->sector_size,
                                         ctx->cipher_iv.iv,
                                         ctx->cipher_iv.iv_size);
                if (r)
@@ -293,19 +296,20 @@ int crypt_storage_encrypt(struct crypt_storage *ctx,
        uint64_t i;
        int r = 0;
 
-       if (length & ((1 << ctx->sector_shift) - 1))
+       if (length & (ctx->sector_size - 1))
                return -EINVAL;
 
-       length >>= ctx->sector_shift;
+       if (iv_offset & ((ctx->sector_size >> SECTOR_SHIFT) - 1))
+               return -EINVAL;
 
-       for (i = 0; i < length; i++) {
-               r = crypt_sector_iv_generate(&ctx->cipher_iv, iv_offset + (i << ctx->iv_shift));
+       for (i = 0; i < length; i += ctx->sector_size) {
+               r = crypt_sector_iv_generate(&ctx->cipher_iv, (iv_offset + (i >> SECTOR_SHIFT)) >> ctx->iv_shift);
                if (r)
                        break;
                r = crypt_cipher_encrypt(ctx->cipher,
-                                        &buffer[i << ctx->sector_shift],
-                                        &buffer[i << ctx->sector_shift],
-                                        1 << ctx->sector_shift,
+                                        &buffer[i],
+                                        &buffer[i],
+                                        ctx->sector_size,
                                         ctx->cipher_iv.iv,
                                         ctx->cipher_iv.iv_size);
                if (r)
index 3f6163c..b18c7a7 100644 (file)
@@ -4,8 +4,8 @@
  * Copyright (C) 2004 Free Software Foundation
  *
  * cryptsetup related changes
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 7444e0a..b4c52a9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * PBKDF performance check
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  * Copyright (C) 2016-2020 Ondrej Mosnacek
  *
  * This file is free software; you can redistribute it and/or
@@ -361,8 +361,10 @@ static int crypt_pbkdf_check(const char *kdf, const char *hash,
                ms = time_ms(&rstart, &rend);
                if (ms) {
                        PBKDF2_temp = (double)iterations * target_ms / ms;
-                       if (PBKDF2_temp > UINT32_MAX)
-                               return -EINVAL;
+                       if (PBKDF2_temp > UINT32_MAX) {
+                               r = -EINVAL;
+                               goto out;
+                       }
                        *iter_secs = (uint32_t)PBKDF2_temp;
                }
 
index 86305ce..ccb393e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Integrity volume handling
  *
- * Copyright (C) 2016-2020 Milan Broz
+ * Copyright (C) 2016-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ static int INTEGRITY_read_superblock(struct crypt_device *cd,
        if (read_lseek_blockwise(devfd, device_block_size(cd, device),
                device_alignment(device), sb, sizeof(*sb), offset) != sizeof(*sb) ||
            memcmp(sb->magic, SB_MAGIC, sizeof(sb->magic)) ||
-           sb->version < SB_VERSION_1 || sb->version > SB_VERSION_4) {
+           sb->version < SB_VERSION_1 || sb->version > SB_VERSION_5) {
                log_std(cd, "No integrity superblock detected on %s.\n",
                        device_path(device));
                r = -EINVAL;
@@ -92,14 +92,15 @@ int INTEGRITY_dump(struct crypt_device *cd, struct device *device, uint64_t offs
        log_std(cd, "journal_sections %u\n", sb.journal_sections);
        log_std(cd, "provided_data_sectors %" PRIu64 "\n", sb.provided_data_sectors);
        log_std(cd, "sector_size %u\n", SECTOR_SIZE << sb.log2_sectors_per_block);
-       if (sb.version == SB_VERSION_2 && (sb.flags & SB_FLAG_RECALCULATING))
+       if (sb.version >= SB_VERSION_2 && (sb.flags & SB_FLAG_RECALCULATING))
                log_std(cd, "recalc_sector %" PRIu64 "\n", sb.recalc_sector);
        log_std(cd, "log2_blocks_per_bitmap %u\n", sb.log2_blocks_per_bitmap_bit);
-       log_std(cd, "flags %s%s%s%s\n",
+       log_std(cd, "flags %s%s%s%s%s\n",
                sb.flags & SB_FLAG_HAVE_JOURNAL_MAC ? "have_journal_mac " : "",
                sb.flags & SB_FLAG_RECALCULATING ? "recalculating " : "",
                sb.flags & SB_FLAG_DIRTY_BITMAP ? "dirty_bitmap " : "",
-               sb.flags & SB_FLAG_FIXED_PADDING ? "fix_padding " : "");
+               sb.flags & SB_FLAG_FIXED_PADDING ? "fix_padding " : "",
+               sb.flags & SB_FLAG_FIXED_HMAC ? "fix_hmac " : "");
 
        return 0;
 }
@@ -278,6 +279,15 @@ int INTEGRITY_activate_dmd_device(struct crypt_device *cd,
                return -ENOTSUP;
        }
 
+       if (r < 0 && (dmd->flags & CRYPT_ACTIVATE_RECALCULATE) &&
+           !(crypt_get_compatibility(cd) & CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC) &&
+           ((sb_flags & SB_FLAG_FIXED_HMAC) ?
+           (tgt->u.integrity.vk && !tgt->u.integrity.journal_integrity_key) :
+           (tgt->u.integrity.vk || tgt->u.integrity.journal_integrity_key))) {
+               log_err(cd, _("Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."));
+               return -ENOTSUP;
+       }
+
        return r;
 }
 
@@ -320,7 +330,9 @@ int INTEGRITY_format(struct crypt_device *cd,
        uuid_generate(tmp_uuid_bin);
        uuid_unparse(tmp_uuid_bin, tmp_uuid);
 
-       snprintf(tmp_name, sizeof(tmp_name), "temporary-cryptsetup-%s", tmp_uuid);
+       r = snprintf(tmp_name, sizeof(tmp_name), "temporary-cryptsetup-%s", tmp_uuid);
+       if (r < 0 || (size_t)r >= sizeof(tmp_name))
+               return -EINVAL;
 
        /* There is no data area, we can actually use fake zeroed key */
        if (params && params->integrity_key_size)
index 38c4c5e..1f49612 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Integrity header definition
  *
- * Copyright (C) 2016-2020 Milan Broz
+ * Copyright (C) 2016-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -35,11 +35,13 @@ struct crypt_dm_active_device;
 #define SB_VERSION_2   2
 #define SB_VERSION_3   3
 #define SB_VERSION_4   4
+#define SB_VERSION_5   5
 
 #define SB_FLAG_HAVE_JOURNAL_MAC       (1 << 0)
 #define SB_FLAG_RECALCULATING          (1 << 1) /* V2 only */
 #define SB_FLAG_DIRTY_BITMAP           (1 << 2) /* V3 only */
 #define SB_FLAG_FIXED_PADDING          (1 << 3) /* V4 only */
+#define SB_FLAG_FIXED_HMAC             (1 << 4) /* V5 only */
 
 struct superblock {
        uint8_t magic[8];
index a418a46..42a0c48 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -83,7 +83,7 @@
 #endif
 
 struct crypt_device;
-struct luks2_reenc_context;
+struct luks2_reencrypt;
 
 struct volume_key {
        int id;
@@ -222,8 +222,8 @@ int PLAIN_activate(struct crypt_device *cd,
                     uint32_t flags);
 
 void *crypt_get_hdr(struct crypt_device *cd, const char *type);
-void crypt_set_reenc_context(struct crypt_device *cd, struct luks2_reenc_context *rh);
-struct luks2_reenc_context *crypt_get_reenc_context(struct crypt_device *cd);
+void crypt_set_luks2_reencrypt(struct crypt_device *cd, struct luks2_reencrypt *rh);
+struct luks2_reencrypt *crypt_get_luks2_reencrypt(struct crypt_device *cd);
 
 int onlyLUKS2(struct crypt_device *cd);
 int onlyLUKS2mask(struct crypt_device *cd, uint32_t mask);
@@ -266,4 +266,12 @@ int crypt_compare_dm_devices(struct crypt_device *cd,
                               const struct crypt_dm_active_device *tgt);
 static inline void *crypt_zalloc(size_t size) { return calloc(1, size); }
 
+static inline bool uint64_mult_overflow(uint64_t *u, uint64_t b, size_t size)
+{
+       *u = (uint64_t)b * size;
+       if ((uint64_t)(*u / size) != b)
+               return true;
+       return false;
+}
+
 #endif /* INTERNAL_H */
index bfb0ca1..0c35066 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -652,6 +652,10 @@ uint32_t crypt_get_compatibility(struct crypt_device *cd);
 
 /** dm-integrity device uses less effective (legacy) padding (old kernels) */
 #define CRYPT_COMPAT_LEGACY_INTEGRITY_PADDING (1 << 0)
+/** dm-integrity device does not protect superblock with HMAC (old kernels) */
+#define CRYPT_COMPAT_LEGACY_INTEGRITY_HMAC (1 << 1)
+/** dm-integrity allow recalculating of volumes with HMAC keys (old kernels) */
+#define CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC (1 << 2)
 
 /**
  * Convert to new type for already existing device.
@@ -1103,6 +1107,12 @@ int crypt_keyslot_destroy(struct crypt_device *cd, int keyslot);
 #define CRYPT_ACTIVATE_SUSPENDED (1 << 21)
 /** use IV sector counted in sector_size instead of default 512 bytes sectors */
 #define CRYPT_ACTIVATE_IV_LARGE_SECTORS (1 << 22)
+/** dm-verity: panic_on_corruption flag - panic kernel on corruption */
+#define CRYPT_ACTIVATE_PANIC_ON_CORRUPTION (1 << 23)
+/** dm-crypt: bypass internal workqueue and process read requests synchronously. */
+#define CRYPT_ACTIVATE_NO_READ_WORKQUEUE (1 << 24)
+/** dm-crypt: bypass internal workqueue and process write requests synchronously. */
+#define CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE (1 << 25)
 
 /**
  * Active device runtime attributes
@@ -1479,11 +1489,11 @@ const char *crypt_get_cipher_mode(struct crypt_device *cd);
 const char *crypt_get_uuid(struct crypt_device *cd);
 
 /**
- * Get path to underlaying device.
+ * Get path to underlying device.
  *
  * @param cd crypt device handle
  *
- * @return path to underlaying device name
+ * @return path to underlying device name
  *
  */
 const char *crypt_get_device_name(struct crypt_device *cd);
@@ -1493,7 +1503,7 @@ const char *crypt_get_device_name(struct crypt_device *cd);
  *
  * @param cd crypt device handle
  *
- * @return path to underlaying device name
+ * @return path to underlying device name
  *
  */
 const char *crypt_get_metadata_device_name(struct crypt_device *cd);
@@ -2194,6 +2204,8 @@ int crypt_activate_by_token(struct crypt_device *cd,
 #define CRYPT_REENCRYPT_RESUME_ONLY        (1 << 2)
 /** Run reencryption recovery only. (in) */
 #define CRYPT_REENCRYPT_RECOVERY           (1 << 3)
+/** Reencryption requires metadata protection. (in/out) */
+#define CRYPT_REENCRYPT_REPAIR_NEEDED      (1 << 4)
 
 /**
  * Reencryption direction
@@ -2289,7 +2301,7 @@ int crypt_reencrypt_init_by_keyring(struct crypt_device *cd,
  * Run data reencryption.
  *
  * @param cd crypt device handle
- * @param progress is a callback funtion reporting device \b size,
+ * @param progress is a callback function reporting device \b size,
  * current \b offset of reencryption and provided \b usrptr identification
  *
  * @return @e 0 on success or negative errno value otherwise.
@@ -2330,17 +2342,15 @@ crypt_reencrypt_info crypt_reencrypt_status(struct crypt_device *cd,
  *
  * @param size size of memory in bytes
  *
- * @return pointer to allocate memory or @e NULL.
+ * @return pointer to allocated memory or @e NULL.
  */
 void *crypt_safe_alloc(size_t size);
 
 /**
- * Release safe memory, content is safely wiped
+ * Release safe memory, content is safely wiped.
  * The pointer must be allocated with @link crypt_safe_alloc @endlink
  *
  * @param data pointer to memory to be deallocated
- *
- * @return pointer to allocate memory or @e NULL.
  */
 void crypt_safe_free(void *data);
 
@@ -2350,17 +2360,15 @@ void crypt_safe_free(void *data);
  * @param data pointer to memory to be deallocated
  * @param size new size of memory in bytes
  *
- * @return pointer to allocate memory or @e NULL.
+ * @return pointer to allocated memory or @e NULL.
  */
 void *crypt_safe_realloc(void *data, size_t size);
 
 /**
  * Safe clear memory area (compile should not compile this call out).
  *
- * @param data pointer to memory to cleared
- * @param size new size of memory in bytes
- *
- * @return pointer to allocate memory or @e NULL.
+ * @param data pointer to memory to be cleared
+ * @param size size of memory in bytes
  */
 void crypt_safe_memzero(void *data, size_t size);
 
index a82163b..62e084f 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -33,7 +33,7 @@
 #ifdef HAVE_SYS_SYSMACROS_H
 # include <sys/sysmacros.h>     /* for major, minor */
 #endif
-
+#include <assert.h>
 #include "internal.h"
 
 #define DM_UUID_LEN            129
@@ -174,6 +174,9 @@ static void _dm_set_crypt_compat(struct crypt_device *cd,
        if (_dm_satisfies_version(1, 20, 0, crypt_maj, crypt_min, crypt_patch))
                _dm_flags |= DM_BITLK_ELEPHANT_SUPPORTED;
 
+       if (_dm_satisfies_version(1, 22, 0, crypt_maj, crypt_min, crypt_patch))
+               _dm_flags |= DM_CRYPT_NO_WORKQUEUE_SUPPORTED;
+
        _dm_crypt_checked = true;
 }
 
@@ -205,6 +208,9 @@ static void _dm_set_verity_compat(struct crypt_device *cd,
        if (_dm_satisfies_version(1, 5, 0, verity_maj, verity_min, verity_patch))
                _dm_flags |= DM_VERITY_SIGNATURE_SUPPORTED;
 
+       if (_dm_satisfies_version(1, 7, 0, verity_maj, verity_min, verity_patch))
+               _dm_flags |= DM_VERITY_PANIC_CORRUPTION_SUPPORTED;
+
        _dm_verity_checked = true;
 }
 
@@ -233,6 +239,9 @@ static void _dm_set_integrity_compat(struct crypt_device *cd,
        if (_dm_satisfies_version(1, 6, 0, integrity_maj, integrity_min, integrity_patch))
                _dm_flags |= DM_INTEGRITY_DISCARDS_SUPPORTED;
 
+       if (_dm_satisfies_version(1, 7, 0, integrity_maj, integrity_min, integrity_patch))
+               _dm_flags |= DM_INTEGRITY_FIX_HMAC_SUPPORTED;
+
        _dm_integrity_checked = true;
 }
 
@@ -581,9 +590,14 @@ static int cipher_dm2c(char **org_c, char **org_i, const char *c_dm, const char
 
        i = sscanf(capi, "%" CLENS "[^(](%" CLENS "[^)])", mode, cipher);
        if (i == 2)
-               snprintf(dmcrypt_tmp, sizeof(dmcrypt_tmp), "%s-%s-%s", cipher, mode, iv);
+               i = snprintf(dmcrypt_tmp, sizeof(dmcrypt_tmp), "%s-%s-%s", cipher, mode, iv);
        else
-               snprintf(dmcrypt_tmp, sizeof(dmcrypt_tmp), "%s-%s", capi, iv);
+               i = snprintf(dmcrypt_tmp, sizeof(dmcrypt_tmp), "%s-%s", capi, iv);
+       if (i < 0 || (size_t)i >= sizeof(dmcrypt_tmp)) {
+               free(*org_i);
+               *org_i = NULL;
+               return -EINVAL;
+       }
 
        if (!(*org_c = strdup(dmcrypt_tmp))) {
                free(*org_i);
@@ -594,11 +608,18 @@ static int cipher_dm2c(char **org_c, char **org_i, const char *c_dm, const char
        return 0;
 }
 
+static char *_uf(char *buf, size_t buf_size, const char *s, unsigned u)
+{
+       size_t r = snprintf(buf, buf_size, " %s:%u", s, u);
+       assert(r > 0 && r < buf_size);
+       return buf;
+}
+
 /* https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt */
 static char *get_dm_crypt_params(const struct dm_target *tgt, uint32_t flags)
 {
        int r, max_size, null_cipher = 0, num_options = 0, keystr_len = 0;
-       char *params, *hexkey;
+       char *params = NULL, *hexkey = NULL;
        char sector_feature[32], features[512], integrity_dm[256], cipher_dm[256];
 
        if (!tgt)
@@ -615,47 +636,53 @@ static char *get_dm_crypt_params(const struct dm_target *tgt, uint32_t flags)
                num_options++;
        if (flags & CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)
                num_options++;
+       if (flags & CRYPT_ACTIVATE_NO_READ_WORKQUEUE)
+               num_options++;
+       if (flags & CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE)
+               num_options++;
        if (flags & CRYPT_ACTIVATE_IV_LARGE_SECTORS)
                num_options++;
        if (tgt->u.crypt.integrity)
                num_options++;
-
-       if (tgt->u.crypt.sector_size != SECTOR_SIZE) {
+       if (tgt->u.crypt.sector_size != SECTOR_SIZE)
                num_options++;
-               snprintf(sector_feature, sizeof(sector_feature), " sector_size:%u", tgt->u.crypt.sector_size);
-       } else
-               *sector_feature = '\0';
 
-       if (num_options) {
-               snprintf(features, sizeof(features)-1, " %d%s%s%s%s%s%s", num_options,
+       if (num_options) { /* MAX length  int32 + 15 + 15 + 23 + 18 + 19 + 17 + 13 + int32 + integrity_str */
+               r = snprintf(features, sizeof(features), " %d%s%s%s%s%s%s%s%s", num_options,
                (flags & CRYPT_ACTIVATE_ALLOW_DISCARDS) ? " allow_discards" : "",
                (flags & CRYPT_ACTIVATE_SAME_CPU_CRYPT) ? " same_cpu_crypt" : "",
                (flags & CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS) ? " submit_from_crypt_cpus" : "",
+               (flags & CRYPT_ACTIVATE_NO_READ_WORKQUEUE) ? " no_read_workqueue" : "",
+               (flags & CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE) ? " no_write_workqueue" : "",
                (flags & CRYPT_ACTIVATE_IV_LARGE_SECTORS) ? " iv_large_sectors" : "",
-               sector_feature, integrity_dm);
+               (tgt->u.crypt.sector_size != SECTOR_SIZE) ?
+                       _uf(sector_feature, sizeof(sector_feature), "sector_size", tgt->u.crypt.sector_size) : "",
+               integrity_dm);
+               if (r < 0 || (size_t)r >= sizeof(features))
+                       goto out;
        } else
                *features = '\0';
 
-       if (!strncmp(cipher_dm, "cipher_null-", 12))
+       if (crypt_is_cipher_null(cipher_dm))
                null_cipher = 1;
 
-       if (flags & CRYPT_ACTIVATE_KEYRING_KEY) {
+       if (null_cipher)
+               hexkey = crypt_safe_alloc(2);
+       else if (flags & CRYPT_ACTIVATE_KEYRING_KEY) {
                keystr_len = strlen(tgt->u.crypt.vk->key_description) + int_log10(tgt->u.crypt.vk->keylength) + 10;
                hexkey = crypt_safe_alloc(keystr_len);
        } else
-               hexkey = crypt_safe_alloc(null_cipher ? 2 : (tgt->u.crypt.vk->keylength * 2 + 1));
+               hexkey = crypt_safe_alloc(tgt->u.crypt.vk->keylength * 2 + 1);
 
        if (!hexkey)
-               return NULL;
+               goto out;
 
        if (null_cipher)
                strncpy(hexkey, "-", 2);
        else if (flags & CRYPT_ACTIVATE_KEYRING_KEY) {
                r = snprintf(hexkey, keystr_len, ":%zu:logon:%s", tgt->u.crypt.vk->keylength, tgt->u.crypt.vk->key_description);
-               if (r < 0 || r >= keystr_len) {
-                       params = NULL;
+               if (r < 0 || r >= keystr_len)
                        goto out;
-               }
        } else
                hex_key(hexkey, tgt->u.crypt.vk->keylength, tgt->u.crypt.vk->key);
 
@@ -682,10 +709,10 @@ out:
 /* https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity */
 static char *get_dm_verity_params(const struct dm_target *tgt, uint32_t flags)
 {
-       int max_size, r, num_options = 0;
+       int max_size, max_fec_size, max_verify_size, r, num_options = 0;
        struct crypt_params_verity *vp;
        char *params = NULL, *hexroot = NULL, *hexsalt = NULL;
-       char features[256], fec_features[256], verity_verify_args[512+32];
+       char features[256], *fec_features = NULL, *verity_verify_args = NULL;
 
        if (!tgt || !tgt->u.verity.vp)
                return NULL;
@@ -693,42 +720,63 @@ static char *get_dm_verity_params(const struct dm_target *tgt, uint32_t flags)
        vp = tgt->u.verity.vp;
 
        /* These flags are not compatible */
+       if ((flags & CRYPT_ACTIVATE_RESTART_ON_CORRUPTION) &&
+           (flags & CRYPT_ACTIVATE_PANIC_ON_CORRUPTION))
+               flags &= ~CRYPT_ACTIVATE_RESTART_ON_CORRUPTION;
        if ((flags & CRYPT_ACTIVATE_IGNORE_CORRUPTION) &&
-           (flags & CRYPT_ACTIVATE_RESTART_ON_CORRUPTION))
+           (flags & (CRYPT_ACTIVATE_RESTART_ON_CORRUPTION|CRYPT_ACTIVATE_PANIC_ON_CORRUPTION)))
                flags &= ~CRYPT_ACTIVATE_IGNORE_CORRUPTION;
 
        if (flags & CRYPT_ACTIVATE_IGNORE_CORRUPTION)
                num_options++;
        if (flags & CRYPT_ACTIVATE_RESTART_ON_CORRUPTION)
                num_options++;
+       if (flags & CRYPT_ACTIVATE_PANIC_ON_CORRUPTION)
+               num_options++;
        if (flags & CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS)
                num_options++;
        if (flags & CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE)
                num_options++;
 
-       if (tgt->u.verity.fec_device) {
+       max_fec_size = (tgt->u.verity.fec_device ? strlen(device_block_path(tgt->u.verity.fec_device)) : 0) + 256;
+       fec_features = crypt_safe_alloc(max_fec_size);
+       if (!fec_features)
+               goto out;
+
+       if (tgt->u.verity.fec_device) {  /* MAX length 21 + path + 11 + int64 + 12 + int64 + 11 + int32 */
                num_options += 8;
-               snprintf(fec_features, sizeof(fec_features)-1,
+               r = snprintf(fec_features, max_fec_size,
                         " use_fec_from_device %s fec_start %" PRIu64 " fec_blocks %" PRIu64 " fec_roots %" PRIu32,
                         device_block_path(tgt->u.verity.fec_device), tgt->u.verity.fec_offset,
-                        vp->data_size + tgt->u.verity.hash_blocks, vp->fec_roots);
+                        tgt->u.verity.fec_blocks, vp->fec_roots);
+               if (r < 0 || r >= max_fec_size)
+                       goto out;
        } else
                *fec_features = '\0';
 
-       if (tgt->u.verity.root_hash_sig_key_desc) {
+       max_verify_size = (tgt->u.verity.root_hash_sig_key_desc ? strlen(tgt->u.verity.root_hash_sig_key_desc) : 0) + 32;
+       verity_verify_args = crypt_safe_alloc(max_verify_size);
+       if (!verity_verify_args)
+               goto out;
+       if (tgt->u.verity.root_hash_sig_key_desc) {  /* MAX length 24 + key_str */
                num_options += 2;
-               snprintf(verity_verify_args, sizeof(verity_verify_args)-1,
+               r = snprintf(verity_verify_args, max_verify_size,
                                " root_hash_sig_key_desc %s", tgt->u.verity.root_hash_sig_key_desc);
+               if (r < 0 || r >= max_verify_size)
+                       goto out;
        } else
                *verity_verify_args = '\0';
 
-       if (num_options)
-               snprintf(features, sizeof(features)-1, " %d%s%s%s%s", num_options,
+       if (num_options) {  /* MAX length int32 + 18 + 22 + 20 + 19 + 19 */
+               r = snprintf(features, sizeof(features), " %d%s%s%s%s%s", num_options,
                (flags & CRYPT_ACTIVATE_IGNORE_CORRUPTION) ? " ignore_corruption" : "",
                (flags & CRYPT_ACTIVATE_RESTART_ON_CORRUPTION) ? " restart_on_corruption" : "",
+               (flags & CRYPT_ACTIVATE_PANIC_ON_CORRUPTION) ? " panic_on_corruption" : "",
                (flags & CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS) ? " ignore_zero_blocks" : "",
                (flags & CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE) ? " check_at_most_once" : "");
-       else
+               if (r < 0 || (size_t)r >= sizeof(features))
+                       goto out;
+       } else
                *features = '\0';
 
        hexroot = crypt_safe_alloc(tgt->u.verity.root_hash_size * 2 + 1);
@@ -762,12 +810,13 @@ static char *get_dm_verity_params(const struct dm_target *tgt, uint32_t flags)
                     vp->data_size, tgt->u.verity.hash_offset,
                     vp->hash_name, hexroot, hexsalt, features, fec_features,
                     verity_verify_args);
-
        if (r < 0 || r >= max_size) {
                crypt_safe_free(params);
                params = NULL;
        }
 out:
+       crypt_safe_free(fec_features);
+       crypt_safe_free(verity_verify_args);
        crypt_safe_free(hexroot);
        crypt_safe_free(hexsalt);
        return params;
@@ -775,149 +824,143 @@ out:
 
 static char *get_dm_integrity_params(const struct dm_target *tgt, uint32_t flags)
 {
-       int r, max_size, num_options = 0;
-       char *params, *hexkey, mode;
-       char features[512], feature[256];
+       int r, max_size, max_integrity, max_journal_integrity, max_journal_crypt, num_options = 0;
+       char *params_out = NULL, *params, *hexkey, mode, feature[6][32];
+       char *features, *integrity, *journal_integrity, *journal_crypt;
 
        if (!tgt)
                return NULL;
 
+       max_integrity = (tgt->u.integrity.integrity && tgt->u.integrity.vk ? tgt->u.integrity.vk->keylength * 2 : 0) +
+               (tgt->u.integrity.integrity ? strlen(tgt->u.integrity.integrity) : 0) + 32;
+       max_journal_integrity = (tgt->u.integrity.journal_integrity && tgt->u.integrity.journal_integrity_key ?
+               tgt->u.integrity.journal_integrity_key->keylength * 2 : 0) +
+               (tgt->u.integrity.journal_integrity ? strlen(tgt->u.integrity.journal_integrity) : 0) + 32;
+       max_journal_crypt = (tgt->u.integrity.journal_crypt && tgt->u.integrity.journal_crypt_key ?
+               tgt->u.integrity.journal_crypt_key->keylength * 2 : 0) +
+               (tgt->u.integrity.journal_crypt ? strlen(tgt->u.integrity.journal_crypt) : 0) + 32;
        max_size = strlen(device_block_path(tgt->data_device)) +
-                       (tgt->u.integrity.meta_device ? strlen(device_block_path(tgt->u.integrity.meta_device)) : 0) +
-                       (tgt->u.integrity.vk ? tgt->u.integrity.vk->keylength * 2 : 0) +
-                       (tgt->u.integrity.journal_integrity_key ? tgt->u.integrity.journal_integrity_key->keylength * 2 : 0) +
-                       (tgt->u.integrity.journal_crypt_key ? tgt->u.integrity.journal_crypt_key->keylength * 2 : 0) +
-                       (tgt->u.integrity.integrity ? strlen(tgt->u.integrity.integrity) : 0) +
-                       (tgt->u.integrity.journal_integrity ? strlen(tgt->u.integrity.journal_integrity) : 0) +
-                       (tgt->u.integrity.journal_crypt ? strlen(tgt->u.integrity.journal_crypt) : 0) + 128;
+               (tgt->u.integrity.meta_device ? strlen(device_block_path(tgt->u.integrity.meta_device)) : 0) +
+               max_integrity + max_journal_integrity + max_journal_crypt + 512;
 
        params = crypt_safe_alloc(max_size);
-       if (!params)
-               return NULL;
+       features = crypt_safe_alloc(max_size);
+       integrity = crypt_safe_alloc(max_integrity);
+       journal_integrity = crypt_safe_alloc(max_journal_integrity);
+       journal_crypt = crypt_safe_alloc(max_journal_crypt);
+       if (!params || !features || !integrity || !journal_integrity || !journal_crypt)
+               goto out;
 
-       *features = '\0';
-       if (tgt->u.integrity.journal_size) {
-               num_options++;
-               snprintf(feature, sizeof(feature), "journal_sectors:%u ",
-                        (unsigned)(tgt->u.integrity.journal_size / SECTOR_SIZE));
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.journal_watermark) {
-               num_options++;
-               snprintf(feature, sizeof(feature),
-                        /* bitmap overloaded values */
-                        (flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP) ? "sectors_per_bit:%u " : "journal_watermark:%u ",
-                        tgt->u.integrity.journal_watermark);
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.journal_commit_time) {
-               num_options++;
-               snprintf(feature, sizeof(feature),
-                        /* bitmap overloaded values */
-                        (flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP) ? "bitmap_flush_interval:%u " : "commit_time:%u ",
-                        tgt->u.integrity.journal_commit_time);
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.interleave_sectors) {
-               num_options++;
-               snprintf(feature, sizeof(feature), "interleave_sectors:%u ",
-                        tgt->u.integrity.interleave_sectors);
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.sector_size) {
-               num_options++;
-               snprintf(feature, sizeof(feature), "block_size:%u ",
-                        tgt->u.integrity.sector_size);
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.buffer_sectors) {
-               num_options++;
-               snprintf(feature, sizeof(feature), "buffer_sectors:%u ",
-                        tgt->u.integrity.buffer_sectors);
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-       if (tgt->u.integrity.integrity) {
+       if (tgt->u.integrity.integrity) { /* MAX length 16 + str_integrity +  str_key */
                num_options++;
 
                if (tgt->u.integrity.vk) {
                        hexkey = crypt_safe_alloc(tgt->u.integrity.vk->keylength * 2 + 1);
-                       if (!hexkey) {
-                               crypt_safe_free(params);
-                               return NULL;
-                       }
+                       if (!hexkey)
+                               goto out;
                        hex_key(hexkey, tgt->u.integrity.vk->keylength, tgt->u.integrity.vk->key);
                } else
                        hexkey = NULL;
 
-               snprintf(feature, sizeof(feature), "internal_hash:%s%s%s ",
+               r = snprintf(integrity, max_integrity, " internal_hash:%s%s%s",
                         tgt->u.integrity.integrity, hexkey ? ":" : "", hexkey ?: "");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
                crypt_safe_free(hexkey);
+               if (r < 0 || r >= max_integrity)
+                       goto out;
        }
 
-       if (tgt->u.integrity.journal_integrity) {
+       if (tgt->u.integrity.journal_integrity) { /* MAX length 14 + str_journal_integrity + str_key */
                num_options++;
 
                if (tgt->u.integrity.journal_integrity_key) {
                        hexkey = crypt_safe_alloc(tgt->u.integrity.journal_integrity_key->keylength * 2 + 1);
-                       if (!hexkey) {
-                               crypt_safe_free(params);
-                               return NULL;
-                       }
+                       if (!hexkey)
+                               goto out;
                        hex_key(hexkey, tgt->u.integrity.journal_integrity_key->keylength,
                                tgt->u.integrity.journal_integrity_key->key);
                } else
                        hexkey = NULL;
 
-               snprintf(feature, sizeof(feature), "journal_mac:%s%s%s ",
+               r = snprintf(journal_integrity, max_journal_integrity, " journal_mac:%s%s%s",
                         tgt->u.integrity.journal_integrity, hexkey ? ":" : "", hexkey ?: "");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
                crypt_safe_free(hexkey);
+               if (r < 0 || r >= max_journal_integrity)
+                       goto out;
        }
 
-       if (tgt->u.integrity.journal_crypt) {
+       if (tgt->u.integrity.journal_crypt) { /* MAX length 15 + str_journal_crypt + str_key */
                num_options++;
 
                if (tgt->u.integrity.journal_crypt_key) {
                        hexkey = crypt_safe_alloc(tgt->u.integrity.journal_crypt_key->keylength * 2 + 1);
-                       if (!hexkey) {
-                               crypt_safe_free(params);
-                               return NULL;
-                       }
+                       if (!hexkey)
+                               goto out;
                        hex_key(hexkey, tgt->u.integrity.journal_crypt_key->keylength,
                                tgt->u.integrity.journal_crypt_key->key);
                } else
                        hexkey = NULL;
 
-               snprintf(feature, sizeof(feature), "journal_crypt:%s%s%s ",
+               r = snprintf(journal_crypt, max_journal_crypt, " journal_crypt:%s%s%s",
                         tgt->u.integrity.journal_crypt, hexkey ? ":" : "", hexkey ?: "");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
                crypt_safe_free(hexkey);
-       }
-       if (tgt->u.integrity.fix_padding) {
-               num_options++;
-               snprintf(feature, sizeof(feature), "fix_padding ");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
+               if (r < 0 || r >= max_journal_crypt)
+                       goto out;
        }
 
-       if (flags & CRYPT_ACTIVATE_RECALCULATE) {
+       if (tgt->u.integrity.journal_size)
                num_options++;
-               snprintf(feature, sizeof(feature), "recalculate ");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-
-       if (flags & CRYPT_ACTIVATE_ALLOW_DISCARDS) {
+       if (tgt->u.integrity.journal_watermark)
                num_options++;
-               snprintf(feature, sizeof(feature), "allow_discards ");
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
-
-       if (tgt->u.integrity.meta_device) {
+       if (tgt->u.integrity.journal_commit_time)
+               num_options++;
+       if (tgt->u.integrity.interleave_sectors)
+               num_options++;
+       if (tgt->u.integrity.sector_size)
+               num_options++;
+       if (tgt->u.integrity.buffer_sectors)
+               num_options++;
+       if (tgt->u.integrity.fix_padding)
+               num_options++;
+       if (tgt->u.integrity.fix_hmac)
+               num_options++;
+       if (tgt->u.integrity.legacy_recalc)
+               num_options++;
+       if (tgt->u.integrity.meta_device)
+               num_options++;
+       if (flags & CRYPT_ACTIVATE_RECALCULATE)
+               num_options++;
+       if (flags & CRYPT_ACTIVATE_ALLOW_DISCARDS)
                num_options++;
-               snprintf(feature, sizeof(feature), "meta_device:%s ",
-                        device_block_path(tgt->u.integrity.meta_device));
-               strncat(features, feature, sizeof(features) - strlen(features) - 1);
-       }
+
+       r = snprintf(features, max_size, "%d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", num_options,
+               tgt->u.integrity.journal_size ? _uf(feature[0], sizeof(feature[0]), /* MAX length 17 + int32 */
+                       "journal_sectors", (unsigned)(tgt->u.integrity.journal_size / SECTOR_SIZE)) : "",
+               tgt->u.integrity.journal_watermark ? _uf(feature[1], sizeof(feature[1]), /* MAX length 19 + int32 */
+                        /* bitmap overloaded values */
+                        (flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP) ? "sectors_per_bit" : "journal_watermark",
+                        tgt->u.integrity.journal_watermark) : "",
+               tgt->u.integrity.journal_commit_time ? _uf(feature[2], sizeof(feature[2]), /* MAX length 23 + int32 */
+                        /* bitmap overloaded values */
+                        (flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP) ? "bitmap_flush_interval" : "commit_time",
+                        tgt->u.integrity.journal_commit_time) : "",
+               tgt->u.integrity.interleave_sectors ? _uf(feature[3], sizeof(feature[3]), /* MAX length 20 + int32 */
+                       "interleave_sectors", tgt->u.integrity.interleave_sectors) : "",
+               tgt->u.integrity.sector_size ? _uf(feature[4], sizeof(feature[4]), /* MAX length 12 + int32 */
+                       "block_size", tgt->u.integrity.sector_size) : "",
+               tgt->u.integrity.buffer_sectors ? _uf(feature[5], sizeof(feature[5]), /* MAX length 16 + int32 */
+                       "buffer_sectors", tgt->u.integrity.buffer_sectors) : "",
+               tgt->u.integrity.integrity ? integrity : "",
+               tgt->u.integrity.journal_integrity ? journal_integrity : "",
+               tgt->u.integrity.journal_crypt ? journal_crypt : "",
+               tgt->u.integrity.fix_padding ?  " fix_padding" : "", /* MAX length 12 */
+               tgt->u.integrity.fix_hmac ?  " fix_hmac" : "", /* MAX length 9 */
+               tgt->u.integrity.legacy_recalc ? " legacy_recalculate" : "", /* MAX length 19 */
+               flags & CRYPT_ACTIVATE_RECALCULATE ? " recalculate" : "", /* MAX length 12 */
+               flags & CRYPT_ACTIVATE_ALLOW_DISCARDS ? " allow_discards" : "", /* MAX length 15 */
+               tgt->u.integrity.meta_device ? " meta_device:" : "", /* MAX length 13 + str_device */
+               tgt->u.integrity.meta_device ? device_block_path(tgt->u.integrity.meta_device) : "");
+       if (r < 0 || r >= max_size)
+               goto out;
 
        if (flags & CRYPT_ACTIVATE_NO_JOURNAL_BITMAP)
                mode = 'B';
@@ -928,16 +971,22 @@ static char *get_dm_integrity_params(const struct dm_target *tgt, uint32_t flags
        else
                mode = 'J';
 
-       r = snprintf(params, max_size, "%s %" PRIu64 " %d %c %d %s",
+       r = snprintf(params, max_size, "%s %" PRIu64 " %d %c %s",
                     device_block_path(tgt->data_device), tgt->u.integrity.offset,
-                    tgt->u.integrity.tag_size, mode,
-                    num_options, *features ? features : "");
-       if (r < 0 || r >= max_size) {
+                    tgt->u.integrity.tag_size, mode, features);
+       if (r < 0 || r >= max_size)
+               goto out;
+
+       params_out = params;
+out:
+       crypt_safe_free(features);
+       crypt_safe_free(integrity);
+       crypt_safe_free(journal_integrity);
+       crypt_safe_free(journal_crypt);
+       if (!params_out)
                crypt_safe_free(params);
-               params = NULL;
-       }
 
-       return params;
+       return params_out;
 }
 
 static char *get_dm_linear_params(const struct dm_target *tgt, uint32_t flags)
@@ -1172,7 +1221,7 @@ static int dm_prepare_uuid(struct crypt_device *cd, const char *name, const char
 {
        char *ptr, uuid2[UUID_LEN] = {0};
        uuid_t uu;
-       unsigned i = 0;
+       int i = 0;
 
        /* Remove '-' chars */
        if (uuid) {
@@ -1192,9 +1241,11 @@ static int dm_prepare_uuid(struct crypt_device *cd, const char *name, const char
                type ?: "", type ? "-" : "",
                uuid2[0] ? uuid2 : "", uuid2[0] ? "-" : "",
                name);
+       if (i < 0)
+               return 0;
 
        log_dbg(cd, "DM-UUID is %s", buf);
-       if (i >= buflen)
+       if ((size_t)i >= buflen)
                log_err(cd, _("DM-UUID for device %s was truncated."), name);
 
        return 1;
@@ -1305,6 +1356,12 @@ err:
        return r;
 }
 
+static bool dm_device_exists(struct crypt_device *cd, const char *name)
+{
+       int r = dm_status_device(cd, name);
+       return (r >= 0 || r == -EEXIST);
+}
+
 static int _dm_create_device(struct crypt_device *cd, const char *name, const char *type,
                             const char *uuid, struct crypt_dm_active_device *dmd)
 {
@@ -1354,8 +1411,11 @@ static int _dm_create_device(struct crypt_device *cd, const char *name, const ch
        if (_dm_use_udev() && !_dm_task_set_cookie(dmt, &cookie, udev_flags))
                goto out;
 
-       if (!dm_task_run(dmt))
+       if (!dm_task_run(dmt)) {
+               if (dm_device_exists(cd, name))
+                       r = -EEXIST;
                goto out;
+       }
 
        if (dm_task_get_info(dmt, &dmi))
                r = 0;
@@ -1592,6 +1652,14 @@ static int check_retry(struct crypt_device *cd, uint32_t *dmd_flags, uint32_t dm
                ret = 1;
        }
 
+       /* Drop no workqueue options if not supported */
+       if ((*dmd_flags & (CRYPT_ACTIVATE_NO_READ_WORKQUEUE | CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE)) &&
+           !(dmt_flags & DM_CRYPT_NO_WORKQUEUE_SUPPORTED)) {
+               log_dbg(cd, "dm-crypt does not support performance options");
+               *dmd_flags = *dmd_flags & ~(CRYPT_ACTIVATE_NO_READ_WORKQUEUE | CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE);
+               ret = 1;
+       }
+
        return ret;
 }
 
@@ -1614,14 +1682,29 @@ int dm_create_device(struct crypt_device *cd, const char *name,
                goto out;
 
        if (r && (dmd->segment.type == DM_CRYPT || dmd->segment.type == DM_LINEAR || dmd->segment.type == DM_ZERO) &&
-               check_retry(cd, &dmd->flags, dmt_flags))
+               check_retry(cd, &dmd->flags, dmt_flags)) {
+               log_dbg(cd, "Retrying open without incompatible options.");
                r = _dm_create_device(cd, name, type, dmd->uuid, dmd);
+       }
+
+       /*
+        * Print warning if activating dm-crypt cipher_null device unless it's reencryption helper or
+        * keyslot encryption helper device (LUKS1 cipher_null devices).
+        */
+       if (!r && !(dmd->flags & CRYPT_ACTIVATE_PRIVATE) && single_segment(dmd) && dmd->segment.type == DM_CRYPT &&
+           crypt_is_cipher_null(dmd->segment.u.crypt.cipher))
+               log_dbg(cd, "Activated dm-crypt device with cipher_null. Device is not encrypted.");
 
        if (r == -EINVAL &&
            dmd->flags & (CRYPT_ACTIVATE_SAME_CPU_CRYPT|CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS) &&
            !(dmt_flags & (DM_SAME_CPU_CRYPT_SUPPORTED|DM_SUBMIT_FROM_CRYPT_CPUS_SUPPORTED)))
                log_err(cd, _("Requested dm-crypt performance options are not supported."));
 
+       if (r == -EINVAL &&
+           dmd->flags & (CRYPT_ACTIVATE_NO_READ_WORKQUEUE | CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE) &&
+           !(dmt_flags & DM_CRYPT_NO_WORKQUEUE_SUPPORTED))
+               log_err(cd, _("Requested dm-crypt performance options are not supported."));
+
        if (r == -EINVAL && dmd->flags & (CRYPT_ACTIVATE_IGNORE_CORRUPTION|
                                          CRYPT_ACTIVATE_RESTART_ON_CORRUPTION|
                                          CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS|
@@ -1629,6 +1712,10 @@ int dm_create_device(struct crypt_device *cd, const char *name,
            !(dmt_flags & DM_VERITY_ON_CORRUPTION_SUPPORTED))
                log_err(cd, _("Requested dm-verity data corruption handling options are not supported."));
 
+       if (r == -EINVAL && dmd->flags & CRYPT_ACTIVATE_PANIC_ON_CORRUPTION &&
+           !(dmt_flags & DM_VERITY_PANIC_CORRUPTION_SUPPORTED))
+               log_err(cd, _("Requested dm-verity data corruption handling options are not supported."));
+
        if (r == -EINVAL && dmd->segment.type == DM_VERITY &&
            dmd->segment.u.verity.fec_device && !(dmt_flags & DM_VERITY_FEC_SUPPORTED))
                log_err(cd, _("Requested dm-verity FEC options are not supported."));
@@ -1675,7 +1762,10 @@ int dm_reload_device(struct crypt_device *cd, const char *name,
 
        if (r == -EINVAL && (dmd->segment.type == DM_CRYPT || dmd->segment.type == DM_LINEAR)) {
                if ((dmd->flags & (CRYPT_ACTIVATE_SAME_CPU_CRYPT|CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS)) &&
-           !dm_flags(cd, DM_CRYPT, &dmt_flags) && !(dmt_flags & (DM_SAME_CPU_CRYPT_SUPPORTED|DM_SUBMIT_FROM_CRYPT_CPUS_SUPPORTED)))
+                   !dm_flags(cd, DM_CRYPT, &dmt_flags) && !(dmt_flags & (DM_SAME_CPU_CRYPT_SUPPORTED | DM_SUBMIT_FROM_CRYPT_CPUS_SUPPORTED)))
+                       log_err(cd, _("Requested dm-crypt performance options are not supported."));
+               if ((dmd->flags & (CRYPT_ACTIVATE_NO_READ_WORKQUEUE | CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE)) &&
+                   !dm_flags(cd, DM_CRYPT, &dmt_flags) && !(dmt_flags & DM_CRYPT_NO_WORKQUEUE_SUPPORTED))
                        log_err(cd, _("Requested dm-crypt performance options are not supported."));
                if ((dmd->flags & CRYPT_ACTIVATE_ALLOW_DISCARDS) &&
                    !dm_flags(cd, DM_CRYPT, &dmt_flags) && !(dmt_flags & DM_DISCARDS_SUPPORTED))
@@ -1720,6 +1810,7 @@ static int dm_status_dmi(const char *name, struct dm_info *dmi,
                goto out;
        }
 
+       r = -EEXIST;
        dm_get_next_target(dmt, NULL, &start, &length,
                           &target_type, &params);
 
@@ -1918,6 +2009,10 @@ static int _dm_target_query_crypt(struct crypt_device *cd, uint32_t get_flags,
                                *act_flags |= CRYPT_ACTIVATE_SAME_CPU_CRYPT;
                        else if (!strcasecmp(arg, "submit_from_crypt_cpus"))
                                *act_flags |= CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS;
+                       else if (!strcasecmp(arg, "no_read_workqueue"))
+                               *act_flags |= CRYPT_ACTIVATE_NO_READ_WORKQUEUE;
+                       else if (!strcasecmp(arg, "no_write_workqueue"))
+                               *act_flags |= CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE;
                        else if (!strcasecmp(arg, "iv_large_sectors"))
                                *act_flags |= CRYPT_ACTIVATE_IV_LARGE_SECTORS;
                        else if (sscanf(arg, "integrity:%u:", &val) == 1) {
@@ -2168,6 +2263,8 @@ static int _dm_target_query_verity(struct crypt_device *cd,
                                *act_flags |= CRYPT_ACTIVATE_IGNORE_CORRUPTION;
                        else if (!strcasecmp(arg, "restart_on_corruption"))
                                *act_flags |= CRYPT_ACTIVATE_RESTART_ON_CORRUPTION;
+                       else if (!strcasecmp(arg, "panic_on_corruption"))
+                               *act_flags |= CRYPT_ACTIVATE_PANIC_ON_CORRUPTION;
                        else if (!strcasecmp(arg, "ignore_zero_blocks"))
                                *act_flags |= CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS;
                        else if (!strcasecmp(arg, "check_at_most_once"))
@@ -2213,8 +2310,13 @@ static int _dm_target_query_verity(struct crypt_device *cd,
                                str = strsep(&params, " ");
                                if (!str)
                                        goto err;
-                               if (!root_hash_sig_key_desc)
+                               if (!root_hash_sig_key_desc) {
                                        root_hash_sig_key_desc = strdup(str);
+                                       if (!root_hash_sig_key_desc) {
+                                               r = -ENOMEM;
+                                               goto err;
+                                       }
+                               }
                                i++;
                                if (vp)
                                        vp->flags |= CRYPT_VERITY_ROOT_HASH_SIGNATURE;
@@ -2418,6 +2520,10 @@ static int _dm_target_query_integrity(struct crypt_device *cd,
                                *act_flags |= CRYPT_ACTIVATE_RECALCULATE;
                        } else if (!strcmp(arg, "fix_padding")) {
                                tgt->u.integrity.fix_padding = true;
+                       } else if (!strcmp(arg, "fix_hmac")) {
+                               tgt->u.integrity.fix_hmac = true;
+                       } else if (!strcmp(arg, "legacy_recalculate")) {
+                               tgt->u.integrity.legacy_recalc = true;
                        } else if (!strcmp(arg, "allow_discards")) {
                                *act_flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS;
                        } else /* unknown option */
@@ -2857,7 +2963,9 @@ int dm_resume_and_reinstate_key(struct crypt_device *cd, const char *name,
        if (!(dmt_flags & DM_KEY_WIPE_SUPPORTED))
                goto out;
 
-       if (vk->key_description)
+       if (!vk->keylength)
+               msg_size = 11; // key set -
+       else if (vk->key_description)
                msg_size = strlen(vk->key_description) + int_log10(vk->keylength) + 18;
        else
                msg_size = vk->keylength * 2 + 10; // key set <key>
@@ -2869,7 +2977,9 @@ int dm_resume_and_reinstate_key(struct crypt_device *cd, const char *name,
        }
 
        strcpy(msg, "key set ");
-       if (vk->key_description)
+       if (!vk->keylength)
+               snprintf(msg + 8, msg_size - 8, "-");
+       else if (vk->key_description)
                snprintf(msg + 8, msg_size - 8, ":%zu:logon:%s", vk->keylength, vk->key_description);
        else
                hex_key(&msg[8], vk->keylength, vk->key);
@@ -2944,8 +3054,8 @@ err:
 
 int dm_verity_target_set(struct dm_target *tgt, uint64_t seg_offset, uint64_t seg_size,
        struct device *data_device, struct device *hash_device, struct device *fec_device,
-       const char *root_hash, uint32_t root_hash_size, const char *root_hash_sig_key_desc,
-       uint64_t hash_offset_block, uint64_t hash_blocks, struct crypt_params_verity *vp)
+       const char *root_hash, uint32_t root_hash_size, const charroot_hash_sig_key_desc,
+       uint64_t hash_offset_block, uint64_t fec_blocks, struct crypt_params_verity *vp)
 {
        if (!data_device || !hash_device || !vp)
                return -EINVAL;
@@ -2963,7 +3073,7 @@ int dm_verity_target_set(struct dm_target *tgt, uint64_t seg_offset, uint64_t se
        tgt->u.verity.root_hash_sig_key_desc = root_hash_sig_key_desc;
        tgt->u.verity.hash_offset = hash_offset_block;
        tgt->u.verity.fec_offset = vp->fec_area_offset / vp->hash_block_size;
-       tgt->u.verity.hash_blocks = hash_blocks;
+       tgt->u.verity.fec_blocks = fec_blocks;
        tgt->u.verity.vp = vp;
 
        return 0;
@@ -3004,6 +3114,15 @@ int dm_integrity_target_set(struct crypt_device *cd,
            !(crypt_get_compatibility(cd) & CRYPT_COMPAT_LEGACY_INTEGRITY_PADDING))
                tgt->u.integrity.fix_padding = true;
 
+       if (!dm_flags(cd, DM_INTEGRITY, &dmi_flags) &&
+           (dmi_flags & DM_INTEGRITY_FIX_HMAC_SUPPORTED) &&
+           !(crypt_get_compatibility(cd) & CRYPT_COMPAT_LEGACY_INTEGRITY_HMAC))
+               tgt->u.integrity.fix_hmac = true;
+
+       /* This flag can be backported, just try to set it always */
+       if (crypt_get_compatibility(cd) & CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC)
+               tgt->u.integrity.legacy_recalc = true;
+
        if (ip) {
                tgt->u.integrity.journal_size = ip->journal_size;
                tgt->u.integrity.journal_watermark = ip->journal_watermark;
index 92090aa..e281fc8 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * loop-AES compatible volume handling
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2011-2020 Milan Broz
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 5f6e93f..e538d19 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * loop-AES compatible volume handling
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2011-2020 Milan Broz
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index a781376..3aa319d 100644 (file)
@@ -2,7 +2,7 @@
  * AFsplitter - Anti forensic information splitter
  *
  * Copyright (C) 2004 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
  *
  * AFsplitter diffuses information over a large stripe of data,
  * therefore supporting secure data destruction.
index 06ba522..e63de3e 100644 (file)
@@ -2,7 +2,7 @@
  * AFsplitter - Anti forensic information splitter
  *
  * Copyright (C) 2004 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
  *
  * AFsplitter diffuses information over a large stripe of data,
  * therefore supporting secure data destruction.
index fdab63a..e7a3836 100644 (file)
@@ -2,8 +2,8 @@
  * LUKS - Linux Unified Key Setup
  *
  * Copyright (C) 2004-2006 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -153,7 +153,7 @@ int LUKS_encrypt_to_storage(char *src, size_t srcLength,
                return -EINVAL;
 
        /* Encrypt buffer */
-       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength);
+       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength, false);
 
        if (r)
                log_dbg(ctx, "Userspace crypto wrapper cannot use %s-%s (%d).",
@@ -218,7 +218,7 @@ int LUKS_decrypt_from_storage(char *dst, size_t dstLength,
        if (MISALIGNED_512(dstLength))
                return -EINVAL;
 
-       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength);
+       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength, false);
 
        if (r)
                log_dbg(ctx, "Userspace crypto wrapper cannot use %s-%s (%d).",
index a08ff50..180407e 100644 (file)
@@ -2,8 +2,8 @@
  * LUKS - Linux Unified Key Setup
  *
  * Copyright (C) 2004-2006 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2013-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2013-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -375,8 +375,13 @@ static int _keyslot_repair(struct luks_phdr *phdr, struct crypt_device *ctx)
                log_err(ctx, _("Non standard key size, manual repair required."));
                return -EINVAL;
        }
-       /* cryptsetup 1.0 did not align to 4k, cannot repair this one */
-       if (LUKS_keyslots_offset(phdr) < (LUKS_ALIGN_KEYSLOTS / SECTOR_SIZE)) {
+
+       /*
+        * cryptsetup 1.0 did not align keyslots to 4k, cannot repair this one
+        * Also we cannot trust possibly broken keyslots metadata here through LUKS_keyslots_offset().
+        * Expect first keyslot is aligned, if not, then manual repair is neccessary.
+        */
+       if (phdr->keyblock[0].keyMaterialOffset < (LUKS_ALIGN_KEYSLOTS / SECTOR_SIZE)) {
                log_err(ctx, _("Non standard keyslots alignment, manual repair required."));
                return -EINVAL;
        }
@@ -386,6 +391,8 @@ static int _keyslot_repair(struct luks_phdr *phdr, struct crypt_device *ctx)
                return -EINVAL;
 
        vk = crypt_alloc_volume_key(phdr->keyBytes, NULL);
+       if (!vk)
+               return -ENOMEM;
 
        log_verbose(ctx, _("Repairing keyslots."));
 
@@ -955,12 +962,12 @@ static int LUKS_open_key(unsigned int keyIndex,
                  const char *password,
                  size_t passwordLen,
                  struct luks_phdr *hdr,
-                 struct volume_key *vk,
+                 struct volume_key **vk,
                  struct crypt_device *ctx)
 {
        crypt_keyslot_info ki = LUKS_keyslot_info(hdr, keyIndex);
        struct volume_key *derived_key;
-       char *AfKey;
+       char *AfKey = NULL;
        size_t AFEKSize;
        int r;
 
@@ -974,8 +981,13 @@ static int LUKS_open_key(unsigned int keyIndex,
        if (!derived_key)
                return -ENOMEM;
 
-       assert(vk->keylength == hdr->keyBytes);
-       AFEKSize = AF_split_sectors(vk->keylength, hdr->keyblock[keyIndex].stripes) * SECTOR_SIZE;
+       *vk = crypt_alloc_volume_key(hdr->keyBytes, NULL);
+       if (!*vk) {
+               r = -ENOMEM;
+               goto out;
+       }
+
+       AFEKSize = AF_split_sectors(hdr->keyBytes, hdr->keyblock[keyIndex].stripes) * SECTOR_SIZE;
        AfKey = crypt_safe_alloc(AFEKSize);
        if (!AfKey) {
                r = -ENOMEM;
@@ -1001,16 +1013,20 @@ static int LUKS_open_key(unsigned int keyIndex,
        if (r < 0)
                goto out;
 
-       r = AF_merge(ctx, AfKey, vk->key, vk->keylength, hdr->keyblock[keyIndex].stripes, hdr->hashSpec);
+       r = AF_merge(ctx, AfKey, (*vk)->key, (*vk)->keylength, hdr->keyblock[keyIndex].stripes, hdr->hashSpec);
        if (r < 0)
                goto out;
 
-       r = LUKS_verify_volume_key(hdr, vk);
+       r = LUKS_verify_volume_key(hdr, *vk);
 
        /* Allow only empty passphrase with null cipher */
-       if (!r && !strcmp(hdr->cipherName, "cipher_null") && passwordLen)
+       if (!r && crypt_is_cipher_null(hdr->cipherName) && passwordLen)
                r = -EPERM;
 out:
+       if (r < 0) {
+               crypt_free_volume_key(*vk);
+               *vk = NULL;
+       }
        crypt_safe_free(AfKey);
        crypt_free_volume_key(derived_key);
        return r;
@@ -1026,16 +1042,14 @@ int LUKS_open_key_with_hdr(int keyIndex,
        unsigned int i, tried = 0;
        int r;
 
-       *vk = crypt_alloc_volume_key(hdr->keyBytes, NULL);
-
        if (keyIndex >= 0) {
-               r = LUKS_open_key(keyIndex, password, passwordLen, hdr, *vk, ctx);
+               r = LUKS_open_key(keyIndex, password, passwordLen, hdr, vk, ctx);
                return (r < 0) ? r : keyIndex;
        }
 
        for (i = 0; i < LUKS_NUMKEYS; i++) {
-               r = LUKS_open_key(i, password, passwordLen, hdr, *vk, ctx);
-               if(r == 0)
+               r = LUKS_open_key(i, password, passwordLen, hdr, vk, ctx);
+               if (r == 0)
                        return i;
 
                /* Do not retry for errors that are no -EPERM or -ENOENT,
index d54276e..2b5132a 100644 (file)
@@ -2,7 +2,7 @@
  * LUKS - Linux Unified Key Setup
  *
  * Copyright (C) 2004-2006 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 6ab753a..158c023 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -23,6 +23,8 @@
 #define _CRYPTSETUP_LUKS2_ONDISK_H
 
 #include <stdbool.h>
+#include <stdint.h>
+#include <sys/types.h>
 
 #include "libcryptsetup.h"
 
 #define LUKS2_REENCRYPT_MAX_HOTZONE_LENGTH 0x40000000
 
 struct device;
+struct luks2_reencrypt;
+struct crypt_lock_handle;
+struct crypt_dm_active_device;
+struct luks_phdr; /* LUKS1 for conversion */
 
 /*
  * LUKS2 header on-disk.
@@ -94,7 +100,6 @@ struct luks2_hdr_disk {
 /*
  * LUKS2 header in-memory.
  */
-typedef struct json_object json_object;
 struct luks2_hdr {
        size_t          hdr_size;
        uint64_t        seqid;
@@ -105,7 +110,7 @@ struct luks2_hdr {
        uint8_t         salt1[LUKS2_SALT_L];
        uint8_t         salt2[LUKS2_SALT_L];
        char            uuid[LUKS2_UUID_L];
-       json_object     *jobj;
+       void            *jobj;
 };
 
 struct luks2_keyslot_params {
@@ -127,77 +132,6 @@ struct luks2_keyslot_params {
        } area;
 };
 
-struct reenc_protection {
-       enum { REENC_PROTECTION_NONE = 0, /* none should be 0 always */
-              REENC_PROTECTION_CHECKSUM,
-              REENC_PROTECTION_JOURNAL,
-               REENC_PROTECTION_DATASHIFT } type;
-
-       union {
-       struct {
-       } none;
-       struct {
-               char hash[LUKS2_CHECKSUM_ALG_L]; // or include luks.h
-               struct crypt_hash *ch;
-               size_t hash_size;
-               /* buffer for checksums */
-               void *checksums;
-               size_t checksums_len;
-       } csum;
-       struct {
-       } ds;
-       } p;
-};
-
-struct luks2_reenc_context {
-       /* reencryption window attributes */
-       uint64_t offset;
-       uint64_t progress;
-       uint64_t length;
-       uint64_t data_shift;
-       size_t alignment;
-       uint64_t device_size;
-       bool online;
-       bool fixed_length;
-       crypt_reencrypt_direction_info direction;
-       crypt_reencrypt_mode_info mode;
-
-       char *device_name;
-       char *hotzone_name;
-       char *overlay_name;
-       uint32_t flags;
-
-       /* reencryption window persistence attributes */
-       struct reenc_protection rp;
-
-       int reenc_keyslot;
-
-       /* already running reencryption */
-       json_object *jobj_segs_hot;
-       json_object *jobj_segs_post;
-
-       /* backup segments */
-       json_object *jobj_segment_new;
-       int digest_new;
-       json_object *jobj_segment_old;
-       int digest_old;
-       json_object *jobj_segment_moved;
-
-       struct volume_key *vks;
-
-       void *reenc_buffer;
-       ssize_t read;
-
-       struct crypt_storage_wrapper *cw1;
-       struct crypt_storage_wrapper *cw2;
-
-       uint32_t wflags1;
-       uint32_t wflags2;
-
-       struct crypt_lock_handle *reenc_lock;
-};
-
-crypt_reencrypt_info LUKS2_reenc_status(struct luks2_hdr *hdr);
 /*
  * Supportable header sizes (hdr_disk + JSON area)
  * Also used as offset for the 2nd header.
@@ -220,9 +154,6 @@ crypt_reencrypt_info LUKS2_reenc_status(struct luks2_hdr *hdr);
 int LUKS2_hdr_version_unlocked(struct crypt_device *cd,
        const char *backup_file);
 
-int LUKS2_device_write_lock(struct crypt_device *cd,
-       struct luks2_hdr *hdr, struct device *device);
-
 int LUKS2_hdr_read(struct crypt_device *cd, struct luks2_hdr *hdr, int repair);
 int LUKS2_hdr_write(struct crypt_device *cd, struct luks2_hdr *hdr);
 int LUKS2_hdr_write_force(struct crypt_device *cd, struct luks2_hdr *hdr);
@@ -247,9 +178,9 @@ int LUKS2_hdr_restore(struct crypt_device *cd,
                      struct luks2_hdr *hdr,
                      const char *backup_file);
 
-uint64_t LUKS2_hdr_and_areas_size(json_object *jobj);
-uint64_t LUKS2_keyslots_size(json_object *jobj);
-uint64_t LUKS2_metadata_size(json_object *jobj);
+uint64_t LUKS2_hdr_and_areas_size(struct luks2_hdr *hdr);
+uint64_t LUKS2_keyslots_size(struct luks2_hdr *hdr);
+uint64_t LUKS2_metadata_size(struct luks2_hdr *hdr);
 
 int LUKS2_keyslot_cipher_incompatible(struct crypt_device *cd, const char *cipher_spec);
 
@@ -278,28 +209,11 @@ int LUKS2_keyslot_store(struct crypt_device *cd,
        const struct volume_key *vk,
        const struct luks2_keyslot_params *params);
 
-int LUKS2_keyslot_reencrypt_store(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       int keyslot,
-       const void *buffer,
-       size_t buffer_length);
-
-int LUKS2_keyslot_reencrypt_create(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       int keyslot,
-       const struct crypt_params_reencrypt *params);
-
-int reenc_keyslot_update(struct crypt_device *cd,
-       const struct luks2_reenc_context *rh);
-
 int LUKS2_keyslot_wipe(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int keyslot,
        int wipe_area_only);
 
-int LUKS2_keyslot_dump(struct crypt_device *cd,
-       int keyslot);
-
 crypt_keyslot_priority LUKS2_keyslot_priority_get(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int keyslot);
@@ -330,6 +244,12 @@ int LUKS2_token_is_assigned(struct crypt_device *cd,
        int keyslot,
        int token);
 
+int LUKS2_token_assignment_copy(struct crypt_device *cd,
+                       struct luks2_hdr *hdr,
+                       int keyslot_from,
+                       int keyslot_to,
+                       int commit);
+
 int LUKS2_token_create(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int token,
@@ -366,65 +286,6 @@ int LUKS2_token_open_and_activate_any(struct crypt_device *cd,
        const char *name,
        uint32_t flags);
 
-int LUKS2_tokens_count(struct luks2_hdr *hdr);
-
-/*
- * Generic LUKS2 segment
- */
-uint64_t json_segment_get_offset(json_object *jobj_segment, unsigned blockwise);
-const char *json_segment_type(json_object *jobj_segment);
-uint64_t json_segment_get_iv_offset(json_object *jobj_segment);
-uint64_t json_segment_get_size(json_object *jobj_segment, unsigned blockwise);
-const char *json_segment_get_cipher(json_object *jobj_segment);
-int json_segment_get_sector_size(json_object *jobj_segment);
-bool json_segment_is_backup(json_object *jobj_segment);
-json_object *json_segments_get_segment(json_object *jobj_segments, int segment);
-unsigned json_segments_count(json_object *jobj_segments);
-void json_segment_remove_flag(json_object *jobj_segment, const char *flag);
-uint64_t json_segments_get_minimal_offset(json_object *jobj_segments, unsigned blockwise);
-json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length, unsigned reencryption);
-json_object *json_segment_create_crypt(uint64_t offset, uint64_t iv_offset, const uint64_t *length, const char *cipher, uint32_t sector_size, unsigned reencryption);
-int json_segments_segment_in_reencrypt(json_object *jobj_segments);
-
-int LUKS2_segments_count(struct luks2_hdr *hdr);
-
-int LUKS2_segment_first_unused_id(struct luks2_hdr *hdr);
-
-int LUKS2_segment_set_flag(json_object *jobj_segment, const char *flag);
-
-json_object *LUKS2_get_segment_by_flag(struct luks2_hdr *hdr, const char *flag);
-
-int LUKS2_get_segment_id_by_flag(struct luks2_hdr *hdr, const char *flag);
-
-int LUKS2_segments_set(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       json_object *jobj_segments,
-       int commit);
-
-uint64_t LUKS2_segment_offset(struct luks2_hdr *hdr,
-       int segment,
-       unsigned blockwise);
-
-uint64_t LUKS2_segment_size(struct luks2_hdr *hdr,
-       int segment,
-       unsigned blockwise);
-
-int LUKS2_segment_is_type(struct luks2_hdr *hdr,
-       int segment,
-       const char *type);
-
-int LUKS2_segment_by_type(struct luks2_hdr *hdr,
-       const char *type);
-
-int LUKS2_last_segment_by_type(struct luks2_hdr *hdr,
-       const char *type);
-
-int LUKS2_get_default_segment(struct luks2_hdr *hdr);
-
-int LUKS2_reencrypt_digest_new(struct luks2_hdr *hdr);
-int LUKS2_reencrypt_digest_old(struct luks2_hdr *hdr);
-int LUKS2_reencrypt_data_offset(struct luks2_hdr *hdr, bool blockwise);
-
 /*
  * Generic LUKS2 digest
  */
@@ -432,29 +293,16 @@ int LUKS2_digest_any_matching(struct crypt_device *cd,
                struct luks2_hdr *hdr,
                const struct volume_key *vk);
 
-int LUKS2_digest_by_segment(struct luks2_hdr *hdr, int segment);
-
-int LUKS2_digest_verify_by_digest(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       int digest,
-       const struct volume_key *vk);
-
 int LUKS2_digest_verify_by_segment(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int segment,
        const struct volume_key *vk);
 
-void LUKS2_digests_erase_unused(struct crypt_device *cd,
-       struct luks2_hdr *hdr);
-
 int LUKS2_digest_verify(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        const struct volume_key *vk,
        int keyslot);
 
-int LUKS2_digest_dump(struct crypt_device *cd,
-       int digest);
-
 int LUKS2_digest_assign(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int keyslot,
@@ -471,6 +319,8 @@ int LUKS2_digest_segment_assign(struct crypt_device *cd,
 
 int LUKS2_digest_by_keyslot(struct luks2_hdr *hdr, int keyslot);
 
+int LUKS2_digest_by_segment(struct luks2_hdr *hdr, int segment);
+
 int LUKS2_digest_create(struct crypt_device *cd,
        const char *type,
        struct luks2_hdr *hdr,
@@ -490,20 +340,12 @@ int LUKS2_activate_multi(struct crypt_device *cd,
        uint64_t device_size,
        uint32_t flags);
 
-struct crypt_dm_active_device;
-
 int LUKS2_deactivate(struct crypt_device *cd,
        const char *name,
        struct luks2_hdr *hdr,
        struct crypt_dm_active_device *dmd,
        uint32_t flags);
 
-int LUKS2_reload(struct crypt_device *cd,
-       const char *name,
-       struct volume_key *vks,
-       uint64_t device_size,
-       uint32_t flags);
-
 int LUKS2_generate_hdr(
        struct crypt_device *cd,
        struct luks2_hdr *hdr,
@@ -523,7 +365,7 @@ int LUKS2_check_metadata_area_size(uint64_t metadata_size);
 int LUKS2_check_keyslots_area_size(uint64_t keyslots_size);
 
 int LUKS2_wipe_header_areas(struct crypt_device *cd,
-       struct luks2_hdr *hdr);
+       struct luks2_hdr *hdr, bool detached_header);
 
 uint64_t LUKS2_get_data_offset(struct luks2_hdr *hdr);
 int LUKS2_get_data_size(struct luks2_hdr *hdr, uint64_t *size, bool *dynamic);
@@ -537,17 +379,12 @@ int LUKS2_get_keyslot_stored_key_size(struct luks2_hdr *hdr, int keyslot);
 const char *LUKS2_get_keyslot_cipher(struct luks2_hdr *hdr, int keyslot, size_t *key_size);
 int LUKS2_keyslot_find_empty(struct luks2_hdr *hdr);
 int LUKS2_keyslot_active_count(struct luks2_hdr *hdr, int segment);
-int LUKS2_keyslot_for_segment(struct luks2_hdr *hdr, int keyslot, int segment);
-int LUKS2_find_keyslot(struct luks2_hdr *hdr, const char *type);
 crypt_keyslot_info LUKS2_keyslot_info(struct luks2_hdr *hdr, int keyslot);
 int LUKS2_keyslot_area(struct luks2_hdr *hdr,
        int keyslot,
        uint64_t *offset,
        uint64_t *length);
 int LUKS2_keyslot_pbkdf(struct luks2_hdr *hdr, int keyslot, struct crypt_pbkdf_type *pbkdf);
-int LUKS2_set_keyslots_size(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       uint64_t data_offset);
 
 /*
  * Permanent activation flags stored in header
@@ -561,6 +398,8 @@ int LUKS2_config_set_flags(struct crypt_device *cd, struct luks2_hdr *hdr, uint3
 int LUKS2_config_get_requirements(struct crypt_device *cd, struct luks2_hdr *hdr, uint32_t *reqs);
 int LUKS2_config_set_requirements(struct crypt_device *cd, struct luks2_hdr *hdr, uint32_t reqs, bool commit);
 
+int LUKS2_config_get_reencrypt_version(struct luks2_hdr *hdr, uint32_t *version);
+
 int LUKS2_unmet_requirements(struct crypt_device *cd, struct luks2_hdr *hdr, uint32_t reqs_mask, int quiet);
 
 int LUKS2_key_description_by_segment(struct crypt_device *cd,
@@ -570,7 +409,6 @@ int LUKS2_volume_key_load_in_keyring_by_keyslot(struct crypt_device *cd,
 int LUKS2_volume_key_load_in_keyring_by_digest(struct crypt_device *cd,
                struct luks2_hdr *hdr, struct volume_key *vk, int digest);
 
-struct luks_phdr;
 int LUKS2_luks1_to_luks2(struct crypt_device *cd,
                         struct luks_phdr *hdr1,
                         struct luks2_hdr *hdr2);
@@ -589,21 +427,33 @@ int LUKS2_reencrypt_locked_recovery_by_passphrase(struct crypt_device *cd,
        uint32_t flags,
        struct volume_key **vks);
 
-void LUKS2_reenc_context_free(struct crypt_device *cd, struct luks2_reenc_context *rh);
+void LUKS2_reencrypt_free(struct crypt_device *cd,
+       struct luks2_reencrypt *rh);
 
-int LUKS2_assembly_multisegment_dmd(struct crypt_device *cd,
-       struct luks2_hdr *hdr,
-       struct volume_key *vks,
-       json_object *jobj_segments,
-       struct crypt_dm_active_device *dmd);
+crypt_reencrypt_info LUKS2_reencrypt_status(struct luks2_hdr *hdr);
 
-crypt_reencrypt_info LUKS2_reencrypt_status(struct crypt_device *cd,
+crypt_reencrypt_info LUKS2_reencrypt_get_params(struct luks2_hdr *hdr,
        struct crypt_params_reencrypt *params);
 
-int crypt_reencrypt_lock(struct crypt_device *cd, struct crypt_lock_handle **reencrypt_lock);
-int crypt_reencrypt_lock_by_dm_uuid(struct crypt_device *cd, const char *dm_uuid, struct crypt_lock_handle **reencrypt_lock);
-void crypt_reencrypt_unlock(struct crypt_device *cd, struct crypt_lock_handle *reencrypt_lock);
+int LUKS2_reencrypt_lock(struct crypt_device *cd,
+       struct crypt_lock_handle **reencrypt_lock);
 
-int luks2_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr, uint64_t check_size, uint64_t *dev_size, bool activation, bool dynamic);
+int LUKS2_reencrypt_lock_by_dm_uuid(struct crypt_device *cd,
+       const char *dm_uuid,
+       struct crypt_lock_handle **reencrypt_lock);
+
+void LUKS2_reencrypt_unlock(struct crypt_device *cd,
+       struct crypt_lock_handle *reencrypt_lock);
+
+int LUKS2_reencrypt_check_device_size(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       uint64_t check_size,
+       uint64_t *dev_size,
+       bool activation,
+       bool dynamic);
+
+int LUKS2_reencrypt_digest_verify(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks);
 
 #endif
index 94b3abf..6845a6b 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, digest handling
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -219,7 +219,9 @@ static int assign_one_digest(struct crypt_device *cd, struct luks2_hdr *hdr,
        if (!jobj_digest_keyslots)
                return -EINVAL;
 
-       snprintf(num, sizeof(num), "%d", keyslot);
+       if (snprintf(num, sizeof(num), "%d", keyslot) < 0)
+               return -EINVAL;
+
        if (assign) {
                jobj1 = LUKS2_array_jobj(jobj_digest_keyslots, num);
                if (!jobj1)
@@ -304,7 +306,9 @@ static int assign_one_segment(struct crypt_device *cd, struct luks2_hdr *hdr,
        if (!jobj_digest_segments)
                return -EINVAL;
 
-       snprintf(num, sizeof(num), "%d", segment);
+       if (snprintf(num, sizeof(num), "%d", segment) < 0)
+               return -EINVAL;
+
        if (assign) {
                jobj1 = LUKS2_array_jobj(jobj_digest_segments, num);
                if (!jobj1)
index bf1e4f9..03c6f49 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, PBKDF2 digest handler (LUKS1 compatible)
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 9654cdb..3f6b3ae 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -175,13 +175,13 @@ static void hdr_to_disk(struct luks2_hdr *hdr,
        hdr_disk->hdr_offset  = cpu_to_be64(offset);
        hdr_disk->seqid       = cpu_to_be64(hdr->seqid);
 
-       strncpy(hdr_disk->label, hdr->label, LUKS2_LABEL_L);
+       memcpy(hdr_disk->label, hdr->label, MIN(strlen(hdr->label), LUKS2_LABEL_L));
        hdr_disk->label[LUKS2_LABEL_L - 1] = '\0';
-       strncpy(hdr_disk->subsystem, hdr->subsystem, LUKS2_LABEL_L);
+       memcpy(hdr_disk->subsystem, hdr->subsystem, MIN(strlen(hdr->subsystem), LUKS2_LABEL_L));
        hdr_disk->subsystem[LUKS2_LABEL_L - 1] = '\0';
-       strncpy(hdr_disk->checksum_alg, hdr->checksum_alg, LUKS2_CHECKSUM_ALG_L);
+       memcpy(hdr_disk->checksum_alg, hdr->checksum_alg, MIN(strlen(hdr->checksum_alg), LUKS2_CHECKSUM_ALG_L));
        hdr_disk->checksum_alg[LUKS2_CHECKSUM_ALG_L - 1] = '\0';
-       strncpy(hdr_disk->uuid, hdr->uuid, LUKS2_UUID_L);
+       memcpy(hdr_disk->uuid, hdr->uuid, MIN(strlen(hdr->uuid), LUKS2_UUID_L));
        hdr_disk->uuid[LUKS2_UUID_L - 1] = '\0';
 
        memcpy(hdr_disk->salt, secondary ? hdr->salt2 : hdr->salt1, LUKS2_SALT_L);
@@ -385,7 +385,7 @@ int LUKS2_device_write_lock(struct crypt_device *cd, struct luks2_hdr *hdr, stru
        }
 
        /* run sequence id check only on first write lock (r == 1) and w/o LUKS2 reencryption in-progress */
-       if (r == 1 && !crypt_get_reenc_context(cd)) {
+       if (r == 1 && !crypt_get_luks2_reencrypt(cd)) {
                log_dbg(cd, "Checking context sequence id matches value stored on disk.");
                if (LUKS2_check_sequence_id(cd, hdr, device)) {
                        device_write_unlock(cd, device);
@@ -413,7 +413,7 @@ int LUKS2_disk_hdr_write(struct crypt_device *cd, struct luks2_hdr *hdr, struct
                return -EINVAL;
        }
 
-       r = device_check_size(cd, crypt_metadata_device(cd), LUKS2_hdr_and_areas_size(hdr->jobj), 1);
+       r = device_check_size(cd, crypt_metadata_device(cd), LUKS2_hdr_and_areas_size(hdr), 1);
        if (r)
                return r;
 
@@ -669,9 +669,9 @@ int LUKS2_disk_hdr_read(struct crypt_device *cd, struct luks2_hdr *hdr,
 
        /* check header with keyslots to fit the device */
        if (state_hdr1 == HDR_OK)
-               hdr_size = LUKS2_hdr_and_areas_size(jobj_hdr1);
+               hdr_size = LUKS2_hdr_and_areas_size_jobj(jobj_hdr1);
        else if (state_hdr2 == HDR_OK)
-               hdr_size = LUKS2_hdr_and_areas_size(jobj_hdr2);
+               hdr_size = LUKS2_hdr_and_areas_size_jobj(jobj_hdr2);
        else {
                r = (state_hdr1 == HDR_FAIL_IO && state_hdr2 == HDR_FAIL_IO) ? -EIO : -EINVAL;
                goto err;
index a5bcb1f..7527c19 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -44,6 +44,8 @@ int LUKS2_disk_hdr_read(struct crypt_device *cd, struct luks2_hdr *hdr,
                        struct device *device, int do_recovery, int do_blkprobe);
 int LUKS2_disk_hdr_write(struct crypt_device *cd, struct luks2_hdr *hdr,
                         struct device *device, bool seqid_check);
+int LUKS2_device_write_lock(struct crypt_device *cd,
+       struct luks2_hdr *hdr, struct device *device);
 
 /*
  * JSON struct access helpers
@@ -92,8 +94,8 @@ void LUKS2_keyslots_repair(struct crypt_device *cd, json_object *jobj_hdr);
 /*
  * JSON array helpers
  */
-struct json_object *LUKS2_array_jobj(struct json_object *array, const char *num);
-struct json_object *LUKS2_array_remove(struct json_object *array, const char *num);
+json_object *LUKS2_array_jobj(json_object *array, const char *num);
+json_object *LUKS2_array_remove(json_object *array, const char *num);
 
 /*
  * Plugins API
@@ -184,6 +186,8 @@ int LUKS2_find_area_gap(struct crypt_device *cd, struct luks2_hdr *hdr,
 int LUKS2_find_area_max_gap(struct crypt_device *cd, struct luks2_hdr *hdr,
                            uint64_t *area_offset, uint64_t *area_length);
 
+uint64_t LUKS2_hdr_and_areas_size_jobj(json_object *jobj);
+
 int LUKS2_check_cipher(struct crypt_device *cd,
                      size_t keylength,
                      const char *cipher,
@@ -200,4 +204,127 @@ static inline const char *crypt_reencrypt_mode_to_str(crypt_reencrypt_mode_info
        return "<unknown>";
 }
 
+/*
+ * Generic LUKS2 keyslot
+ */
+int LUKS2_keyslot_reencrypt_store(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       int keyslot,
+       const void *buffer,
+       size_t buffer_length);
+
+int LUKS2_keyslot_reencrypt_allocate(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       int keyslot,
+       const struct crypt_params_reencrypt *params);
+
+int LUKS2_keyslot_reencrypt_digest_create(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks);
+
+int LUKS2_keyslot_dump(struct crypt_device *cd,
+       int keyslot);
+
+int LUKS2_keyslot_jobj_area(json_object *jobj_keyslot, uint64_t *offset, uint64_t *length);
+
+/* JSON helpers */
+uint64_t json_segment_get_offset(json_object *jobj_segment, unsigned blockwise);
+const char *json_segment_type(json_object *jobj_segment);
+uint64_t json_segment_get_iv_offset(json_object *jobj_segment);
+uint64_t json_segment_get_size(json_object *jobj_segment, unsigned blockwise);
+const char *json_segment_get_cipher(json_object *jobj_segment);
+int json_segment_get_sector_size(json_object *jobj_segment);
+bool json_segment_is_backup(json_object *jobj_segment);
+json_object *json_segments_get_segment(json_object *jobj_segments, int segment);
+unsigned json_segments_count(json_object *jobj_segments);
+void json_segment_remove_flag(json_object *jobj_segment, const char *flag);
+uint64_t json_segments_get_minimal_offset(json_object *jobj_segments, unsigned blockwise);
+json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length, unsigned reencryption);
+json_object *json_segment_create_crypt(uint64_t offset, uint64_t iv_offset, const uint64_t *length, const char *cipher, uint32_t sector_size, unsigned reencryption);
+int json_segments_segment_in_reencrypt(json_object *jobj_segments);
+bool json_segment_cmp(json_object *jobj_segment_1, json_object *jobj_segment_2);
+bool json_segment_contains_flag(json_object *jobj_segment, const char *flag_str, size_t len);
+
+int LUKS2_assembly_multisegment_dmd(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks,
+       json_object *jobj_segments,
+       struct crypt_dm_active_device *dmd);
+
+/*
+ * Generic LUKS2 segment
+ */
+int LUKS2_segments_count(struct luks2_hdr *hdr);
+
+int LUKS2_segment_first_unused_id(struct luks2_hdr *hdr);
+
+int LUKS2_segment_set_flag(json_object *jobj_segment, const char *flag);
+
+json_object *LUKS2_get_segment_by_flag(struct luks2_hdr *hdr, const char *flag);
+
+int LUKS2_get_segment_id_by_flag(struct luks2_hdr *hdr, const char *flag);
+
+int LUKS2_segments_set(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       json_object *jobj_segments,
+       int commit);
+
+uint64_t LUKS2_segment_offset(struct luks2_hdr *hdr,
+       int segment,
+       unsigned blockwise);
+
+uint64_t LUKS2_segment_size(struct luks2_hdr *hdr,
+       int segment,
+       unsigned blockwise);
+
+int LUKS2_segment_is_type(struct luks2_hdr *hdr,
+       int segment,
+       const char *type);
+
+int LUKS2_segment_by_type(struct luks2_hdr *hdr,
+       const char *type);
+
+int LUKS2_last_segment_by_type(struct luks2_hdr *hdr,
+       const char *type);
+
+int LUKS2_get_default_segment(struct luks2_hdr *hdr);
+
+int LUKS2_reencrypt_digest_new(struct luks2_hdr *hdr);
+int LUKS2_reencrypt_digest_old(struct luks2_hdr *hdr);
+int LUKS2_reencrypt_data_offset(struct luks2_hdr *hdr, bool blockwise);
+
+/*
+ * Generic LUKS2 digest
+ */
+int LUKS2_digest_verify_by_digest(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       int digest,
+       const struct volume_key *vk);
+
+void LUKS2_digests_erase_unused(struct crypt_device *cd,
+       struct luks2_hdr *hdr);
+
+int LUKS2_digest_dump(struct crypt_device *cd,
+       int digest);
+
+/*
+ * Generic LUKS2 token
+ */
+int LUKS2_tokens_count(struct luks2_hdr *hdr);
+
+/*
+ * LUKS2 generic
+ */
+int LUKS2_reload(struct crypt_device *cd,
+       const char *name,
+       struct volume_key *vks,
+       uint64_t device_size,
+       uint32_t flags);
+
+int LUKS2_keyslot_for_segment(struct luks2_hdr *hdr, int keyslot, int segment);
+int LUKS2_find_keyslot(struct luks2_hdr *hdr, const char *type);
+int LUKS2_set_keyslots_size(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       uint64_t data_offset);
+
 #endif
index 1416766..1540910 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, LUKS2 header format code
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -41,7 +41,7 @@ static size_t get_min_offset(struct luks2_hdr *hdr)
 
 static size_t get_max_offset(struct luks2_hdr *hdr)
 {
-       return LUKS2_hdr_and_areas_size(hdr->jobj);
+       return LUKS2_hdr_and_areas_size(hdr);
 }
 
 int LUKS2_find_area_max_gap(struct crypt_device *cd, struct luks2_hdr *hdr,
@@ -216,7 +216,7 @@ int LUKS2_generate_hdr(
        struct json_object *jobj_segment, *jobj_integrity, *jobj_keyslots, *jobj_segments, *jobj_config;
        char cipher[128];
        uuid_t partitionUuid;
-       int digest;
+       int r, digest;
        uint64_t mdev_size;
 
        if (!metadata_size)
@@ -244,7 +244,8 @@ int LUKS2_generate_hdr(
                /* Decrease keyslots_size due to metadata device being too small */
                if (!device_size(crypt_metadata_device(cd), &mdev_size) &&
                    ((keyslots_size + get_min_offset(hdr)) > mdev_size) &&
-                   device_fallocate(crypt_metadata_device(cd), keyslots_size + get_min_offset(hdr)))
+                   device_fallocate(crypt_metadata_device(cd), keyslots_size + get_min_offset(hdr)) &&
+                   (get_min_offset(hdr) <= mdev_size))
                        keyslots_size = mdev_size - get_min_offset(hdr);
        }
 
@@ -289,9 +290,11 @@ int LUKS2_generate_hdr(
        uuid_unparse(partitionUuid, hdr->uuid);
 
        if (*cipherMode != '\0')
-               snprintf(cipher, sizeof(cipher), "%s-%s", cipherName, cipherMode);
+               r = snprintf(cipher, sizeof(cipher), "%s-%s", cipherName, cipherMode);
        else
-               snprintf(cipher, sizeof(cipher), "%s", cipherName);
+               r = snprintf(cipher, sizeof(cipher), "%s", cipherName);
+       if (r < 0 || (size_t)r >= sizeof(cipher))
+               return -EINVAL;
 
        hdr->jobj = json_object_new_object();
 
@@ -337,7 +340,7 @@ err:
 }
 
 int LUKS2_wipe_header_areas(struct crypt_device *cd,
-       struct luks2_hdr *hdr)
+       struct luks2_hdr *hdr, bool detached_header)
 {
        int r;
        uint64_t offset, length;
@@ -352,7 +355,7 @@ int LUKS2_wipe_header_areas(struct crypt_device *cd,
                return -EINVAL;
 
        /* On detached header wipe at least the first 4k */
-       if (length == 0) {
+       if (detached_header) {
                length = 4096;
                wipe_block = 4096;
        }
@@ -368,7 +371,7 @@ int LUKS2_wipe_header_areas(struct crypt_device *cd,
        /* Wipe keyslot area */
        wipe_block = 1024 * 1024;
        offset = get_min_offset(hdr);
-       length = LUKS2_keyslots_size(hdr->jobj);
+       length = LUKS2_keyslots_size(hdr);
 
        log_dbg(cd, "Wiping keyslots area (0x%06" PRIx64 " - 0x%06" PRIx64") with random data.",
                offset, length + offset);
index e346067..8469257 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * LUKS - Linux Unified Key Setup v2
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
- * Copyright (C) 2015-2020 Ondrej Kozina
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
+ * Copyright (C) 2015-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -591,12 +591,84 @@ static bool validate_segment_intervals(struct crypt_device *cd,
        return true;
 }
 
+static int reqs_unknown(uint32_t reqs)
+{
+       return reqs & CRYPT_REQUIREMENT_UNKNOWN;
+}
+
+static int reqs_reencrypt(uint32_t reqs)
+{
+       return reqs & CRYPT_REQUIREMENT_OFFLINE_REENCRYPT;
+}
+
+static int reqs_reencrypt_online(uint32_t reqs)
+{
+       return reqs & CRYPT_REQUIREMENT_ONLINE_REENCRYPT;
+}
+
+/*
+ * Config section requirements object must be valid.
+ * Also general segments section must be validated first.
+ */
+static int validate_reencrypt_segments(struct crypt_device *cd, json_object *hdr_jobj, json_object *jobj_segments, int first_backup, int segments_count)
+{
+       json_object *jobj, *jobj_backup_previous = NULL, *jobj_backup_final = NULL;
+       uint32_t reqs;
+       int i, r;
+       struct luks2_hdr dummy = {
+               .jobj = hdr_jobj
+       };
+
+       r = LUKS2_config_get_requirements(cd, &dummy, &reqs);
+       if (r)
+               return 1;
+
+       if (reqs_reencrypt_online(reqs)) {
+               for (i = first_backup; i < segments_count; i++) {
+                       jobj = json_segments_get_segment(jobj_segments, i);
+                       if (!jobj)
+                               return 1;
+                       if (json_segment_contains_flag(jobj, "backup-final", 0))
+                               jobj_backup_final = jobj;
+                       else if (json_segment_contains_flag(jobj, "backup-previous", 0))
+                               jobj_backup_previous = jobj;
+               }
+
+               if (!jobj_backup_final || !jobj_backup_previous) {
+                       log_dbg(cd, "Backup segment is missing.");
+                       return 1;
+               }
+
+               for (i = 0; i < first_backup; i++) {
+                       jobj = json_segments_get_segment(jobj_segments, i);
+                       if (!jobj)
+                               return 1;
+
+                       if (json_segment_contains_flag(jobj, "in-reencryption", 0)) {
+                               if (!json_segment_cmp(jobj, jobj_backup_final)) {
+                                       log_dbg(cd, "Segment in reencryption does not match backup final segment.");
+                                       return 1;
+                               }
+                               continue;
+                       }
+
+                       if (!json_segment_cmp(jobj, jobj_backup_final) &&
+                           !json_segment_cmp(jobj, jobj_backup_previous)) {
+                               log_dbg(cd, "Segment does not match neither backup final or backup previous segment.");
+                               return 1;
+                       }
+               }
+       }
+
+       return 0;
+}
+
 static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj)
 {
        json_object *jobj_segments, *jobj_digests, *jobj_offset, *jobj_size, *jobj_type, *jobj_flags, *jobj;
-       struct interval *intervals;
        uint64_t offset, size;
        int i, r, count, first_backup = -1;
+       struct interval *intervals = NULL;
 
        if (!json_object_object_get_ex(hdr_jobj, "segments", &jobj_segments)) {
                log_dbg(cd, "Missing segments section.");
@@ -676,10 +748,18 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj)
                return 1;
        }
 
+       /* avoid needlessly large allocation when first backup segment is invalid */
+       if (first_backup >= count) {
+               log_dbg(cd, "Gap between last regular segment and backup segment at key %d.", first_backup);
+               return 1;
+       }
+
        if (first_backup < 0)
                first_backup = count;
 
-       intervals = malloc(first_backup * sizeof(*intervals));
+       if ((size_t)first_backup < SIZE_MAX / sizeof(*intervals))
+               intervals = malloc(first_backup * sizeof(*intervals));
+
        if (!intervals) {
                log_dbg(cd, "Not enough memory.");
                return 1;
@@ -709,10 +789,10 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj)
                }
        }
 
-       return 0;
+       return validate_reencrypt_segments(cd, hdr_jobj, jobj_segments, first_backup, count);
 }
 
-uint64_t LUKS2_metadata_size(json_object *jobj)
+static uint64_t LUKS2_metadata_size_jobj(json_object *jobj)
 {
        json_object *jobj1, *jobj2;
        uint64_t json_size;
@@ -724,6 +804,11 @@ uint64_t LUKS2_metadata_size(json_object *jobj)
        return json_size + LUKS2_HDR_BIN_LEN;
 }
 
+uint64_t LUKS2_metadata_size(struct luks2_hdr *hdr)
+{
+       return LUKS2_metadata_size_jobj(hdr->jobj);
+}
+
 static int hdr_validate_areas(struct crypt_device *cd, json_object *hdr_jobj)
 {
        struct interval *intervals;
@@ -739,7 +824,7 @@ static int hdr_validate_areas(struct crypt_device *cd, json_object *hdr_jobj)
                return 1;
 
        /* config is already validated */
-       metadata_size = LUKS2_metadata_size(hdr_jobj);
+       metadata_size = LUKS2_metadata_size_jobj(hdr_jobj);
 
        length = json_object_object_length(jobj_keyslots);
 
@@ -785,7 +870,7 @@ static int hdr_validate_areas(struct crypt_device *cd, json_object *hdr_jobj)
                return 1;
        }
 
-       ret = validate_intervals(cd, length, intervals, metadata_size, LUKS2_hdr_and_areas_size(hdr_jobj)) ? 0 : 1;
+       ret = validate_intervals(cd, length, intervals, metadata_size, LUKS2_hdr_and_areas_size_jobj(hdr_jobj)) ? 0 : 1;
 
        free(intervals);
 
@@ -827,9 +912,10 @@ static int hdr_validate_digests(struct crypt_device *cd, json_object *hdr_jobj)
        return 0;
 }
 
+/* requirements being validated in stand-alone routine */
 static int hdr_validate_config(struct crypt_device *cd, json_object *hdr_jobj)
 {
-       json_object *jobj_config, *jobj, *jobj1;
+       json_object *jobj_config, *jobj;
        int i;
        uint64_t keyslots_size, metadata_size, segment_offset;
 
@@ -884,6 +970,19 @@ static int hdr_validate_config(struct crypt_device *cd, json_object *hdr_jobj)
                                return 1;
        }
 
+       return 0;
+}
+
+static int hdr_validate_requirements(struct crypt_device *cd, json_object *hdr_jobj)
+{
+       int i;
+       json_object *jobj_config, *jobj, *jobj1;
+
+       if (!json_object_object_get_ex(hdr_jobj, "config", &jobj_config)) {
+               log_dbg(cd, "Missing config section.");
+               return 1;
+       }
+
        /* Requirements object is optional */
        if (json_object_object_get_ex(jobj_config, "requirements", &jobj)) {
                if (!json_contains(cd, jobj_config, "section", "Config", "requirements", json_type_object))
@@ -909,6 +1008,7 @@ int LUKS2_hdr_validate(struct crypt_device *cd, json_object *hdr_jobj, uint64_t
        struct {
                int (*validate)(struct crypt_device *, json_object *);
        } checks[] = {
+               { hdr_validate_requirements },
                { hdr_validate_tokens   },
                { hdr_validate_digests  },
                { hdr_validate_segments },
@@ -1033,7 +1133,7 @@ void LUKS2_hdr_free(struct crypt_device *cd, struct luks2_hdr *hdr)
                log_dbg(cd, "LUKS2 header still in use");
 }
 
-uint64_t LUKS2_keyslots_size(json_object *jobj)
+static uint64_t LUKS2_keyslots_size_jobj(json_object *jobj)
 {
        json_object *jobj1, *jobj2;
        uint64_t keyslots_size;
@@ -1045,9 +1145,19 @@ uint64_t LUKS2_keyslots_size(json_object *jobj)
        return keyslots_size;
 }
 
-uint64_t LUKS2_hdr_and_areas_size(json_object *jobj)
+uint64_t LUKS2_keyslots_size(struct luks2_hdr *hdr)
 {
-       return 2 * LUKS2_metadata_size(jobj) + LUKS2_keyslots_size(jobj);
+       return LUKS2_keyslots_size_jobj(hdr->jobj);
+}
+
+uint64_t LUKS2_hdr_and_areas_size_jobj(json_object *jobj)
+{
+       return 2 * LUKS2_metadata_size_jobj(jobj) + LUKS2_keyslots_size_jobj(jobj);
+}
+
+uint64_t LUKS2_hdr_and_areas_size(struct luks2_hdr *hdr)
+{
+       return LUKS2_hdr_and_areas_size_jobj(hdr->jobj);
 }
 
 int LUKS2_hdr_backup(struct crypt_device *cd, struct luks2_hdr *hdr,
@@ -1059,7 +1169,7 @@ int LUKS2_hdr_backup(struct crypt_device *cd, struct luks2_hdr *hdr,
        ssize_t ret, buffer_size;
        char *buffer = NULL;
 
-       hdr_size = LUKS2_hdr_and_areas_size(hdr->jobj);
+       hdr_size = LUKS2_hdr_and_areas_size(hdr);
        buffer_size = size_round_up(hdr_size, crypt_getpagesize());
 
        buffer = crypt_safe_alloc(buffer_size);
@@ -1115,21 +1225,6 @@ int LUKS2_hdr_backup(struct crypt_device *cd, struct luks2_hdr *hdr,
        return r;
 }
 
-static int reqs_unknown(uint32_t reqs)
-{
-       return reqs & CRYPT_REQUIREMENT_UNKNOWN;
-}
-
-static int reqs_reencrypt(uint32_t reqs)
-{
-       return reqs & CRYPT_REQUIREMENT_OFFLINE_REENCRYPT;
-}
-
-static int reqs_reencrypt_online(uint32_t reqs)
-{
-       return reqs & CRYPT_REQUIREMENT_ONLINE_REENCRYPT;
-}
-
 int LUKS2_hdr_restore(struct crypt_device *cd, struct luks2_hdr *hdr,
                     const char *backup_file)
 {
@@ -1170,7 +1265,7 @@ int LUKS2_hdr_restore(struct crypt_device *cd, struct luks2_hdr *hdr,
                goto out;
        }
 
-       buffer_size = LUKS2_hdr_and_areas_size(hdr_file.jobj);
+       buffer_size = LUKS2_hdr_and_areas_size(&hdr_file);
        buffer = crypt_safe_alloc(buffer_size);
        if (!buffer) {
                r = -ENOMEM;
@@ -1210,7 +1305,7 @@ int LUKS2_hdr_restore(struct crypt_device *cd, struct luks2_hdr *hdr,
                                goto out;
                        }
                        /* FIXME: what could go wrong? Erase if we're fine with consequences */
-                       if (buffer_size != (ssize_t) LUKS2_hdr_and_areas_size(tmp_hdr.jobj)) {
+                       if (buffer_size != (ssize_t) LUKS2_hdr_and_areas_size(&tmp_hdr)) {
                                log_err(cd, _("Binary header with keyslot areas size differ on device and backup, restore failed."));
                                r = -EINVAL;
                                goto out;
@@ -1289,6 +1384,8 @@ static const struct  {
        { CRYPT_ACTIVATE_SAME_CPU_CRYPT,         "same-cpu-crypt" },
        { CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS, "submit-from-crypt-cpus" },
        { CRYPT_ACTIVATE_NO_JOURNAL,             "no-journal" },
+       { CRYPT_ACTIVATE_NO_READ_WORKQUEUE,      "no-read-workqueue" },
+       { CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE,     "no-write-workqueue" },
        { 0, NULL }
 };
 
@@ -1363,24 +1460,106 @@ int LUKS2_config_set_flags(struct crypt_device *cd, struct luks2_hdr *hdr, uint3
  */
 
 /* LUKS2 library requirements */
-static const struct  {
+struct requirement_flag {
        uint32_t flag;
+       uint32_t version;
        const char *description;
-} requirements_flags[] = {
-       { CRYPT_REQUIREMENT_OFFLINE_REENCRYPT, "offline-reencrypt" },
-       { CRYPT_REQUIREMENT_ONLINE_REENCRYPT, "online-reencrypt" },
-       { 0, NULL }
 };
 
-static uint32_t get_requirement_by_name(const char *requirement)
+static const struct requirement_flag unknown_requirement_flag = { CRYPT_REQUIREMENT_UNKNOWN, 0, NULL };
+
+static const struct requirement_flag requirements_flags[] = {
+       { CRYPT_REQUIREMENT_OFFLINE_REENCRYPT,1, "offline-reencrypt" },
+       { CRYPT_REQUIREMENT_ONLINE_REENCRYPT, 2, "online-reencrypt-v2" },
+       { CRYPT_REQUIREMENT_ONLINE_REENCRYPT, 1, "online-reencrypt" },
+       { 0, 0, NULL }
+};
+
+static const struct requirement_flag *get_requirement_by_name(const char *requirement)
 {
        int i;
 
        for (i = 0; requirements_flags[i].description; i++)
                if (!strcmp(requirement, requirements_flags[i].description))
-                       return requirements_flags[i].flag;
+                       return requirements_flags + i;
+
+       return &unknown_requirement_flag;
+}
+
+int LUKS2_config_get_reencrypt_version(struct luks2_hdr *hdr, uint32_t *version)
+{
+       json_object *jobj_config, *jobj_requirements, *jobj_mandatory, *jobj;
+       int i, len;
+       const struct requirement_flag *req;
+
+       assert(hdr && version);
+       if (!hdr || !version)
+               return -EINVAL;
+
+       if (!json_object_object_get_ex(hdr->jobj, "config", &jobj_config))
+               return -EINVAL;
+
+       if (!json_object_object_get_ex(jobj_config, "requirements", &jobj_requirements))
+               return -ENOENT;
+
+       if (!json_object_object_get_ex(jobj_requirements, "mandatory", &jobj_mandatory))
+               return -ENOENT;
+
+       len = (int) json_object_array_length(jobj_mandatory);
+       if (len <= 0)
+               return -ENOENT;
+
+       for (i = 0; i < len; i++) {
+               jobj = json_object_array_get_idx(jobj_mandatory, i);
+
+               /* search for requirements prefixed with "online-reencrypt" */
+               if (strncmp(json_object_get_string(jobj), "online-reencrypt", 16))
+                       continue;
+
+               /* check current library is aware of the requirement */
+               req = get_requirement_by_name(json_object_get_string(jobj));
+               if (req->flag == (uint32_t)CRYPT_REQUIREMENT_UNKNOWN)
+                       continue;
+
+               *version = req->version;
+
+               return 0;
+       }
+
+       return -ENOENT;
+}
+
+static const struct requirement_flag *stored_requirement_name_by_id(struct crypt_device *cd, struct luks2_hdr *hdr, uint32_t req_id)
+{
+       json_object *jobj_config, *jobj_requirements, *jobj_mandatory, *jobj;
+       int i, len;
+       const struct requirement_flag *req;
+
+       assert(hdr);
+       if (!hdr)
+               return NULL;
+
+       if (!json_object_object_get_ex(hdr->jobj, "config", &jobj_config))
+               return NULL;
+
+       if (!json_object_object_get_ex(jobj_config, "requirements", &jobj_requirements))
+               return NULL;
 
-       return CRYPT_REQUIREMENT_UNKNOWN;
+       if (!json_object_object_get_ex(jobj_requirements, "mandatory", &jobj_mandatory))
+               return NULL;
+
+       len = (int) json_object_array_length(jobj_mandatory);
+       if (len <= 0)
+               return 0;
+
+       for (i = 0; i < len; i++) {
+               jobj = json_object_array_get_idx(jobj_mandatory, i);
+               req = get_requirement_by_name(json_object_get_string(jobj));
+               if (req->flag == req_id)
+                       return req;
+       }
+
+       return NULL;
 }
 
 /*
@@ -1390,7 +1569,7 @@ int LUKS2_config_get_requirements(struct crypt_device *cd, struct luks2_hdr *hdr
 {
        json_object *jobj_config, *jobj_requirements, *jobj_mandatory, *jobj;
        int i, len;
-       uint32_t req;
+       const struct requirement_flag *req;
 
        assert(hdr);
        if (!hdr || !reqs)
@@ -1417,8 +1596,8 @@ int LUKS2_config_get_requirements(struct crypt_device *cd, struct luks2_hdr *hdr
                jobj = json_object_array_get_idx(jobj_mandatory, i);
                req = get_requirement_by_name(json_object_get_string(jobj));
                log_dbg(cd, "%s - %sknown", json_object_get_string(jobj),
-                                       reqs_unknown(req) ? "un" : "");
-               *reqs |= req;
+                                       reqs_unknown(req->flag) ? "un" : "");
+               *reqs |= req->flag;
        }
 
        return 0;
@@ -1428,6 +1607,8 @@ int LUKS2_config_set_requirements(struct crypt_device *cd, struct luks2_hdr *hdr
 {
        json_object *jobj_config, *jobj_requirements, *jobj_mandatory, *jobj;
        int i, r = -EINVAL;
+       const struct requirement_flag *req;
+       uint32_t req_id;
 
        if (!hdr)
                return -EINVAL;
@@ -1437,8 +1618,14 @@ int LUKS2_config_set_requirements(struct crypt_device *cd, struct luks2_hdr *hdr
                return -ENOMEM;
 
        for (i = 0; requirements_flags[i].description; i++) {
-               if (reqs & requirements_flags[i].flag) {
-                       jobj = json_object_new_string(requirements_flags[i].description);
+               req_id = reqs & requirements_flags[i].flag;
+               if (req_id) {
+                       /* retain already stored version of requirement flag */
+                       req = stored_requirement_name_by_id(cd, hdr, req_id);
+                       if (req)
+                               jobj = json_object_new_string(req->description);
+                       else
+                               jobj = json_object_new_string(requirements_flags[i].description);
                        if (!jobj) {
                                r = -ENOMEM;
                                goto err;
@@ -1704,8 +1891,8 @@ int LUKS2_hdr_dump(struct crypt_device *cd, struct luks2_hdr *hdr)
        log_std(cd, "LUKS header information\n");
        log_std(cd, "Version:       \t%u\n", hdr->version);
        log_std(cd, "Epoch:         \t%" PRIu64 "\n", hdr->seqid);
-       log_std(cd, "Metadata area: \t%" PRIu64 " [bytes]\n", LUKS2_metadata_size(hdr->jobj));
-       log_std(cd, "Keyslots area: \t%" PRIu64 " [bytes]\n", LUKS2_keyslots_size(hdr->jobj));
+       log_std(cd, "Metadata area: \t%" PRIu64 " [bytes]\n", LUKS2_metadata_size(hdr));
+       log_std(cd, "Keyslots area: \t%" PRIu64 " [bytes]\n", LUKS2_keyslots_size(hdr));
        log_std(cd, "UUID:          \t%s\n", *hdr->uuid ? hdr->uuid : "(no UUID)");
        log_std(cd, "Label:         \t%s\n", *hdr->label ? hdr->label : "(no label)");
        log_std(cd, "Subsystem:     \t%s\n", *hdr->subsystem ? hdr->subsystem : "(no subsystem)");
@@ -1764,7 +1951,7 @@ uint64_t LUKS2_get_data_offset(struct luks2_hdr *hdr)
        crypt_reencrypt_info ri;
        json_object *jobj;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_CLEAN || ri == CRYPT_REENCRYPT_CRASH) {
                jobj = LUKS2_get_segment_by_flag(hdr, "backup-final");
                if (jobj)
@@ -1792,7 +1979,7 @@ const char *LUKS2_get_cipher(struct luks2_hdr *hdr, int segment)
        return json_segment_get_cipher(jobj_segment) ?: "null";
 }
 
-crypt_reencrypt_info LUKS2_reenc_status(struct luks2_hdr *hdr)
+crypt_reencrypt_info LUKS2_reencrypt_status(struct luks2_hdr *hdr)
 {
        uint32_t reqs;
 
@@ -2235,7 +2422,7 @@ int LUKS2_deactivate(struct crypt_device *cd, const char *name, struct luks2_hdr
                goto out;
 
        if (contains_reencryption_helper(deps)) {
-               r = crypt_reencrypt_lock_by_dm_uuid(cd, dmd->uuid, &reencrypt_lock);
+               r = LUKS2_reencrypt_lock_by_dm_uuid(cd, dmd->uuid, &reencrypt_lock);
                if (r) {
                        if (r == -EBUSY)
                                log_err(cd, _("Reencryption in-progress. Cannot deactivate device."));
@@ -2314,7 +2501,7 @@ int LUKS2_deactivate(struct crypt_device *cd, const char *name, struct luks2_hdr
        }
 
 out:
-       crypt_reencrypt_unlock(cd, reencrypt_lock);
+       LUKS2_reencrypt_unlock(cd, reencrypt_lock);
        dep = deps;
        while (*dep)
                free(*dep++);
index 3b8c889..d93f2dd 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, keyslot handling
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -27,7 +27,9 @@ extern const keyslot_handler reenc_keyslot;
 
 static const keyslot_handler *keyslot_handlers[LUKS2_KEYSLOTS_MAX] = {
        &luks2_keyslot,
+#if USE_LUKS2_REENCRYPTION
        &reenc_keyslot,
+#endif
        NULL
 };
 
@@ -148,7 +150,7 @@ int LUKS2_keyslot_cipher_incompatible(struct crypt_device *cd, const char *ciphe
 {
        char cipher[MAX_CIPHER_LEN], cipher_mode[MAX_CIPHER_LEN];
 
-       if (!cipher_spec || !strcmp(cipher_spec, "null") || !strcmp(cipher_spec, "cipher_null"))
+       if (!cipher_spec || crypt_is_cipher_null(cipher_spec))
                return 1;
 
        if (crypt_parse_name_and_mode(cipher_spec, cipher, NULL, cipher_mode) < 0)
@@ -281,19 +283,9 @@ crypt_keyslot_info LUKS2_keyslot_info(struct luks2_hdr *hdr, int keyslot)
        return CRYPT_SLOT_ACTIVE;
 }
 
-int LUKS2_keyslot_area(struct luks2_hdr *hdr,
-       int keyslot,
-       uint64_t *offset,
-       uint64_t *length)
+int LUKS2_keyslot_jobj_area(json_object *jobj_keyslot, uint64_t *offset, uint64_t *length)
 {
-       json_object *jobj_keyslot, *jobj_area, *jobj;
-
-       if(LUKS2_keyslot_info(hdr, keyslot) == CRYPT_SLOT_INVALID)
-               return -EINVAL;
-
-       jobj_keyslot = LUKS2_get_keyslot_jobj(hdr, keyslot);
-       if (!jobj_keyslot)
-               return -ENOENT;
+       json_object *jobj_area, *jobj;
 
        if (!json_object_object_get_ex(jobj_keyslot, "area", &jobj_area))
                return -EINVAL;
@@ -309,6 +301,23 @@ int LUKS2_keyslot_area(struct luks2_hdr *hdr,
        return 0;
 }
 
+int LUKS2_keyslot_area(struct luks2_hdr *hdr,
+       int keyslot,
+       uint64_t *offset,
+       uint64_t *length)
+{
+       json_object *jobj_keyslot;
+
+       if (LUKS2_keyslot_info(hdr, keyslot) == CRYPT_SLOT_INVALID)
+               return -EINVAL;
+
+       jobj_keyslot = LUKS2_get_keyslot_jobj(hdr, keyslot);
+       if (!jobj_keyslot)
+               return -ENOENT;
+
+       return LUKS2_keyslot_jobj_area(jobj_keyslot, offset, length);
+}
+
 static int _open_and_verify(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        const keyslot_handler *h,
@@ -589,7 +598,7 @@ int LUKS2_keyslot_open(struct crypt_device *cd,
        return r;
 }
 
-int LUKS2_keyslot_reencrypt_create(struct crypt_device *cd,
+int LUKS2_keyslot_reencrypt_allocate(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int keyslot,
        const struct crypt_params_reencrypt *params)
@@ -619,9 +628,6 @@ int LUKS2_keyslot_reencrypt_create(struct crypt_device *cd,
                return r;
        }
 
-       if (LUKS2_hdr_validate(cd, hdr->jobj, hdr->hdr_size - LUKS2_HDR_BIN_LEN))
-               return -EINVAL;
-
        return 0;
 }
 
@@ -872,10 +878,17 @@ int LUKS2_keyslots_validate(struct crypt_device *cd, json_object *hdr_jobj)
        const keyslot_handler *h;
        int keyslot;
        json_object *jobj_keyslots, *jobj_type;
+       uint32_t reqs, reencrypt_count = 0;
+       struct luks2_hdr dummy = {
+               .jobj = hdr_jobj
+       };
 
        if (!json_object_object_get_ex(hdr_jobj, "keyslots", &jobj_keyslots))
                return -EINVAL;
 
+       if (LUKS2_config_get_requirements(cd, &dummy, &reqs))
+               return -EINVAL;
+
        json_object_object_foreach(jobj_keyslots, slot, val) {
                keyslot = atoi(slot);
                json_object_object_get_ex(val, "type", &jobj_type);
@@ -891,6 +904,24 @@ int LUKS2_keyslots_validate(struct crypt_device *cd, json_object *hdr_jobj)
                        log_dbg(cd, "Keyslot %d is not assigned to exactly 1 digest.", keyslot);
                        return -EINVAL;
                }
+
+               if (!strcmp(h->name, "reencrypt"))
+                       reencrypt_count++;
+       }
+
+       if ((reqs & CRYPT_REQUIREMENT_ONLINE_REENCRYPT) && reencrypt_count == 0) {
+               log_dbg(cd, "Missing reencryption keyslot.");
+               return -EINVAL;
+       }
+
+       if (!(reqs & CRYPT_REQUIREMENT_ONLINE_REENCRYPT) && reencrypt_count) {
+               log_dbg(cd, "Missing reencryption requirement flag.");
+               return -EINVAL;
+       }
+
+       if (reencrypt_count > 1) {
+               log_dbg(cd, "Too many reencryption keyslots.");
+               return -EINVAL;
        }
 
        return 0;
index 156f0c1..189a3cb 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, LUKS2 type keyslot handler
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -48,7 +48,7 @@ static int luks2_encrypt_to_storage(char *src, size_t srcLength,
                return -EINVAL;
 
        /* Encrypt buffer */
-       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength);
+       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength, false);
        if (r) {
                log_err(cd, _("Cannot use %s-%s cipher for keyslot encryption."), cipher, cipher_mode);
                return r;
@@ -103,7 +103,7 @@ static int luks2_decrypt_from_storage(char *dst, size_t dstLength,
        if (MISALIGNED_512(dstLength))
                return -EINVAL;
 
-       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength);
+       r = crypt_storage_init(&s, SECTOR_SIZE, cipher, cipher_mode, vk->key, vk->keylength, false);
        if (r) {
                log_err(cd, _("Cannot use %s-%s cipher for keyslot encryption."), cipher, cipher_mode);
                return r;
index b939467..9da7007 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, reencryption keyslot handler
  *
- * Copyright (C) 2016-2020, Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020, Ondrej Kozina
+ * Copyright (C) 2016-2021, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021, Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -176,46 +176,20 @@ static int reenc_keyslot_store(struct crypt_device *cd,
        return r < 0 ? r : keyslot;
 }
 
-int reenc_keyslot_update(struct crypt_device *cd,
-       const struct luks2_reenc_context *rh)
+static int reenc_keyslot_wipe(struct crypt_device *cd,
+       int keyslot)
 {
-       json_object *jobj_keyslot, *jobj_area, *jobj_area_type;
        struct luks2_hdr *hdr;
 
        if (!(hdr = crypt_get_hdr(cd, CRYPT_LUKS2)))
                return -EINVAL;
 
-       jobj_keyslot = LUKS2_get_keyslot_jobj(hdr, rh->reenc_keyslot);
-       if (!jobj_keyslot)
-               return -EINVAL;
-
-       json_object_object_get_ex(jobj_keyslot, "area", &jobj_area);
-       json_object_object_get_ex(jobj_area, "type", &jobj_area_type);
-
-       if (rh->rp.type == REENC_PROTECTION_CHECKSUM) {
-               log_dbg(cd, "Updating reencrypt keyslot for checksum protection.");
-               json_object_object_add(jobj_area, "type", json_object_new_string("checksum"));
-               json_object_object_add(jobj_area, "hash", json_object_new_string(rh->rp.p.csum.hash));
-               json_object_object_add(jobj_area, "sector_size", json_object_new_int64(rh->alignment));
-       } else if (rh->rp.type == REENC_PROTECTION_NONE) {
-               log_dbg(cd, "Updating reencrypt keyslot for none protection.");
-               json_object_object_add(jobj_area, "type", json_object_new_string("none"));
-               json_object_object_del(jobj_area, "hash");
-       } else if (rh->rp.type == REENC_PROTECTION_JOURNAL) {
-               log_dbg(cd, "Updating reencrypt keyslot for journal protection.");
-               json_object_object_add(jobj_area, "type", json_object_new_string("journal"));
-               json_object_object_del(jobj_area, "hash");
-       } else
-               log_dbg(cd, "No update of reencrypt keyslot needed.");
+       /* remove reencryption verification data */
+       LUKS2_digest_assign(cd, hdr, keyslot, CRYPT_ANY_DIGEST, 0, 0);
 
        return 0;
 }
 
-static int reenc_keyslot_wipe(struct crypt_device *cd, int keyslot)
-{
-       return 0;
-}
-
 static int reenc_keyslot_dump(struct crypt_device *cd, int keyslot)
 {
        json_object *jobj_keyslot, *jobj_area, *jobj_direction, *jobj_mode, *jobj_resilience,
@@ -256,7 +230,7 @@ static int reenc_keyslot_dump(struct crypt_device *cd, int keyslot)
 
 static int reenc_keyslot_validate(struct crypt_device *cd, json_object *jobj_keyslot)
 {
-       json_object *jobj_mode, *jobj_area, *jobj_type, *jobj_shift_size, *jobj_hash, *jobj_sector_size, *jobj_direction;
+       json_object *jobj_mode, *jobj_area, *jobj_type, *jobj_shift_size, *jobj_hash, *jobj_sector_size, *jobj_direction, *jobj_key_size;
        const char *mode, *type, *direction;
        uint32_t sector_size;
        uint64_t shift_size;
@@ -276,12 +250,18 @@ static int reenc_keyslot_validate(struct crypt_device *cd, json_object *jobj_key
            !json_object_object_get_ex(jobj_area, "type", &jobj_type))
                return -EINVAL;
 
+       jobj_key_size = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "key_size", json_type_int);
        jobj_mode = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "mode", json_type_string);
        jobj_direction = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "direction", json_type_string);
 
-       if (!jobj_mode || !jobj_direction)
+       if (!jobj_mode || !jobj_direction || !jobj_key_size)
                return -EINVAL;
 
+       if (!validate_json_uint32(jobj_key_size) || crypt_jobj_get_uint32(jobj_key_size) != 1) {
+               log_dbg(cd, "Illegal reencrypt key size.");
+               return -EINVAL;
+       }
+
        mode = json_object_get_string(jobj_mode);
        type = json_object_get_string(jobj_type);
        direction = json_object_get_string(jobj_direction);
index 603c44d..84fd44f 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * LUKS - Linux Unified Key Setup v2, LUKS1 conversion code
  *
- * Copyright (C) 2015-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020 Ondrej Kozina
- * Copyright (C) 2015-2020 Milan Broz
+ * Copyright (C) 2015-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021 Ondrej Kozina
+ * Copyright (C) 2015-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -573,7 +573,7 @@ int LUKS2_luks1_to_luks2(struct crypt_device *cd, struct luks_phdr *hdr1, struct
         * It duplicates check in LUKS2_hdr_write() but we don't want to move
         * keyslot areas in case it would fail later
         */
-       if (max_size < LUKS2_hdr_and_areas_size(hdr2->jobj)) {
+       if (max_size < LUKS2_hdr_and_areas_size(hdr2)) {
                r = -EINVAL;
                goto out;
        }
@@ -595,7 +595,7 @@ int LUKS2_luks1_to_luks2(struct crypt_device *cd, struct luks_phdr *hdr1, struct
        buf_size   = luks1_size - LUKS_ALIGN_KEYSLOTS;
 
        /* check future LUKS2 keyslots area is at least as large as LUKS1 keyslots area */
-       if (buf_size > LUKS2_keyslots_size(hdr2->jobj)) {
+       if (buf_size > LUKS2_keyslots_size(hdr2)) {
                log_err(cd, _("Unable to move keyslot area. LUKS2 keyslots area too small."));
                r = -EINVAL;
                goto out;
@@ -675,7 +675,7 @@ static int keyslot_LUKS1_compatible(struct crypt_device *cd, struct luks2_hdr *h
 int LUKS2_luks2_to_luks1(struct crypt_device *cd, struct luks2_hdr *hdr2, struct luks_phdr *hdr1)
 {
        size_t buf_size, buf_offset;
-       char cipher[LUKS_CIPHERNAME_L-1], cipher_mode[LUKS_CIPHERMODE_L-1];
+       char cipher[LUKS_CIPHERNAME_L], cipher_mode[LUKS_CIPHERMODE_L];
        char digest[LUKS_DIGESTSIZE], digest_salt[LUKS_SALTSIZE];
        const char *hash;
        size_t len;
@@ -824,8 +824,10 @@ int LUKS2_luks2_to_luks1(struct crypt_device *cd, struct luks2_hdr *hdr2, struct
        if (r < 0)
                return r;
 
-       strncpy(hdr1->cipherName, cipher, sizeof(hdr1->cipherName) - 1);
-       strncpy(hdr1->cipherMode, cipher_mode, sizeof(hdr1->cipherMode) - 1);
+       strncpy(hdr1->cipherName, cipher, LUKS_CIPHERNAME_L - 1);
+       hdr1->cipherName[LUKS_CIPHERNAME_L-1] = '\0';
+       strncpy(hdr1->cipherMode, cipher_mode, LUKS_CIPHERMODE_L - 1);
+       hdr1->cipherMode[LUKS_CIPHERMODE_L-1] = '\0';
 
        if (!json_object_object_get_ex(jobj_keyslot, "kdf", &jobj_kdf))
                return -EINVAL;
@@ -881,7 +883,7 @@ int LUKS2_luks2_to_luks1(struct crypt_device *cd, struct luks2_hdr *hdr2, struct
 
        // move keyslots 32k -> 4k offset
        buf_offset = 2 * LUKS2_HDR_16K_LEN;
-       buf_size   = LUKS2_keyslots_size(hdr2->jobj);
+       buf_size   = LUKS2_keyslots_size(hdr2);
        r = move_keyslot_areas(cd, buf_offset, 8 * SECTOR_SIZE, buf_size);
        if (r < 0) {
                log_err(cd, _("Unable to move keyslot area."));
index 68d3194..f01ced0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, reencryption helpers
  *
- * Copyright (C) 2015-2020, Red Hat, Inc. All rights reserved.
- * Copyright (C) 2015-2020, Ondrej Kozina
+ * Copyright (C) 2015-2021, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015-2021, Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
 #include "luks2_internal.h"
 #include "utils_device_locking.h"
 
+struct reenc_protection {
+       enum { REENC_PROTECTION_NONE = 0, /* none should be 0 always */
+              REENC_PROTECTION_CHECKSUM,
+              REENC_PROTECTION_JOURNAL,
+               REENC_PROTECTION_DATASHIFT } type;
+
+       union {
+       struct {
+       } none;
+       struct {
+               char hash[LUKS2_CHECKSUM_ALG_L]; // or include luks.h
+               struct crypt_hash *ch;
+               size_t hash_size;
+               /* buffer for checksums */
+               void *checksums;
+               size_t checksums_len;
+       } csum;
+       struct {
+       } ds;
+       } p;
+};
+
+struct luks2_reencrypt {
+       /* reencryption window attributes */
+       uint64_t offset;
+       uint64_t progress;
+       uint64_t length;
+       uint64_t data_shift;
+       size_t alignment;
+       uint64_t device_size;
+       bool online;
+       bool fixed_length;
+       crypt_reencrypt_direction_info direction;
+       crypt_reencrypt_mode_info mode;
+
+       char *device_name;
+       char *hotzone_name;
+       char *overlay_name;
+       uint32_t flags;
+
+       /* reencryption window persistence attributes */
+       struct reenc_protection rp;
+
+       int reenc_keyslot;
+
+       /* already running reencryption */
+       json_object *jobj_segs_hot;
+       struct json_object *jobj_segs_post;
+
+       /* backup segments */
+       json_object *jobj_segment_new;
+       int digest_new;
+       json_object *jobj_segment_old;
+       int digest_old;
+       json_object *jobj_segment_moved;
+
+       struct volume_key *vks;
+
+       void *reenc_buffer;
+       ssize_t read;
+
+       struct crypt_storage_wrapper *cw1;
+       struct crypt_storage_wrapper *cw2;
+
+       uint32_t wflags1;
+       uint32_t wflags2;
+
+       struct crypt_lock_handle *reenc_lock;
+};
+#if USE_LUKS2_REENCRYPTION
+static int reencrypt_keyslot_update(struct crypt_device *cd,
+       const struct luks2_reencrypt *rh)
+{
+       int r;
+       json_object *jobj_keyslot, *jobj_area, *jobj_area_type;
+       struct luks2_hdr *hdr;
+
+       if (!(hdr = crypt_get_hdr(cd, CRYPT_LUKS2)))
+               return -EINVAL;
+
+       jobj_keyslot = LUKS2_get_keyslot_jobj(hdr, rh->reenc_keyslot);
+       if (!jobj_keyslot)
+               return -EINVAL;
+
+       json_object_object_get_ex(jobj_keyslot, "area", &jobj_area);
+       json_object_object_get_ex(jobj_area, "type", &jobj_area_type);
+
+       if (rh->rp.type == REENC_PROTECTION_CHECKSUM) {
+               log_dbg(cd, "Updating reencrypt keyslot for checksum protection.");
+               json_object_object_add(jobj_area, "type", json_object_new_string("checksum"));
+               json_object_object_add(jobj_area, "hash", json_object_new_string(rh->rp.p.csum.hash));
+               json_object_object_add(jobj_area, "sector_size", json_object_new_int64(rh->alignment));
+       } else if (rh->rp.type == REENC_PROTECTION_NONE) {
+               log_dbg(cd, "Updating reencrypt keyslot for none protection.");
+               json_object_object_add(jobj_area, "type", json_object_new_string("none"));
+               json_object_object_del(jobj_area, "hash");
+       } else if (rh->rp.type == REENC_PROTECTION_JOURNAL) {
+               log_dbg(cd, "Updating reencrypt keyslot for journal protection.");
+               json_object_object_add(jobj_area, "type", json_object_new_string("journal"));
+               json_object_object_del(jobj_area, "hash");
+       } else
+               log_dbg(cd, "No update of reencrypt keyslot needed.");
+
+       r = LUKS2_keyslot_reencrypt_digest_create(cd, hdr, rh->vks);
+       if (r < 0)
+               log_err(cd, "Failed to refresh reencryption verification digest.");
+
+       return r;
+}
+
 static json_object *reencrypt_segment(struct luks2_hdr *hdr, unsigned new)
 {
        return LUKS2_get_segment_by_flag(hdr, new ? "backup-final" : "backup-previous");
@@ -85,7 +195,7 @@ static uint64_t reencrypt_get_data_offset_old(struct luks2_hdr *hdr)
 {
        return reencrypt_data_offset(hdr, 0);
 }
-
+#endif
 static int reencrypt_digest(struct luks2_hdr *hdr, unsigned new)
 {
        int segment = LUKS2_get_segment_id_by_flag(hdr, new ? "backup-final" : "backup-previous");
@@ -144,7 +254,7 @@ static const char *reencrypt_resilience_hash(struct luks2_hdr *hdr)
 
        return json_object_get_string(jobj_hash);
 }
-
+#if USE_LUKS2_REENCRYPTION
 static uint32_t reencrypt_alignment(struct luks2_hdr *hdr)
 {
        json_object *jobj_keyslot, *jobj_area, *jobj_type, *jobj_hash, *jobj_sector_size;
@@ -170,7 +280,7 @@ static uint32_t reencrypt_alignment(struct luks2_hdr *hdr)
 
 static json_object *_enc_create_segments_shift_after(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        uint64_t data_offset)
 {
        int reenc_seg, i = 0;
@@ -217,7 +327,7 @@ err:
 
 static json_object *reencrypt_make_hot_segments_encrypt_shift(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        uint64_t data_offset)
 {
        int sg, crypt_seg, i = 0;
@@ -281,7 +391,7 @@ err:
 
 static json_object *reencrypt_make_segment_new(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               const struct luks2_reenc_context *rh,
+               const struct luks2_reencrypt *rh,
                uint64_t data_offset,
                uint64_t segment_offset,
                uint64_t iv_offset,
@@ -304,7 +414,7 @@ static json_object *reencrypt_make_segment_new(struct crypt_device *cd,
 
 static json_object *reencrypt_make_post_segments_forward(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        uint64_t data_offset)
 {
        int reenc_seg;
@@ -350,7 +460,7 @@ err:
 
 static json_object *reencrypt_make_post_segments_backward(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        uint64_t data_offset)
 {
        int reenc_seg;
@@ -386,7 +496,7 @@ err:
 
 static json_object *reencrypt_make_segment_reencrypt(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               const struct luks2_reenc_context *rh,
+               const struct luks2_reencrypt *rh,
                uint64_t data_offset,
                uint64_t segment_offset,
                uint64_t iv_offset,
@@ -409,7 +519,7 @@ static json_object *reencrypt_make_segment_reencrypt(struct crypt_device *cd,
 
 static json_object *reencrypt_make_segment_old(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               const struct luks2_reenc_context *rh,
+               const struct luks2_reencrypt *rh,
                uint64_t data_offset,
                uint64_t segment_offset,
                const uint64_t *segment_length)
@@ -435,7 +545,7 @@ static json_object *reencrypt_make_segment_old(struct crypt_device *cd,
 
 static json_object *reencrypt_make_hot_segments_forward(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t device_size,
                uint64_t data_offset)
 {
@@ -476,7 +586,7 @@ err:
 
 static json_object *reencrypt_make_hot_segments_backward(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t device_size,
                uint64_t data_offset)
 {
@@ -518,7 +628,7 @@ err:
 
 static int reencrypt_make_hot_segments(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t device_size,
                uint64_t data_offset)
 {
@@ -541,7 +651,7 @@ static int reencrypt_make_hot_segments(struct crypt_device *cd,
 
 static int reencrypt_make_post_segments(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t data_offset)
 {
        rh->jobj_segs_post = NULL;
@@ -560,7 +670,7 @@ static int reencrypt_make_post_segments(struct crypt_device *cd,
 
        return rh->jobj_segs_post ? 0 : -EINVAL;
 }
-
+#endif
 static uint64_t reencrypt_data_shift(struct luks2_hdr *hdr)
 {
        json_object *jobj_keyslot, *jobj_area, *jobj_data_shift;
@@ -622,7 +732,7 @@ static crypt_reencrypt_direction_info reencrypt_direction(struct luks2_hdr *hdr)
 
 typedef enum { REENC_OK = 0, REENC_ERR, REENC_ROLLBACK, REENC_FATAL } reenc_status_t;
 
-void LUKS2_reenc_context_free(struct crypt_device *cd, struct luks2_reenc_context *rh)
+void LUKS2_reencrypt_free(struct crypt_device *cd, struct luks2_reencrypt *rh)
 {
        if (!rh)
                return;
@@ -666,7 +776,7 @@ void LUKS2_reenc_context_free(struct crypt_device *cd, struct luks2_reenc_contex
        crypt_unlock_internal(cd, rh->reenc_lock);
        free(rh);
 }
-
+#if USE_LUKS2_REENCRYPTION
 static size_t reencrypt_get_alignment(struct crypt_device *cd,
                struct luks2_hdr *hdr)
 {
@@ -685,7 +795,7 @@ static size_t reencrypt_get_alignment(struct crypt_device *cd,
 
 /* returns void because it must not fail on valid LUKS2 header */
 static void _load_backup_segments(struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh)
+               struct luks2_reencrypt *rh)
 {
        int segment = LUKS2_get_segment_id_by_flag(hdr, "backup-final");
 
@@ -819,7 +929,7 @@ static int reencrypt_offset(struct luks2_hdr *hdr,
 
 static uint64_t reencrypt_length(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t keyslot_area_length,
                uint64_t length_max)
 {
@@ -867,7 +977,7 @@ static uint64_t reencrypt_length(struct crypt_device *cd,
        return length;
 }
 
-static int reencrypt_context_init(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reenc_context *rh, uint64_t device_size, const struct crypt_params_reencrypt *params)
+static int reencrypt_context_init(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reencrypt *rh, uint64_t device_size, const struct crypt_params_reencrypt *params)
 {
        int r;
        uint64_t dummy, area_length;
@@ -987,7 +1097,7 @@ static int reencrypt_context_init(struct crypt_device *cd, struct luks2_hdr *hdr
        return rh->length < 512 ? -EINVAL : 0;
 }
 
-static size_t reencrypt_buffer_length(struct luks2_reenc_context *rh)
+static size_t reencrypt_buffer_length(struct luks2_reencrypt *rh)
 {
        if (rh->data_shift)
                return rh->data_shift;
@@ -997,7 +1107,7 @@ static size_t reencrypt_buffer_length(struct luks2_reenc_context *rh)
 static int reencrypt_load_clean(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        uint64_t device_size,
-       struct luks2_reenc_context **rh,
+       struct luks2_reencrypt **rh,
        const struct crypt_params_reencrypt *params)
 {
        int r;
@@ -1006,7 +1116,7 @@ static int reencrypt_load_clean(struct crypt_device *cd,
                .hash = reencrypt_resilience_hash(hdr),
                .device_size = params ? params->device_size : 0
        };
-       struct luks2_reenc_context *tmp = crypt_zalloc(sizeof (*tmp));
+       struct luks2_reencrypt *tmp = crypt_zalloc(sizeof (*tmp));
 
        if (!tmp)
                return -ENOMEM;
@@ -1038,14 +1148,14 @@ static int reencrypt_load_clean(struct crypt_device *cd,
 
        return 0;
 err:
-       LUKS2_reenc_context_free(cd, tmp);
+       LUKS2_reencrypt_free(cd, tmp);
 
        return r;
 }
 
 static int reencrypt_make_segments(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        uint64_t device_size)
 {
        int r;
@@ -1068,7 +1178,7 @@ static int reencrypt_make_segments(struct crypt_device *cd,
 
 static int reencrypt_make_segments_crashed(struct crypt_device *cd,
                                struct luks2_hdr *hdr,
-                               struct luks2_reenc_context *rh)
+                               struct luks2_reencrypt *rh)
 {
        int r;
        uint64_t data_offset = crypt_get_data_offset(cd) << SECTOR_SHIFT;
@@ -1096,7 +1206,7 @@ static int reencrypt_make_segments_crashed(struct crypt_device *cd,
 }
 
 static int reencrypt_load_crashed(struct crypt_device *cd,
-       struct luks2_hdr *hdr, uint64_t device_size, struct luks2_reenc_context **rh)
+       struct luks2_hdr *hdr, uint64_t device_size, struct luks2_reencrypt **rh)
 {
        bool dynamic;
        uint64_t minimal_size;
@@ -1132,7 +1242,7 @@ static int reencrypt_load_crashed(struct crypt_device *cd,
                r = reencrypt_make_segments_crashed(cd, hdr, *rh);
 
        if (r) {
-               LUKS2_reenc_context_free(cd, *rh);
+               LUKS2_reencrypt_free(cd, *rh);
                *rh = NULL;
        }
        return r;
@@ -1140,7 +1250,7 @@ static int reencrypt_load_crashed(struct crypt_device *cd,
 
 static int reencrypt_init_storage_wrappers(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                struct volume_key *vks)
 {
        int r;
@@ -1178,7 +1288,7 @@ static int reencrypt_init_storage_wrappers(struct crypt_device *cd,
        return 0;
 }
 
-static int reencrypt_context_set_names(struct luks2_reenc_context *rh, const char *name)
+static int reencrypt_context_set_names(struct luks2_reencrypt *rh, const char *name)
 {
        if (!rh | !name)
                return -EINVAL;
@@ -1251,7 +1361,7 @@ static int reencrypt_update_flag(struct crypt_device *cd, int enable, bool commi
 
 static int reencrypt_recover_segment(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        struct volume_key *vks)
 {
        struct volume_key *vk_old, *vk_new;
@@ -1467,7 +1577,7 @@ out:
 
 static int reencrypt_add_moved_segment(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh)
+               struct luks2_reencrypt *rh)
 {
        int s = LUKS2_segment_first_unused_id(hdr);
 
@@ -1487,7 +1597,7 @@ static int reencrypt_add_moved_segment(struct crypt_device *cd,
 
 static int reencrypt_add_backup_segment(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                unsigned final)
 {
        int digest, s = LUKS2_segment_first_unused_id(hdr);
@@ -1512,7 +1622,7 @@ static int reencrypt_add_backup_segment(struct crypt_device *cd,
 
 static int reencrypt_assign_segments_simple(struct crypt_device *cd,
        struct luks2_hdr *hdr,
-       struct luks2_reenc_context *rh,
+       struct luks2_reencrypt *rh,
        unsigned hot,
        unsigned commit)
 {
@@ -1570,7 +1680,7 @@ static int reencrypt_assign_segments_simple(struct crypt_device *cd,
 
 static int reencrypt_assign_segments(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                unsigned hot,
                unsigned commit)
 {
@@ -1955,7 +2065,7 @@ err:
 }
 
 static int reencrypt_init_device_stack(struct crypt_device *cd,
-                                    const struct luks2_reenc_context *rh)
+                                    const struct luks2_reencrypt *rh)
 {
        int r;
 
@@ -2238,7 +2348,7 @@ static int reencrypt_verify_and_upload_keys(struct crypt_device *cd, struct luks
                        if (LUKS2_digest_verify_by_digest(cd, hdr, digest_new, vk) != digest_new)
                                return -EINVAL;
 
-                       if (crypt_use_keyring_for_vk(cd) &&
+                       if (crypt_use_keyring_for_vk(cd) && !crypt_is_cipher_null(reencrypt_segment_cipher_new(hdr)) &&
                            (r = LUKS2_volume_key_load_in_keyring_by_digest(cd, hdr, vk, crypt_volume_key_get_id(vk))))
                                return r;
                }
@@ -2254,7 +2364,7 @@ static int reencrypt_verify_and_upload_keys(struct crypt_device *cd, struct luks
                                r = -EINVAL;
                                goto err;
                        }
-                       if (crypt_use_keyring_for_vk(cd) &&
+                       if (crypt_use_keyring_for_vk(cd) && !crypt_is_cipher_null(reencrypt_segment_cipher_old(hdr)) &&
                            (r = LUKS2_volume_key_load_in_keyring_by_digest(cd, hdr, vk, crypt_volume_key_get_id(vk))))
                                goto err;
                }
@@ -2310,9 +2420,11 @@ static int reencrypt_init(struct crypt_device *cd,
        }
 
        if (!cipher_mode || *cipher_mode == '\0')
-               snprintf(_cipher, sizeof(_cipher), "%s", cipher);
+               r = snprintf(_cipher, sizeof(_cipher), "%s", cipher);
        else
-               snprintf(_cipher, sizeof(_cipher), "%s-%s", cipher, cipher_mode);
+               r = snprintf(_cipher, sizeof(_cipher), "%s-%s", cipher, cipher_mode);
+       if (r < 0 || (size_t)r >= sizeof(_cipher))
+               return -EINVAL;
 
        if (MISALIGNED(params->data_shift, sector_size >> SECTOR_SHIFT)) {
                log_err(cd, _("Data shift is not aligned to requested encryption sector size (%" PRIu32 " bytes)."), sector_size);
@@ -2375,7 +2487,7 @@ static int reencrypt_init(struct crypt_device *cd,
                        goto err;
        }
 
-       r = LUKS2_keyslot_reencrypt_create(cd, hdr, reencrypt_keyslot,
+       r = LUKS2_keyslot_reencrypt_allocate(cd, hdr, reencrypt_keyslot,
                                           params);
        if (r < 0)
                goto err;
@@ -2390,6 +2502,10 @@ static int reencrypt_init(struct crypt_device *cd,
        if (r < 0)
                goto err;
 
+       r = LUKS2_keyslot_reencrypt_digest_create(cd, hdr, *vks);
+       if (r < 0)
+               goto err;
+
        if (name && params->mode != CRYPT_REENCRYPT_ENCRYPT) {
                r = reencrypt_verify_and_upload_keys(cd, hdr, LUKS2_reencrypt_digest_old(hdr), LUKS2_reencrypt_digest_new(hdr), *vks);
                if (r)
@@ -2437,7 +2553,7 @@ err:
 }
 
 static int reencrypt_hotzone_protect_final(struct crypt_device *cd,
-       struct luks2_hdr *hdr, struct luks2_reenc_context *rh,
+       struct luks2_hdr *hdr, struct luks2_reencrypt *rh,
        const void *buffer, size_t buffer_len)
 {
        const void *pbuffer;
@@ -2479,7 +2595,7 @@ static int reencrypt_hotzone_protect_final(struct crypt_device *cd,
 }
 
 static int reencrypt_context_update(struct crypt_device *cd,
-       struct luks2_reenc_context *rh)
+       struct luks2_reencrypt *rh)
 {
        if (rh->read < 0)
                return -EINVAL;
@@ -2520,20 +2636,28 @@ static int reencrypt_context_update(struct crypt_device *cd,
 static int reencrypt_load(struct crypt_device *cd, struct luks2_hdr *hdr,
                uint64_t device_size,
                const struct crypt_params_reencrypt *params,
-               struct luks2_reenc_context **rh)
+               struct volume_key *vks,
+               struct luks2_reencrypt **rh)
 {
        int r;
-       struct luks2_reenc_context *tmp = NULL;
-       crypt_reencrypt_info ri = LUKS2_reenc_status(hdr);
+       struct luks2_reencrypt *tmp = NULL;
+       crypt_reencrypt_info ri = LUKS2_reencrypt_status(hdr);
+
+       if (ri == CRYPT_REENCRYPT_NONE) {
+               log_err(cd, _("Device not marked for LUKS2 reencryption."));
+               return -EINVAL;
+       } else if (ri == CRYPT_REENCRYPT_INVALID)
+               return -EINVAL;
+
+       r = LUKS2_reencrypt_digest_verify(cd, hdr, vks);
+       if (r < 0)
+               return r;
 
        if (ri == CRYPT_REENCRYPT_CLEAN)
                r = reencrypt_load_clean(cd, hdr, device_size, &tmp, params);
        else if (ri == CRYPT_REENCRYPT_CRASH)
                r = reencrypt_load_crashed(cd, hdr, device_size, &tmp);
-       else if (ri == CRYPT_REENCRYPT_NONE) {
-               log_err(cd, _("Device not marked for LUKS2 reencryption."));
-               return -EINVAL;
-       } else
+       else
                r = -EINVAL;
 
        if (r < 0 || !tmp) {
@@ -2545,7 +2669,7 @@ static int reencrypt_load(struct crypt_device *cd, struct luks2_hdr *hdr,
 
        return 0;
 }
-
+#endif
 static int reencrypt_lock_internal(struct crypt_device *cd, const char *uuid, struct crypt_lock_handle **reencrypt_lock)
 {
        int r;
@@ -2572,7 +2696,8 @@ out:
 }
 
 /* internal only */
-int crypt_reencrypt_lock_by_dm_uuid(struct crypt_device *cd, const char *dm_uuid, struct crypt_lock_handle **reencrypt_lock)
+int LUKS2_reencrypt_lock_by_dm_uuid(struct crypt_device *cd, const char *dm_uuid,
+       struct crypt_lock_handle **reencrypt_lock)
 {
        int r;
        char hdr_uuid[37];
@@ -2593,7 +2718,7 @@ int crypt_reencrypt_lock_by_dm_uuid(struct crypt_device *cd, const char *dm_uuid
 }
 
 /* internal only */
-int crypt_reencrypt_lock(struct crypt_device *cd, struct crypt_lock_handle **reencrypt_lock)
+int LUKS2_reencrypt_lock(struct crypt_device *cd, struct crypt_lock_handle **reencrypt_lock)
 {
        if (!cd || !crypt_get_type(cd) || strcmp(crypt_get_type(cd), CRYPT_LUKS2))
                return -EINVAL;
@@ -2602,11 +2727,11 @@ int crypt_reencrypt_lock(struct crypt_device *cd, struct crypt_lock_handle **ree
 }
 
 /* internal only */
-void crypt_reencrypt_unlock(struct crypt_device *cd, struct crypt_lock_handle *reencrypt_lock)
+void LUKS2_reencrypt_unlock(struct crypt_device *cd, struct crypt_lock_handle *reencrypt_lock)
 {
        crypt_unlock_internal(cd, reencrypt_lock);
 }
-
+#if USE_LUKS2_REENCRYPTION
 static int reencrypt_lock_and_verify(struct crypt_device *cd, struct luks2_hdr *hdr,
                struct crypt_lock_handle **reencrypt_lock)
 {
@@ -2614,7 +2739,7 @@ static int reencrypt_lock_and_verify(struct crypt_device *cd, struct luks2_hdr *
        crypt_reencrypt_info ri;
        struct crypt_lock_handle *h;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_INVALID) {
                log_err(cd, _("Failed to get reencryption state."));
                return -EINVAL;
@@ -2624,7 +2749,7 @@ static int reencrypt_lock_and_verify(struct crypt_device *cd, struct luks2_hdr *
                return -EINVAL;
        }
 
-       r = crypt_reencrypt_lock(cd, &h);
+       r = LUKS2_reencrypt_lock(cd, &h);
        if (r < 0) {
                if (r == -EBUSY)
                        log_err(cd, _("Reencryption process is already running."));
@@ -2636,17 +2761,17 @@ static int reencrypt_lock_and_verify(struct crypt_device *cd, struct luks2_hdr *
        /* With reencryption lock held, reload device context and verify metadata state */
        r = crypt_load(cd, CRYPT_LUKS2, NULL);
        if (r) {
-               crypt_reencrypt_unlock(cd, h);
+               LUKS2_reencrypt_unlock(cd, h);
                return r;
        }
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_CLEAN) {
                *reencrypt_lock = h;
                return 0;
        }
 
-       crypt_reencrypt_unlock(cd, h);
+       LUKS2_reencrypt_unlock(cd, h);
        log_err(cd, _("Cannot proceed with reencryption. Run reencryption recovery first."));
        return -EINVAL;
 }
@@ -2663,7 +2788,8 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
        int r, old_ss, new_ss;
        struct luks2_hdr *hdr;
        struct crypt_lock_handle *reencrypt_lock;
-       struct luks2_reenc_context *rh;
+       struct luks2_reencrypt *rh;
+       const struct volume_key *vk;
        struct crypt_dm_active_device dmd_target, dmd_source = {
                .uuid = crypt_get_uuid(cd),
                .flags = CRYPT_ACTIVATE_SHARED /* turn off exclusive open checks */
@@ -2680,10 +2806,10 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
 
        log_dbg(cd, "Loading LUKS2 reencryption context.");
 
-       rh = crypt_get_reenc_context(cd);
+       rh = crypt_get_luks2_reencrypt(cd);
        if (rh) {
-               LUKS2_reenc_context_free(cd, rh);
-               crypt_set_reenc_context(cd, NULL);
+               LUKS2_reencrypt_free(cd, rh);
+               crypt_set_luks2_reencrypt(cd, NULL);
                rh = NULL;
        }
 
@@ -2699,7 +2825,7 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
                return -EINVAL;
 
        /* some configurations provides fixed device size */
-       r = luks2_check_device_size(cd, hdr, minimal_size, &device_size, false, dynamic);
+       r = LUKS2_reencrypt_check_device_size(cd, hdr, minimal_size, &device_size, false, dynamic);
        if (r) {
                r = -EINVAL;
                goto err;
@@ -2730,6 +2856,19 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
                        goto err;
                flags = dmd_target.flags;
 
+               /*
+                * By default reencryption code aims to retain flags from existing dm device.
+                * The keyring activation flag can not be inherited if original cipher is null.
+                *
+                * In this case override the flag based on decision made in reencrypt_verify_and_upload_keys
+                * above. The code checks if new VK is eligible for keyring.
+                */
+               vk = crypt_volume_key_by_id(*vks, LUKS2_reencrypt_digest_new(hdr));
+               if (vk && vk->key_description && crypt_is_cipher_null(reencrypt_segment_cipher_old(hdr))) {
+                       flags |= CRYPT_ACTIVATE_KEYRING_KEY;
+                       dmd_source.flags |= CRYPT_ACTIVATE_KEYRING_KEY;
+               }
+
                r = LUKS2_assembly_multisegment_dmd(cd, hdr, *vks, LUKS2_get_segments_jobj(hdr), &dmd_source);
                if (!r) {
                        r = crypt_compare_dm_devices(cd, &dmd_source, &dmd_target);
@@ -2767,7 +2906,7 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
                rparams.device_size = required_size;
        }
 
-       r = reencrypt_load(cd, hdr, device_size, &rparams, &rh);
+       r = reencrypt_load(cd, hdr, device_size, &rparams, *vks, &rh);
        if (r < 0 || !rh)
                goto err;
 
@@ -2808,12 +2947,12 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd,
        MOVE_REF(rh->vks, *vks);
        MOVE_REF(rh->reenc_lock, reencrypt_lock);
 
-       crypt_set_reenc_context(cd, rh);
+       crypt_set_luks2_reencrypt(cd, rh);
 
        return 0;
 err:
-       crypt_reencrypt_unlock(cd, reencrypt_lock);
-       LUKS2_reenc_context_free(cd, rh);
+       LUKS2_reencrypt_unlock(cd, reencrypt_lock);
+       LUKS2_reencrypt_free(cd, rh);
        return r;
 }
 
@@ -2828,7 +2967,7 @@ static int reencrypt_recovery_by_passphrase(struct crypt_device *cd,
        crypt_reencrypt_info ri;
        struct crypt_lock_handle *reencrypt_lock;
 
-       r = crypt_reencrypt_lock(cd, &reencrypt_lock);
+       r = LUKS2_reencrypt_lock(cd, &reencrypt_lock);
        if (r) {
                if (r == -EBUSY)
                        log_err(cd, _("Reencryption in-progress. Cannot perform recovery."));
@@ -2838,13 +2977,13 @@ static int reencrypt_recovery_by_passphrase(struct crypt_device *cd,
        }
 
        if ((r = crypt_load(cd, CRYPT_LUKS2, NULL))) {
-               crypt_reencrypt_unlock(cd, reencrypt_lock);
+               LUKS2_reencrypt_unlock(cd, reencrypt_lock);
                return r;
        }
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_INVALID) {
-               crypt_reencrypt_unlock(cd, reencrypt_lock);
+               LUKS2_reencrypt_unlock(cd, reencrypt_lock);
                return -EINVAL;
        }
 
@@ -2858,10 +2997,89 @@ static int reencrypt_recovery_by_passphrase(struct crypt_device *cd,
                r = 0;
        }
 
-       crypt_reencrypt_unlock(cd, reencrypt_lock);
+       LUKS2_reencrypt_unlock(cd, reencrypt_lock);
        return r;
 }
 
+static int reencrypt_repair_by_passphrase(
+               struct crypt_device *cd,
+               struct luks2_hdr *hdr,
+               int keyslot_old,
+               int keyslot_new,
+               const char *passphrase,
+               size_t passphrase_size)
+{
+       int r;
+       struct crypt_lock_handle *reencrypt_lock;
+       struct luks2_reencrypt *rh;
+       crypt_reencrypt_info ri;
+       struct volume_key *vks = NULL;
+
+       log_dbg(cd, "Loading LUKS2 reencryption context for metadata repair.");
+
+       rh = crypt_get_luks2_reencrypt(cd);
+       if (rh) {
+               LUKS2_reencrypt_free(cd, rh);
+               crypt_set_luks2_reencrypt(cd, NULL);
+               rh = NULL;
+       }
+
+       ri = LUKS2_reencrypt_status(hdr);
+       if (ri == CRYPT_REENCRYPT_INVALID)
+               return -EINVAL;
+
+       if (ri < CRYPT_REENCRYPT_CLEAN) {
+               log_err(cd, _("Device is not in reencryption."));
+               return -EINVAL;
+       }
+
+       r = LUKS2_reencrypt_lock(cd, &reencrypt_lock);
+       if (r < 0) {
+               if (r == -EBUSY)
+                       log_err(cd, _("Reencryption process is already running."));
+               else
+                       log_err(cd, _("Failed to acquire reencryption lock."));
+               return r;
+       }
+
+       /* With reencryption lock held, reload device context and verify metadata state */
+       r = crypt_load(cd, CRYPT_LUKS2, NULL);
+       if (r)
+               goto out;
+
+       ri = LUKS2_reencrypt_status(hdr);
+       if (ri == CRYPT_REENCRYPT_INVALID) {
+               r = -EINVAL;
+               goto out;
+       }
+       if (ri == CRYPT_REENCRYPT_NONE) {
+               r = 0;
+               goto out;
+       }
+
+       r = LUKS2_keyslot_open_all_segments(cd, keyslot_old, keyslot_new, passphrase, passphrase_size, &vks);
+       if (r < 0)
+               goto out;
+
+       r = LUKS2_keyslot_reencrypt_digest_create(cd, hdr, vks);
+       crypt_free_volume_key(vks);
+       vks = NULL;
+       if (r < 0)
+               goto out;
+
+       /* removes online-reencrypt flag v1 */
+       if ((r = reencrypt_update_flag(cd, 0, false)))
+               goto out;
+
+       /* adds online-reencrypt flag v2 and commits metadata */
+       r = reencrypt_update_flag(cd, 1, true);
+out:
+       LUKS2_reencrypt_unlock(cd, reencrypt_lock);
+       crypt_free_volume_key(vks);
+       return r;
+
+}
+#endif
 static int reencrypt_init_by_passphrase(struct crypt_device *cd,
        const char *name,
        const char *passphrase,
@@ -2872,17 +3090,22 @@ static int reencrypt_init_by_passphrase(struct crypt_device *cd,
        const char *cipher_mode,
        const struct crypt_params_reencrypt *params)
 {
+#if USE_LUKS2_REENCRYPTION
        int r;
        crypt_reencrypt_info ri;
        struct volume_key *vks = NULL;
        uint32_t flags = params ? params->flags : 0;
        struct luks2_hdr *hdr = crypt_get_hdr(cd, CRYPT_LUKS2);
 
+       /* short-circuit in reencryption metadata update and finish immediately. */
+       if (flags & CRYPT_REENCRYPT_REPAIR_NEEDED)
+               return reencrypt_repair_by_passphrase(cd, hdr, keyslot_old, keyslot_new, passphrase, passphrase_size);
+
        /* short-circuit in recovery and finish immediately. */
        if (flags & CRYPT_REENCRYPT_RECOVERY)
                return reencrypt_recovery_by_passphrase(cd, hdr, keyslot_old, keyslot_new, passphrase, passphrase_size);
 
-       if (cipher) {
+       if (cipher && !crypt_cipher_wrapped_key(cipher, cipher_mode)) {
                r = crypt_keyslot_get_key_size(cd, keyslot_new);
                if (r < 0)
                        return r;
@@ -2895,7 +3118,7 @@ static int reencrypt_init_by_passphrase(struct crypt_device *cd,
        if (r)
                return r;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_INVALID) {
                device_write_unlock(cd, crypt_metadata_device(cd));
                return -EINVAL;
@@ -2927,6 +3150,10 @@ out:
                crypt_drop_keyring_key(cd, vks);
        crypt_free_volume_key(vks);
        return r < 0 ? r : LUKS2_find_keyslot(hdr, "reencrypt");
+#else
+       log_err(cd, _("This operation is not supported for this device type."));
+       return -ENOTSUP;
+#endif
 }
 
 int crypt_reencrypt_init_by_keyring(struct crypt_device *cd,
@@ -2979,21 +3206,15 @@ int crypt_reencrypt_init_by_passphrase(struct crypt_device *cd,
        return reencrypt_init_by_passphrase(cd, name, passphrase, passphrase_size, keyslot_old, keyslot_new, cipher, cipher_mode, params);
 }
 
+#if USE_LUKS2_REENCRYPTION
 static reenc_status_t reencrypt_step(struct crypt_device *cd,
                struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh,
+               struct luks2_reencrypt *rh,
                uint64_t device_size,
                bool online)
 {
        int r;
 
-       /* update reencrypt keyslot protection parameters in memory only */
-       r = reenc_keyslot_update(cd, rh);
-       if (r < 0) {
-               log_dbg(cd, "Keyslot update failed.");
-               return REENC_ERR;
-       }
-
        /* in memory only */
        r = reencrypt_make_segments(cd, hdr, rh, device_size);
        if (r)
@@ -3110,7 +3331,7 @@ static int reencrypt_erase_backup_segments(struct crypt_device *cd,
        return 0;
 }
 
-static int reencrypt_wipe_moved_segment(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reenc_context *rh)
+static int reencrypt_wipe_moved_segment(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reencrypt *rh)
 {
        int r = 0;
        uint64_t offset, length;
@@ -3127,7 +3348,7 @@ static int reencrypt_wipe_moved_segment(struct crypt_device *cd, struct luks2_hd
        return r;
 }
 
-static int reencrypt_teardown_ok(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reenc_context *rh)
+static int reencrypt_teardown_ok(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reencrypt *rh)
 {
        int i, r;
        uint32_t dmt_flags;
@@ -3163,21 +3384,26 @@ static int reencrypt_teardown_ok(struct crypt_device *cd, struct luks2_hdr *hdr,
                        log_dbg(cd, "Failed to set new keyslots area size.");
                if (rh->digest_old >= 0 && rh->digest_new != rh->digest_old)
                        for (i = 0; i < LUKS2_KEYSLOTS_MAX; i++)
-                               if (LUKS2_digest_by_keyslot(hdr, i) == rh->digest_old)
-                                       crypt_keyslot_destroy(cd, i);
-               crypt_keyslot_destroy(cd, rh->reenc_keyslot);
+                               if (LUKS2_digest_by_keyslot(hdr, i) == rh->digest_old && crypt_keyslot_destroy(cd, i))
+                                       log_err(cd, _("Failed to remove unused (unbound) keyslot %d."), i);
+
                if (reencrypt_erase_backup_segments(cd, hdr))
                        log_dbg(cd, "Failed to erase backup segments");
 
-               /* do we need atomic erase? */
-               if (reencrypt_update_flag(cd, 0, true))
-                       log_err(cd, _("Failed to disable reencryption requirement flag."));
+               if (reencrypt_update_flag(cd, 0, false))
+                       log_dbg(cd, "Failed to disable reencryption requirement flag.");
+
+               /* metadata commit point also removing reencryption flag on-disk */
+               if (crypt_keyslot_destroy(cd, rh->reenc_keyslot)) {
+                       log_err(cd, _("Failed to remove reencryption keyslot."));
+                       return -EINVAL;
+               }
        }
 
        return 0;
 }
 
-static void reencrypt_teardown_fatal(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reenc_context *rh)
+static void reencrypt_teardown_fatal(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reencrypt *rh)
 {
        log_err(cd, _("Fatal error while reencrypting chunk starting at %" PRIu64 ", %" PRIu64 " sectors long."),
                (rh->offset >> SECTOR_SHIFT) + crypt_get_data_offset(cd), rh->length >> SECTOR_SHIFT);
@@ -3195,7 +3421,7 @@ static void reencrypt_teardown_fatal(struct crypt_device *cd, struct luks2_hdr *
 }
 
 static int reencrypt_teardown(struct crypt_device *cd, struct luks2_hdr *hdr,
-               struct luks2_reenc_context *rh, reenc_status_t rs, bool interrupted,
+               struct luks2_reencrypt *rh, reenc_status_t rs, bool interrupted,
                int (*progress)(uint64_t size, uint64_t offset, void *usrptr))
 {
        int r;
@@ -3214,19 +3440,20 @@ static int reencrypt_teardown(struct crypt_device *cd, struct luks2_hdr *hdr,
        }
 
        /* this frees reencryption lock */
-       LUKS2_reenc_context_free(cd, rh);
-       crypt_set_reenc_context(cd, NULL);
+       LUKS2_reencrypt_free(cd, rh);
+       crypt_set_luks2_reencrypt(cd, NULL);
 
        return r;
 }
-
+#endif
 int crypt_reencrypt(struct crypt_device *cd,
                    int (*progress)(uint64_t size, uint64_t offset, void *usrptr))
 {
+#if USE_LUKS2_REENCRYPTION
        int r;
        crypt_reencrypt_info ri;
        struct luks2_hdr *hdr;
-       struct luks2_reenc_context *rh;
+       struct luks2_reencrypt *rh;
        reenc_status_t rs;
        bool quit = false;
 
@@ -3235,13 +3462,13 @@ int crypt_reencrypt(struct crypt_device *cd,
 
        hdr = crypt_get_hdr(cd, CRYPT_LUKS2);
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri > CRYPT_REENCRYPT_CLEAN) {
                log_err(cd, _("Cannot proceed with reencryption. Unexpected reencryption status."));
                return -EINVAL;
        }
 
-       rh = crypt_get_reenc_context(cd);
+       rh = crypt_get_luks2_reencrypt(cd);
        if (!rh || (!rh->reenc_lock && crypt_metadata_locking_enabled())) {
                log_err(cd, _("Missing or invalid reencrypt context."));
                return -EINVAL;
@@ -3258,6 +3485,15 @@ int crypt_reencrypt(struct crypt_device *cd,
 
        rs = REENC_OK;
 
+       /* update reencrypt keyslot protection parameters in memory only */
+       if (!quit && (rh->device_size > rh->progress)) {
+               r = reencrypt_keyslot_update(cd, rh);
+               if (r < 0) {
+                       log_dbg(cd, "Keyslot update failed.");
+                       return reencrypt_teardown(cd, hdr, rh, REENC_ERR, quit, progress);
+               }
+       }
+
        while (!quit && (rh->device_size > rh->progress)) {
                rs = reencrypt_step(cd, hdr, rh, rh->device_size, rh->online);
                if (rs != REENC_OK)
@@ -3280,17 +3516,22 @@ int crypt_reencrypt(struct crypt_device *cd,
 
        r = reencrypt_teardown(cd, hdr, rh, rs, quit, progress);
        return r;
+#else
+       log_err(cd, _("This operation is not supported for this device type."));
+       return -ENOTSUP;
+#endif
 }
 
+#if USE_LUKS2_REENCRYPTION
 static int reencrypt_recovery(struct crypt_device *cd,
                struct luks2_hdr *hdr,
                uint64_t device_size,
                struct volume_key *vks)
 {
        int r;
-       struct luks2_reenc_context *rh = NULL;
+       struct luks2_reencrypt *rh = NULL;
 
-       r = reencrypt_load(cd, hdr, device_size, NULL, &rh);
+       r = reencrypt_load(cd, hdr, device_size, NULL, vks, &rh);
        if (r < 0) {
                log_err(cd, _("Failed to load LUKS2 reencryption context."));
                return r;
@@ -3313,18 +3554,18 @@ static int reencrypt_recovery(struct crypt_device *cd,
        if (!r)
                r = LUKS2_hdr_write(cd, hdr);
 err:
-       LUKS2_reenc_context_free(cd, rh);
+       LUKS2_reencrypt_free(cd, rh);
 
        return r;
 }
-
+#endif
 /*
  * use only for calculation of minimal data device size.
  * The real data offset is taken directly from segments!
  */
 int LUKS2_reencrypt_data_offset(struct luks2_hdr *hdr, bool blockwise)
 {
-       crypt_reencrypt_info ri = LUKS2_reenc_status(hdr);
+       crypt_reencrypt_info ri = LUKS2_reencrypt_status(hdr);
        uint64_t data_offset = LUKS2_get_data_offset(hdr);
 
        if (ri == CRYPT_REENCRYPT_CLEAN && reencrypt_direction(hdr) == CRYPT_REENCRYPT_FORWARD)
@@ -3334,7 +3575,8 @@ int LUKS2_reencrypt_data_offset(struct luks2_hdr *hdr, bool blockwise)
 }
 
 /* internal only */
-int luks2_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr, uint64_t check_size, uint64_t *dev_size, bool activation, bool dynamic)
+int LUKS2_reencrypt_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr,
+       uint64_t check_size, uint64_t *dev_size, bool activation, bool dynamic)
 {
        int r;
        uint64_t data_offset, real_size = 0;
@@ -3372,7 +3614,7 @@ int luks2_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr, uint
 
        return 0;
 }
-
+#if USE_LUKS2_REENCRYPTION
 /* returns keyslot number on success (>= 0) or negative errnor otherwise */
 int LUKS2_reencrypt_locked_recovery_by_passphrase(struct crypt_device *cd,
        int keyslot_old,
@@ -3408,7 +3650,7 @@ int LUKS2_reencrypt_locked_recovery_by_passphrase(struct crypt_device *cd,
                vk = crypt_volume_key_next(vk);
        }
 
-       if (luks2_check_device_size(cd, hdr, minimal_size, &device_size, true, false))
+       if (LUKS2_reencrypt_check_device_size(cd, hdr, minimal_size, &device_size, true, false))
                goto err;
 
        r = reencrypt_recovery(cd, hdr, device_size, _vks);
@@ -3422,16 +3664,32 @@ err:
 
        return r < 0 ? r : keyslot;
 }
-
-crypt_reencrypt_info LUKS2_reencrypt_status(struct crypt_device *cd, struct crypt_params_reencrypt *params)
+#endif
+crypt_reencrypt_info LUKS2_reencrypt_get_params(struct luks2_hdr *hdr,
+       struct crypt_params_reencrypt *params)
 {
        crypt_reencrypt_info ri;
-       struct luks2_hdr *hdr = crypt_get_hdr(cd, CRYPT_LUKS2);
+       int digest;
+       uint32_t version;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_NONE || ri == CRYPT_REENCRYPT_INVALID || !params)
                return ri;
 
+       digest = LUKS2_digest_by_keyslot(hdr, LUKS2_find_keyslot(hdr, "reencrypt"));
+       if (digest < 0 && digest != -ENOENT)
+               return CRYPT_REENCRYPT_INVALID;
+
+       /*
+        * In case there's an old "online-reencrypt" requirement or reencryption
+        * keyslot digest is missing inform caller reencryption metadata requires repair.
+        */
+       if (!LUKS2_config_get_reencrypt_version(hdr, &version) &&
+           (version < 2 || digest == -ENOENT)) {
+               params->flags |= CRYPT_REENCRYPT_REPAIR_NEEDED;
+               return ri;
+       }
+
        params->mode = reencrypt_mode(hdr);
        params->direction = reencrypt_direction(hdr);
        params->resilience = reencrypt_resilience_type(hdr);
diff --git a/lib/luks2/luks2_reencrypt_digest.c b/lib/luks2/luks2_reencrypt_digest.c
new file mode 100644 (file)
index 0000000..7ee277c
--- /dev/null
@@ -0,0 +1,381 @@
+/*
+ * LUKS - Linux Unified Key Setup v2, reencryption digest helpers
+ *
+ * Copyright (C) 2022, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2022, Ondrej Kozina
+ * Copyright (C) 2022, Milan Broz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "luks2_internal.h"
+#include <assert.h>
+
+#define MAX_STR 64
+
+struct jtype {
+       enum { JNONE = 0, JSTR, JU64, JX64, JU32 } type;
+       json_object *jobj;
+       const char *id;
+};
+
+static size_t sr(struct jtype *j, uint8_t *ptr)
+{
+       json_object *jobj;
+       size_t len = 0;
+       uint64_t u64;
+       uint32_t u32;
+
+       if (!json_object_is_type(j->jobj, json_type_object))
+               return 0;
+
+       if (!json_object_object_get_ex(j->jobj, j->id, &jobj))
+               return 0;
+
+       switch(j->type) {
+       case JSTR: /* JSON string */
+               if (!json_object_is_type(jobj, json_type_string))
+                       return 0;
+               len = strlen(json_object_get_string(jobj));
+               if (len > MAX_STR)
+                       return 0;
+               if (ptr)
+                       memcpy(ptr, json_object_get_string(jobj), len);
+               break;
+       case JU64: /* Unsigned 64bit integer stored as string */
+               if (!json_object_is_type(jobj, json_type_string))
+                       break;
+               len = sizeof(u64);
+               if (ptr) {
+                       u64 = cpu_to_be64(crypt_jobj_get_uint64(jobj));
+                       memcpy(ptr, &u64, len);
+               }
+               break;
+       case JX64: /* Unsigned 64bit segment size (allows "dynamic") */
+               if (!json_object_is_type(jobj, json_type_string))
+                       break;
+               if (!strcmp(json_object_get_string(jobj), "dynamic")) {
+                       len = strlen("dynamic");
+                       if (ptr)
+                               memcpy(ptr, json_object_get_string(jobj), len);
+               } else {
+                       len = sizeof(u64);
+                       u64 = cpu_to_be64(crypt_jobj_get_uint64(jobj));
+                       if (ptr)
+                               memcpy(ptr, &u64, len);
+               }
+               break;
+       case JU32: /* Unsigned 32bit integer, stored as JSON int */
+               if (!json_object_is_type(jobj, json_type_int))
+                       return 0;
+               len =  sizeof(u32);
+               if (ptr) {
+                       u32 = cpu_to_be32(crypt_jobj_get_uint32(jobj));
+                       memcpy(ptr, &u32, len);
+               }
+               break;
+       case JNONE:
+               return 0;
+       };
+
+       return len;
+}
+
+static size_t srs(struct jtype j[], uint8_t *ptr)
+{
+       size_t l, len = 0;
+
+       while(j->jobj) {
+               l = sr(j, ptr);
+               if (!l)
+                       return 0;
+               len += l;
+               if (ptr)
+                       ptr += l;
+               j++;
+       }
+       return len;
+}
+
+static size_t segment_linear_serialize(json_object *jobj_segment, uint8_t *buffer)
+{
+       struct jtype j[] = {
+               { JSTR, jobj_segment, "type" },
+               { JU64, jobj_segment, "offset" },
+               { JX64, jobj_segment, "size" },
+               {}
+       };
+       return srs(j, buffer);
+}
+
+static size_t segment_crypt_serialize(json_object *jobj_segment, uint8_t *buffer)
+{
+       struct jtype j[] = {
+               { JSTR, jobj_segment, "type" },
+               { JU64, jobj_segment, "offset" },
+               { JX64, jobj_segment, "size" },
+               { JU64, jobj_segment, "iv_tweak" },
+               { JSTR, jobj_segment, "encryption" },
+               { JU32, jobj_segment, "sector_size" },
+               {}
+       };
+       return srs(j, buffer);
+}
+
+static size_t segment_serialize(json_object *jobj_segment, uint8_t *buffer)
+{
+       json_object *jobj_type;
+       const char *segment_type;
+
+       if (!json_object_object_get_ex(jobj_segment, "type", &jobj_type))
+               return 0;
+
+       if (!(segment_type = json_object_get_string(jobj_type)))
+               return 0;
+
+       if (!strcmp(segment_type, "crypt"))
+               return segment_crypt_serialize(jobj_segment, buffer);
+       else if (!strcmp(segment_type, "linear"))
+               return segment_linear_serialize(jobj_segment, buffer);
+
+       return 0;
+}
+
+static size_t backup_segments_serialize(struct luks2_hdr *hdr, uint8_t *buffer)
+{
+       json_object *jobj_segment;
+       size_t l, len = 0;
+
+       jobj_segment = LUKS2_get_segment_by_flag(hdr, "backup-previous");
+       if (!jobj_segment || !(l = segment_serialize(jobj_segment, buffer)))
+               return 0;
+       len += l;
+       if (buffer)
+               buffer += l;
+
+       jobj_segment = LUKS2_get_segment_by_flag(hdr, "backup-final");
+       if (!jobj_segment || !(l = segment_serialize(jobj_segment, buffer)))
+               return 0;
+       len += l;
+       if (buffer)
+               buffer += l;
+
+       jobj_segment = LUKS2_get_segment_by_flag(hdr, "backup-moved-segment");
+       if (jobj_segment) {
+               if (!(l = segment_serialize(jobj_segment, buffer)))
+                       return 0;
+               len += l;
+       }
+
+       return len;
+}
+
+static size_t reenc_keyslot_serialize(struct luks2_hdr *hdr, uint8_t *buffer)
+{
+       json_object *jobj_keyslot, *jobj_area, *jobj_type;
+       const char *area_type;
+       int keyslot_reencrypt;
+
+       keyslot_reencrypt = LUKS2_find_keyslot(hdr, "reencrypt");
+       if (keyslot_reencrypt < 0)
+               return 0;
+
+       if (!(jobj_keyslot = LUKS2_get_keyslot_jobj(hdr, keyslot_reencrypt)))
+               return 0;
+
+       if (!json_object_object_get_ex(jobj_keyslot, "area", &jobj_area))
+               return 0;
+
+       if (!json_object_object_get_ex(jobj_area, "type", &jobj_type))
+               return 0;
+
+       if (!(area_type = json_object_get_string(jobj_type)))
+               return 0;
+
+       struct jtype j[] = {
+               { JSTR, jobj_keyslot, "mode" },
+               { JSTR, jobj_keyslot, "direction" },
+               { JSTR, jobj_area,    "type" },
+               { JU64, jobj_area,    "offset" },
+               { JU64, jobj_area,    "size" },
+               {}
+       };
+       struct jtype j_datashift[] = {
+               { JSTR, jobj_keyslot, "mode" },
+               { JSTR, jobj_keyslot, "direction" },
+               { JSTR, jobj_area,    "type" },
+               { JU64, jobj_area,    "offset" },
+               { JU64, jobj_area,    "size" },
+               { JU64, jobj_area,    "shift_size" },
+               {}
+       };
+       struct jtype j_checksum[] = {
+               { JSTR, jobj_keyslot, "mode" },
+               { JSTR, jobj_keyslot, "direction" },
+               { JSTR, jobj_area,    "type" },
+               { JU64, jobj_area,    "offset" },
+               { JU64, jobj_area,    "size" },
+               { JSTR, jobj_area,    "hash" },
+               { JU32, jobj_area,    "sector_size" },
+               {}
+       };
+
+       if (!strcmp(area_type, "datashift"))
+               return srs(j_datashift, buffer);
+       else if (!strcmp(area_type, "checksum"))
+               return srs(j_checksum, buffer);
+
+       return srs(j, buffer);
+}
+
+static size_t blob_serialize(void *blob, size_t length, uint8_t *buffer)
+{
+       if (buffer)
+               memcpy(buffer, blob, length);
+
+       return length;
+}
+
+static int reencrypt_assembly_verification_data(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks,
+       struct volume_key **verification_data)
+{
+       uint8_t *ptr;
+       int digest_new, digest_old;
+       struct volume_key *data = NULL, *vk_old = NULL, *vk_new = NULL;
+       size_t keyslot_data_len, segments_data_len, data_len = 2;
+
+       /* Keys - calculate length */
+       digest_new = LUKS2_reencrypt_digest_new(hdr);
+       digest_old = LUKS2_reencrypt_digest_old(hdr);
+
+       if (digest_old >= 0) {
+               vk_old = crypt_volume_key_by_id(vks, digest_old);
+               if (!vk_old)
+                       return -EINVAL;
+               data_len += blob_serialize(vk_old->key, vk_old->keylength, NULL);
+       }
+
+       if (digest_new >= 0 && digest_old != digest_new) {
+               vk_new = crypt_volume_key_by_id(vks, digest_new);
+               if (!vk_new)
+                       return -EINVAL;
+               data_len += blob_serialize(vk_new->key, vk_new->keylength, NULL);
+       }
+
+       if (data_len == 2)
+               return -EINVAL;
+
+       /* Metadata - calculate length */
+       if (!(keyslot_data_len = reenc_keyslot_serialize(hdr, NULL)))
+               return -EINVAL;
+       data_len += keyslot_data_len;
+
+       if (!(segments_data_len = backup_segments_serialize(hdr, NULL)))
+               return -EINVAL;
+       data_len += segments_data_len;
+
+       /* Alloc and fill serialization data */
+       data = crypt_alloc_volume_key(data_len, NULL);
+       if (!data)
+               return -ENOMEM;
+
+       ptr = (uint8_t*)data->key;
+
+       /* v2 */
+       *ptr++ = 0x76;
+       *ptr++ = 0x32;
+
+       if (vk_old)
+               ptr += blob_serialize(vk_old->key, vk_old->keylength, ptr);
+
+       if (vk_new)
+               ptr += blob_serialize(vk_new->key, vk_new->keylength, ptr);
+
+       if (!reenc_keyslot_serialize(hdr, ptr))
+               goto bad;
+       ptr += keyslot_data_len;
+
+       if (!backup_segments_serialize(hdr, ptr))
+               goto bad;
+       ptr += segments_data_len;
+
+       assert((size_t)(ptr - (uint8_t*)data->key) == data_len);
+
+       *verification_data = data;
+
+       return 0;
+bad:
+       crypt_free_volume_key(data);
+       return -EINVAL;
+}
+
+int LUKS2_keyslot_reencrypt_digest_create(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks)
+{
+       int digest_reencrypt, keyslot_reencrypt, r;
+       struct volume_key *data;
+
+       keyslot_reencrypt = LUKS2_find_keyslot(hdr, "reencrypt");
+       if (keyslot_reencrypt < 0)
+               return keyslot_reencrypt;
+
+       r = reencrypt_assembly_verification_data(cd, hdr, vks, &data);
+       if (r < 0)
+               return r;
+
+       r = LUKS2_digest_create(cd, "pbkdf2", hdr, data);
+       crypt_free_volume_key(data);
+       if (r < 0)
+               return r;
+
+       digest_reencrypt = r;
+
+       r = LUKS2_digest_assign(cd, hdr, keyslot_reencrypt, CRYPT_ANY_DIGEST, 0, 0);
+       if (r < 0)
+               return r;
+
+       return LUKS2_digest_assign(cd, hdr, keyslot_reencrypt, digest_reencrypt, 1, 0);
+}
+
+int LUKS2_reencrypt_digest_verify(struct crypt_device *cd,
+       struct luks2_hdr *hdr,
+       struct volume_key *vks)
+{
+       int r, keyslot_reencrypt;
+       struct volume_key *data;
+
+       keyslot_reencrypt = LUKS2_find_keyslot(hdr, "reencrypt");
+       if (keyslot_reencrypt < 0)
+               return keyslot_reencrypt;
+
+       r = reencrypt_assembly_verification_data(cd, hdr, vks, &data);
+       if (r < 0)
+               return r;
+
+       r = LUKS2_digest_verify(cd, hdr, data, keyslot_reencrypt);
+       crypt_free_volume_key(data);
+
+       if (r < 0) {
+               if (r == -ENOENT)
+                       log_dbg(cd, "Reencryption digest is missing.");
+               log_err(cd, _("Reencryption metadata is invalid."));
+       } else
+               log_dbg(cd, "Reencryption metadata verified.");
+
+       return r;
+}
index 8708ba5..46a524d 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, internal segment handling
  *
- * Copyright (C) 2018-2020, Red Hat, Inc. All rights reserved.
- * Copyright (C) 2018-2020, Ondrej Kozina
+ * Copyright (C) 2018-2021, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021, Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -123,7 +123,7 @@ static json_object *json_segment_get_flags(json_object *jobj_segment)
        return jobj;
 }
 
-static bool json_segment_contains_flag(json_object *jobj_segment, const char *flag_str, size_t len)
+bool json_segment_contains_flag(json_object *jobj_segment, const char *flag_str, size_t len)
 {
        int r, i;
        json_object *jobj, *jobj_flags = json_segment_get_flags(jobj_segment);
@@ -410,3 +410,23 @@ json_object *LUKS2_get_segment_by_flag(struct luks2_hdr *hdr, const char *flag)
 
        return jobj_segment;
 }
+
+/* compares key characteristics of both segments */
+bool json_segment_cmp(json_object *jobj_segment_1, json_object *jobj_segment_2)
+{
+       const char *type = json_segment_type(jobj_segment_1);
+       const char *type2 = json_segment_type(jobj_segment_2);
+
+       if (!type || !type2)
+               return false;
+
+       if (strcmp(type, type2))
+               return false;
+
+       if (!strcmp(type, "crypt"))
+               return (json_segment_get_sector_size(jobj_segment_1) == json_segment_get_sector_size(jobj_segment_2) &&
+                       !strcmp(json_segment_get_cipher(jobj_segment_1),
+                               json_segment_get_cipher(jobj_segment_2)));
+
+       return true;
+}
index ad6722a..9d0a889 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, token handling
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Milan Broz
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -147,7 +147,8 @@ int LUKS2_token_create(struct crypt_device *cd,
        if (!json_object_object_get_ex(hdr->jobj, "tokens", &jobj_tokens))
                return -EINVAL;
 
-       snprintf(num, sizeof(num), "%d", token);
+       if (snprintf(num, sizeof(num), "%d", token) < 0)
+               return -EINVAL;
 
        /* Remove token */
        if (!json)
@@ -329,7 +330,7 @@ static void LUKS2_token_buffer_free(struct crypt_device *cd,
 {
        const crypt_token_handler *h = LUKS2_token_handler(cd, token);
 
-       if (h->buffer_free)
+       if (h && h->buffer_free)
                h->buffer_free(buffer, buffer_len);
        else {
                crypt_safe_memzero(buffer, buffer_len);
@@ -383,6 +384,7 @@ int LUKS2_token_open_and_activate(struct crypt_device *cd,
                uint32_t flags,
                void *usrptr)
 {
+       bool use_keyring;
        int keyslot, r;
        char *buffer;
        size_t buffer_len;
@@ -404,7 +406,13 @@ int LUKS2_token_open_and_activate(struct crypt_device *cd,
 
        keyslot = r;
 
-       if ((name || (flags & CRYPT_ACTIVATE_KEYRING_KEY)) && crypt_use_keyring_for_vk(cd)) {
+       if (!crypt_use_keyring_for_vk(cd))
+               use_keyring = false;
+       else
+               use_keyring = ((name && !crypt_is_cipher_null(crypt_get_cipher(cd))) ||
+                              (flags & CRYPT_ACTIVATE_KEYRING_KEY));
+
+       if (use_keyring) {
                if (!(r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd, hdr, vk, keyslot)))
                        flags |= CRYPT_ACTIVATE_KEYRING_KEY;
        }
@@ -510,7 +518,9 @@ static int assign_one_keyslot(struct crypt_device *cd, struct luks2_hdr *hdr,
        if (!jobj_token_keyslots)
                return -EINVAL;
 
-       snprintf(num, sizeof(num), "%d", keyslot);
+       if (snprintf(num, sizeof(num), "%d", keyslot) < 0)
+               return -EINVAL;
+
        if (assign) {
                jobj1 = LUKS2_array_jobj(jobj_token_keyslots, num);
                if (!jobj1)
@@ -576,16 +586,12 @@ int LUKS2_token_assign(struct crypt_device *cd, struct luks2_hdr *hdr,
        return token;
 }
 
-int LUKS2_token_is_assigned(struct crypt_device *cd, struct luks2_hdr *hdr,
-                           int keyslot, int token)
+static int token_is_assigned(struct luks2_hdr *hdr, int keyslot, int token)
 {
        int i;
-       json_object *jobj_token, *jobj_token_keyslots, *jobj;
-
-       if (keyslot < 0 || keyslot >= LUKS2_KEYSLOTS_MAX || token < 0 || token >= LUKS2_TOKENS_MAX)
-               return -EINVAL;
+       json_object *jobj, *jobj_token_keyslots,
+                   *jobj_token = LUKS2_get_token_jobj(hdr, token);
 
-       jobj_token = LUKS2_get_token_jobj(hdr, token);
        if (!jobj_token)
                return -ENOENT;
 
@@ -600,6 +606,15 @@ int LUKS2_token_is_assigned(struct crypt_device *cd, struct luks2_hdr *hdr,
        return -ENOENT;
 }
 
+int LUKS2_token_is_assigned(struct crypt_device *cd, struct luks2_hdr *hdr,
+                           int keyslot, int token)
+{
+       if (keyslot < 0 || keyslot >= LUKS2_KEYSLOTS_MAX || token < 0 || token >= LUKS2_TOKENS_MAX)
+               return -EINVAL;
+
+       return token_is_assigned(hdr, keyslot, token);
+}
+
 int LUKS2_tokens_count(struct luks2_hdr *hdr)
 {
        json_object *jobj_tokens = LUKS2_get_tokens_jobj(hdr);
@@ -608,3 +623,28 @@ int LUKS2_tokens_count(struct luks2_hdr *hdr)
 
        return json_object_object_length(jobj_tokens);
 }
+
+int LUKS2_token_assignment_copy(struct crypt_device *cd,
+                       struct luks2_hdr *hdr,
+                       int keyslot_from,
+                       int keyslot_to,
+                       int commit)
+{
+       int i, r;
+
+       if (keyslot_from < 0 || keyslot_from >= LUKS2_KEYSLOTS_MAX || keyslot_to < 0 || keyslot_to >= LUKS2_KEYSLOTS_MAX)
+               return -EINVAL;
+
+       r = LUKS2_tokens_count(hdr);
+       if (r <= 0)
+               return r;
+
+       for (i = 0; i < LUKS2_TOKENS_MAX; i++) {
+               if (!token_is_assigned(hdr, keyslot_from, i)) {
+                       if ((r = assign_one_token(cd, hdr, keyslot_to, i, 1)))
+                               return r;
+               }
+       }
+
+       return commit ? LUKS2_hdr_write(cd, hdr) : 0;
+}
index 448ad45..be4f4a6 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * LUKS - Linux Unified Key Setup v2, kernel keyring token
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 060be4f..ee5df63 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * cryptsetup kernel RNG access functions
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 567f262..376b920 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -78,7 +78,7 @@ struct crypt_device {
                char cipher_mode[MAX_CIPHER_LEN]; /* only for compatibility */
                char *keyslot_cipher;
                unsigned int keyslot_key_size;
-               struct luks2_reenc_context *rh;
+               struct luks2_reencrypt *rh;
        } luks2;
        struct { /* used in CRYPT_PLAIN */
                struct crypt_params_plain hdr;
@@ -657,12 +657,12 @@ int crypt_set_data_device(struct crypt_device *cd, const char *device)
        log_dbg(cd, "Setting ciphertext data device to %s.", device ?: "(none)");
 
        if (!isLUKS1(cd->type) && !isLUKS2(cd->type) && !isVERITY(cd->type) &&
-           !isINTEGRITY(cd->type)) {
+           !isINTEGRITY(cd->type) && !isTCRYPT(cd->type)) {
                log_err(cd, _("This operation is not supported for this device type."));
                return -EINVAL;
        }
 
-       if (isLUKS2(cd->type) && crypt_get_reenc_context(cd)) {
+       if (isLUKS2(cd->type) && crypt_get_luks2_reencrypt(cd)) {
                log_err(cd, _("Illegal operation with reencryption in-progress."));
                return -EINVAL;
        }
@@ -845,11 +845,6 @@ static int _crypt_load_tcrypt(struct crypt_device *cd, struct crypt_params_tcryp
        if (!params)
                return -EINVAL;
 
-       if (cd->metadata_device) {
-               log_err(cd, _("Detached metadata device is not supported for this crypt type."));
-               return -EINVAL;
-       }
-
        r = init_crypto(cd);
        if (r < 0)
                return r;
@@ -1084,10 +1079,15 @@ static int _init_by_name_crypt_none(struct crypt_device *cd)
                                              _mode);
 
        if (!r) {
-               snprintf(cd->u.none.cipher_spec, sizeof(cd->u.none.cipher_spec),
+               r = snprintf(cd->u.none.cipher_spec, sizeof(cd->u.none.cipher_spec),
                         "%s-%s", cd->u.none.cipher, _mode);
-               cd->u.none.cipher_mode = cd->u.none.cipher_spec + strlen(cd->u.none.cipher) + 1;
-               cd->u.none.key_size = tgt->u.crypt.vk->keylength;
+               if (r < 0 || (size_t)r >= sizeof(cd->u.none.cipher_spec))
+                       r = -EINVAL;
+               else {
+                       cd->u.none.cipher_mode = cd->u.none.cipher_spec + strlen(cd->u.none.cipher) + 1;
+                       cd->u.none.key_size = tgt->u.crypt.vk->keylength;
+                       r = 0;
+               }
        }
 
        dm_targets_free(cd, &dmd);
@@ -1113,7 +1113,7 @@ static void crypt_free_type(struct crypt_device *cd)
                free(cd->u.plain.cipher);
                free(cd->u.plain.cipher_spec);
        } else if (isLUKS2(cd->type)) {
-               LUKS2_reenc_context_free(cd, cd->u.luks2.rh);
+               LUKS2_reencrypt_free(cd, cd->u.luks2.rh);
                LUKS2_hdr_free(cd, &cd->u.luks2.hdr);
                free(cd->u.luks2.keyslot_cipher);
        } else if (isLUKS1(cd->type)) {
@@ -1210,7 +1210,7 @@ static int _init_by_name_crypt(struct crypt_device *cd, const char *name)
        }
 
        /* do not try to lookup LUKS2 header in detached header mode */
-       if (!cd->metadata_device && !found) {
+       if (dmd.uuid && !cd->metadata_device && !found) {
                while (*dep && !found) {
                        r = dm_query_device(cd, *dep, DM_ACTIVE_DEVICE, &dmdep);
                        if (r < 0)
@@ -1850,13 +1850,13 @@ static int _crypt_format_luks2(struct crypt_device *cd,
        if (dev_size < (crypt_get_data_offset(cd) * SECTOR_SIZE))
                log_std(cd, _("WARNING: Data offset is outside of currently available data device.\n"));
 
-       if (cd->metadata_size && (cd->metadata_size != LUKS2_metadata_size(cd->u.luks2.hdr.jobj)))
+       if (cd->metadata_size && (cd->metadata_size != LUKS2_metadata_size(&cd->u.luks2.hdr)))
                log_std(cd, _("WARNING: LUKS2 metadata size changed to %" PRIu64 " bytes.\n"),
-                       LUKS2_metadata_size(cd->u.luks2.hdr.jobj));
+                       LUKS2_metadata_size(&cd->u.luks2.hdr));
 
-       if (cd->keyslots_size && (cd->keyslots_size != LUKS2_keyslots_size(cd->u.luks2.hdr.jobj)))
+       if (cd->keyslots_size && (cd->keyslots_size != LUKS2_keyslots_size(&cd->u.luks2.hdr)))
                log_std(cd, _("WARNING: LUKS2 keyslots area size changed to %" PRIu64 " bytes.\n"),
-                       LUKS2_keyslots_size(cd->u.luks2.hdr.jobj));
+                       LUKS2_keyslots_size(&cd->u.luks2.hdr));
 
        if (!integrity && sector_size > SECTOR_SIZE) {
                dev_size -= (crypt_get_data_offset(cd) * SECTOR_SIZE);
@@ -1874,11 +1874,11 @@ static int _crypt_format_luks2(struct crypt_device *cd,
                        goto out;
        }
 
-       r = LUKS2_wipe_header_areas(cd, &cd->u.luks2.hdr);
+       r = LUKS2_wipe_header_areas(cd, &cd->u.luks2.hdr, cd->metadata_device != NULL);
        if (r < 0) {
                log_err(cd, _("Cannot wipe header on device %s."),
                        mdata_device_path(cd));
-               if (dev_size < LUKS2_hdr_and_areas_size(cd->u.luks2.hdr.jobj))
+               if (dev_size < LUKS2_hdr_and_areas_size(&cd->u.luks2.hdr))
                        log_err(cd, _("Device %s is too small."), device_path(crypt_metadata_device(cd)));
                goto out;
        }
@@ -2035,7 +2035,7 @@ static int _crypt_format_verity(struct crypt_device *cd,
        } else
                cd->u.verity.hdr.data_size = params->data_size;
 
-       if (device_is_identical(crypt_metadata_device(cd), crypt_data_device(cd)) &&
+       if (device_is_identical(crypt_metadata_device(cd), crypt_data_device(cd)) > 0 &&
           (cd->u.verity.hdr.data_size * params->data_block_size) > params->hash_area_offset) {
                log_err(cd, _("Data area overlaps with hash area."));
                return -EINVAL;
@@ -2060,14 +2060,14 @@ static int _crypt_format_verity(struct crypt_device *cd,
                }
 
                hash_blocks_size = VERITY_hash_blocks(cd, params) * params->hash_block_size;
-               if (device_is_identical(crypt_metadata_device(cd), fec_device) &&
+               if (device_is_identical(crypt_metadata_device(cd), fec_device) > 0 &&
                    (params->hash_area_offset + hash_blocks_size) > params->fec_area_offset) {
                        log_err(cd, _("Hash area overlaps with FEC area."));
                        r = -EINVAL;
                        goto err;
                }
 
-               if (device_is_identical(crypt_data_device(cd), fec_device) &&
+               if (device_is_identical(crypt_data_device(cd), fec_device) > 0 &&
                    (cd->u.verity.hdr.data_size * params->data_block_size) > params->fec_area_offset) {
                        log_err(cd, _("Data area overlaps with FEC area."));
                        r = -EINVAL;
@@ -2388,11 +2388,6 @@ static int _compare_crypt_devices(struct crypt_device *cd,
        if (!src->u.crypt.vk || !tgt->u.crypt.vk)
                return -EINVAL;
 
-       if (_compare_volume_keys(src->u.crypt.vk, 0, tgt->u.crypt.vk, tgt->u.crypt.vk->key_description != NULL)) {
-               log_dbg(cd, "Keys in context and target device do not match.");
-               return -EINVAL;
-       }
-
        /* CIPHER checks */
        if (!src->u.crypt.cipher || !tgt->u.crypt.cipher)
                return -EINVAL;
@@ -2400,6 +2395,14 @@ static int _compare_crypt_devices(struct crypt_device *cd,
                log_dbg(cd, "Cipher specs do not match.");
                return -EINVAL;
        }
+
+       if (tgt->u.crypt.vk->keylength == 0 && crypt_is_cipher_null(tgt->u.crypt.cipher))
+               log_dbg(cd, "Existing device uses cipher null. Skipping key comparison.");
+       else if (_compare_volume_keys(src->u.crypt.vk, 0, tgt->u.crypt.vk, tgt->u.crypt.vk->key_description != NULL)) {
+               log_dbg(cd, "Keys in context and target device do not match.");
+               return -EINVAL;
+       }
+
        if (crypt_strcmp(src->u.crypt.integrity, tgt->u.crypt.integrity)) {
                log_dbg(cd, "Integrity parameters do not match.");
                return -EINVAL;
@@ -2413,7 +2416,7 @@ static int _compare_crypt_devices(struct crypt_device *cd,
                return -EINVAL;
        }
 
-       if (!device_is_identical(src->data_device, tgt->data_device)) {
+       if (device_is_identical(src->data_device, tgt->data_device) <= 0) {
                log_dbg(cd, "Data devices do not match.");
                return -EINVAL;
        }
@@ -2467,7 +2470,7 @@ static int _compare_integrity_devices(struct crypt_device *cd,
                return -EINVAL;
        }
 
-       if (!device_is_identical(src->data_device, tgt->data_device)) {
+       if (device_is_identical(src->data_device, tgt->data_device) <= 0) {
                log_dbg(cd, "Data devices do not match.");
                return -EINVAL;
        }
@@ -2770,6 +2773,11 @@ int crypt_resize(struct crypt_device *cd, const char *name, uint64_t new_size)
        if (!cd || !cd->type || !name)
                return -EINVAL;
 
+       if (isTCRYPT(cd->type) || isBITLK(cd->type)) {
+               log_err(cd, _("This operation is not supported for this device type."));
+               return -ENOTSUP;
+       }
+
        log_dbg(cd, "Resizing device %s to %" PRIu64 " sectors.", name, new_size);
 
        r = dm_query_device(cd, name, DM_ACTIVE_CRYPT_KEYSIZE | DM_ACTIVE_CRYPT_KEY, &dmdq);
@@ -3090,6 +3098,45 @@ out:
        return r;
 }
 
+/* key must be properly verified */
+static int resume_by_volume_key(struct crypt_device *cd,
+               struct volume_key *vk,
+               const char *name)
+{
+       int digest, r;
+       struct volume_key *zerokey = NULL;
+
+       if (crypt_is_cipher_null(crypt_get_cipher_spec(cd))) {
+               zerokey = crypt_alloc_volume_key(0, NULL);
+               if (!zerokey)
+                       return -ENOMEM;
+               vk = zerokey;
+       } else if (crypt_use_keyring_for_vk(cd)) {
+               /* LUKS2 path only */
+               digest = LUKS2_digest_by_segment(&cd->u.luks2.hdr, CRYPT_DEFAULT_SEGMENT);
+               if (digest < 0)
+                       return -EINVAL;
+               r = LUKS2_volume_key_load_in_keyring_by_digest(cd,
+                                       &cd->u.luks2.hdr, vk, digest);
+               if (r < 0)
+                       return r;
+       }
+
+       r = dm_resume_and_reinstate_key(cd, name, vk);
+
+       if (r == -ENOTSUP)
+               log_err(cd, _("Resume is not supported for device %s."), name);
+       else if (r)
+               log_err(cd, _("Error during resuming device %s."), name);
+
+       if (r < 0)
+               crypt_drop_keyring_key(cd, vk);
+
+       crypt_free_volume_key(zerokey);
+
+       return r;
+}
+
 int crypt_resume_by_passphrase(struct crypt_device *cd,
                               const char *name,
                               int keyslot,
@@ -3125,32 +3172,13 @@ int crypt_resume_by_passphrase(struct crypt_device *cd,
                r = LUKS2_keyslot_open(cd, keyslot, CRYPT_DEFAULT_SEGMENT, passphrase, passphrase_size, &vk);
 
        if  (r < 0)
-               goto out;
+               return r;
 
        keyslot = r;
 
-       if (crypt_use_keyring_for_vk(cd)) {
-               if (!isLUKS2(cd->type)) {
-                       r = -EINVAL;
-                       goto out;
-               }
-               r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd,
-                                       &cd->u.luks2.hdr, vk, keyslot);
-               if (r < 0)
-                       goto out;
-       }
-
-       r = dm_resume_and_reinstate_key(cd, name, vk);
+       r = resume_by_volume_key(cd, vk, name);
 
-       if (r == -ENOTSUP)
-               log_err(cd, _("Resume is not supported for device %s."), name);
-       else if (r)
-               log_err(cd, _("Error during resuming device %s."), name);
-out:
-       if (r < 0)
-               crypt_drop_keyring_key(cd, vk);
        crypt_free_volume_key(vk);
-
        return r < 0 ? r : keyslot;
 }
 
@@ -3189,35 +3217,22 @@ int crypt_resume_by_keyfile_device_offset(struct crypt_device *cd,
                                      &passphrase_read, &passphrase_size_read,
                                      keyfile_offset, keyfile_size, 0);
        if (r < 0)
-               goto out;
+               return r;
 
        if (isLUKS1(cd->type))
                r = LUKS_open_key_with_hdr(keyslot, passphrase_read, passphrase_size_read,
                                           &cd->u.luks1.hdr, &vk, cd);
        else
                r = LUKS2_keyslot_open(cd, keyslot, CRYPT_DEFAULT_SEGMENT, passphrase_read, passphrase_size_read, &vk);
+
+       crypt_safe_free(passphrase_read);
        if (r < 0)
-               goto out;
+               return r;
+
        keyslot = r;
 
-       if (crypt_use_keyring_for_vk(cd)) {
-               if (!isLUKS2(cd->type)) {
-                       r = -EINVAL;
-                       goto out;
-               }
-               r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd,
-                                       &cd->u.luks2.hdr, vk, keyslot);
-               if (r < 0)
-                       goto out;
-       }
+       r = resume_by_volume_key(cd, vk, name);
 
-       r = dm_resume_and_reinstate_key(cd, name, vk);
-       if (r < 0)
-               log_err(cd, _("Error during resuming device %s."), name);
-out:
-       crypt_safe_free(passphrase_read);
-       if (r < 0)
-               crypt_drop_keyring_key(cd, vk);
        crypt_free_volume_key(vk);
        return r < 0 ? r : keyslot;
 }
@@ -3280,24 +3295,10 @@ int crypt_resume_by_volume_key(struct crypt_device *cd,
                r = -EINVAL;
        if (r == -EPERM || r == -ENOENT)
                log_err(cd, _("Volume key does not match the volume."));
-       if  (r < 0)
-               goto out;
-       r = 0;
 
-       if (crypt_use_keyring_for_vk(cd)) {
-               r = LUKS2_key_description_by_segment(cd, &cd->u.luks2.hdr, vk, CRYPT_DEFAULT_SEGMENT);
-               if (!r)
-                       r = crypt_volume_key_load_in_keyring(cd, vk);
-       }
-       if  (r < 0)
-               goto out;
+       if (r >= 0)
+               r = resume_by_volume_key(cd, vk, name);
 
-       r = dm_resume_and_reinstate_key(cd, name, vk);
-       if (r < 0)
-               log_err(cd, _("Error during resuming device %s."), name);
-out:
-       if (r < 0)
-               crypt_drop_keyring_key(cd, vk);
        crypt_free_volume_key(vk);
        return r;
 }
@@ -3459,6 +3460,9 @@ int crypt_keyslot_change_by_passphrase(struct crypt_device *cd,
                        r = LUKS2_digest_assign(cd, &cd->u.luks2.hdr, keyslot_new, digest, 1, 0);
                        if (r < 0)
                                goto out;
+                       r = LUKS2_token_assignment_copy(cd, &cd->u.luks2.hdr, keyslot_old, keyslot_new, 0);
+                       if (r < 0)
+                               goto out;
                } else {
                        log_dbg(cd, "Key slot %d is going to be overwritten.", keyslot_old);
                        /* FIXME: improve return code so that we can detect area is damaged */
@@ -3686,7 +3690,7 @@ static int _check_header_data_overlap(struct crypt_device *cd, const char *name)
        if (!name || !isLUKS(cd->type))
                return 0;
 
-       if (!device_is_identical(crypt_data_device(cd), crypt_metadata_device(cd)))
+       if (device_is_identical(crypt_data_device(cd), crypt_metadata_device(cd)) <= 0)
                return 0;
 
        /* FIXME: check real header size */
@@ -3853,21 +3857,6 @@ out:
        return r;
 }
 
-static int load_all_keys(struct crypt_device *cd, struct luks2_hdr *hdr, struct volume_key *vks)
-{
-       int r;
-       struct volume_key *vk = vks;
-
-       while (vk) {
-               r = LUKS2_volume_key_load_in_keyring_by_digest(cd, hdr, vk, crypt_volume_key_get_id(vk));
-               if (r < 0)
-                       return r;
-               vk = crypt_volume_key_next(vk);
-       }
-
-       return 0;
-}
-
 /* See fixmes in _open_and_activate_luks2 */
 int update_reencryption_flag(struct crypt_device *cd, int enable, bool commit);
 
@@ -3879,6 +3868,7 @@ static int _open_and_activate(struct crypt_device *cd,
        size_t passphrase_size,
        uint32_t flags)
 {
+       bool use_keyring;
        int r;
        struct volume_key *vk = NULL;
 
@@ -3890,8 +3880,13 @@ static int _open_and_activate(struct crypt_device *cd,
                return r;
        keyslot = r;
 
-       if ((name || (flags & CRYPT_ACTIVATE_KEYRING_KEY)) &&
-           crypt_use_keyring_for_vk(cd)) {
+       if (!crypt_use_keyring_for_vk(cd))
+               use_keyring = false;
+       else
+               use_keyring = ((name && !crypt_is_cipher_null(crypt_get_cipher(cd))) ||
+                              (flags & CRYPT_ACTIVATE_KEYRING_KEY));
+
+       if (use_keyring) {
                r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd,
                                &cd->u.luks2.hdr, vk, keyslot);
                if (r < 0)
@@ -3909,6 +3904,22 @@ out:
        return r < 0 ? r : keyslot;
 }
 
+#if USE_LUKS2_REENCRYPTION
+static int load_all_keys(struct crypt_device *cd, struct luks2_hdr *hdr, struct volume_key *vks)
+{
+       int r;
+       struct volume_key *vk = vks;
+
+       while (vk) {
+               r = LUKS2_volume_key_load_in_keyring_by_digest(cd, hdr, vk, crypt_volume_key_get_id(vk));
+               if (r < 0)
+                       return r;
+               vk = crypt_volume_key_next(vk);
+       }
+
+       return 0;
+}
+
 static int _open_all_keys(struct crypt_device *cd,
        struct luks2_hdr *hdr,
        int keyslot,
@@ -3919,7 +3930,7 @@ static int _open_all_keys(struct crypt_device *cd,
 {
        int r, segment;
        struct volume_key *_vks = NULL;
-       crypt_reencrypt_info ri = LUKS2_reenc_status(hdr);
+       crypt_reencrypt_info ri = LUKS2_reencrypt_status(hdr);
 
        segment = (flags & CRYPT_ACTIVATE_ALLOW_UNBOUND_KEY) ? CRYPT_ANY_SEGMENT : CRYPT_DEFAULT_SEGMENT;
 
@@ -3975,7 +3986,7 @@ static int _open_and_activate_reencrypt_device(struct crypt_device *cd,
        if (crypt_use_keyring_for_vk(cd))
                flags |= CRYPT_ACTIVATE_KEYRING_KEY;
 
-       r = crypt_reencrypt_lock(cd, &reencrypt_lock);
+       r = LUKS2_reencrypt_lock(cd, &reencrypt_lock);
        if (r) {
                if (r == -EBUSY)
                        log_err(cd, _("Reencryption in-progress. Cannot activate device."));
@@ -3987,7 +3998,7 @@ static int _open_and_activate_reencrypt_device(struct crypt_device *cd,
        if ((r = crypt_load(cd, CRYPT_LUKS2, NULL)))
                goto err;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
 
        if (ri == CRYPT_REENCRYPT_CRASH) {
                r = LUKS2_reencrypt_locked_recovery_by_passphrase(cd, keyslot,
@@ -3998,14 +4009,14 @@ static int _open_and_activate_reencrypt_device(struct crypt_device *cd,
                }
                keyslot = r;
 
-               ri = LUKS2_reenc_status(hdr);
+               ri = LUKS2_reencrypt_status(hdr);
        }
 
        /* recovery finished reencryption or it's already finished */
        if (ri == CRYPT_REENCRYPT_NONE) {
                crypt_drop_keyring_key(cd, vks);
                crypt_free_volume_key(vks);
-               crypt_reencrypt_unlock(cd, reencrypt_lock);
+               LUKS2_reencrypt_unlock(cd, reencrypt_lock);
                return _open_and_activate(cd, keyslot, name, passphrase, passphrase_size, flags);
        }
 
@@ -4023,15 +4034,21 @@ static int _open_and_activate_reencrypt_device(struct crypt_device *cd,
                        keyslot = r;
        }
 
+       if (r >= 0) {
+               r = LUKS2_reencrypt_digest_verify(cd, hdr, vks);
+               if (r < 0)
+                       goto err;
+       }
+
        log_dbg(cd, "Entering clean reencryption state mode.");
 
        if (r >= 0)
-               r = luks2_check_device_size(cd, hdr, minimal_size, &device_size, true, dynamic_size);
+               r = LUKS2_reencrypt_check_device_size(cd, hdr, minimal_size, &device_size, true, dynamic_size);
 
        if (r >= 0)
                r = LUKS2_activate_multi(cd, name, vks, device_size >> SECTOR_SHIFT, flags);
 err:
-       crypt_reencrypt_unlock(cd, reencrypt_lock);
+       LUKS2_reencrypt_unlock(cd, reencrypt_lock);
        if (r < 0)
                crypt_drop_keyring_key(cd, vks);
        crypt_free_volume_key(vks);
@@ -4050,10 +4067,11 @@ static int _open_and_activate_luks2(struct crypt_device *cd,
        uint32_t flags)
 {
        crypt_reencrypt_info ri;
-       int r;
+       int r, rv;
        struct luks2_hdr *hdr = &cd->u.luks2.hdr;
+       struct volume_key *vks = NULL;
 
-       ri = LUKS2_reenc_status(hdr);
+       ri = LUKS2_reencrypt_status(hdr);
        if (ri == CRYPT_REENCRYPT_INVALID)
                return -EINVAL;
 
@@ -4061,15 +4079,45 @@ static int _open_and_activate_luks2(struct crypt_device *cd,
                if (name)
                        r = _open_and_activate_reencrypt_device(cd, hdr, keyslot, name, passphrase,
                                        passphrase_size, flags);
-               else
+               else {
                        r = _open_all_keys(cd, hdr, keyslot, passphrase,
-                                          passphrase_size, flags, NULL);
+                                          passphrase_size, flags, &vks);
+                       if (r < 0)
+                               return r;
+
+                       rv = LUKS2_reencrypt_digest_verify(cd, hdr, vks);
+                       crypt_free_volume_key(vks);
+                       if (rv < 0)
+                               return rv;
+               }
        } else
                r = _open_and_activate(cd, keyslot, name, passphrase,
                                passphrase_size, flags);
 
        return r;
 }
+#else
+static int _open_and_activate_luks2(struct crypt_device *cd,
+       int keyslot,
+       const char *name,
+       const char *passphrase,
+       size_t passphrase_size,
+       uint32_t flags)
+{
+       crypt_reencrypt_info ri;
+
+       ri = LUKS2_reencrypt_status(&cd->u.luks2.hdr);
+       if (ri == CRYPT_REENCRYPT_INVALID)
+               return -EINVAL;
+
+       if (ri > CRYPT_REENCRYPT_NONE) {
+               log_err(cd, _("This operation is not supported for this device type."));
+               return -ENOTSUP;
+       }
+
+       return _open_and_activate(cd, keyslot, name, passphrase, passphrase_size, flags);
+}
+#endif
 
 static int _activate_by_passphrase(struct crypt_device *cd,
        const char *name,
@@ -4161,21 +4209,26 @@ static int _activate_loopaes(struct crypt_device *cd,
 
 static int _activate_check_status(struct crypt_device *cd, const char *name, unsigned reload)
 {
-       crypt_status_info ci;
+       int r;
 
        if (!name)
                return 0;
 
-       ci = crypt_status(cd, name);
-       if (ci == CRYPT_INVALID) {
-               log_err(cd, _("Cannot use device %s, name is invalid or still in use."), name);
-               return -EINVAL;
-       } else if (ci >= CRYPT_ACTIVE && !reload) {
+       r = dm_status_device(cd, name);
+
+       if (r >= 0 && reload)
+               return 0;
+
+       if (r >= 0 || r == -EEXIST) {
                log_err(cd, _("Device %s already exists."), name);
                return -EEXIST;
        }
 
-       return 0;
+       if (r == -ENODEV)
+               return 0;
+
+       log_err(cd, _("Cannot use device %s, name is invalid or still in use."), name);
+       return r;
 }
 
 // activation/deactivation of device mapping
@@ -4269,6 +4322,7 @@ int crypt_activate_by_volume_key(struct crypt_device *cd,
        size_t volume_key_size,
        uint32_t flags)
 {
+       bool use_keyring;
        struct volume_key *vk = NULL;
        int r;
 
@@ -4344,8 +4398,12 @@ int crypt_activate_by_volume_key(struct crypt_device *cd,
                if (r > 0)
                        r = 0;
 
-               if (!r && (name || (flags & CRYPT_ACTIVATE_KEYRING_KEY)) &&
-                   crypt_use_keyring_for_vk(cd)) {
+               if (!crypt_use_keyring_for_vk(cd))
+                       use_keyring = false;
+               else
+                       use_keyring = (name && !crypt_is_cipher_null(crypt_get_cipher(cd))) || (flags & CRYPT_ACTIVATE_KEYRING_KEY);
+
+               if (!r && use_keyring) {
                        r = LUKS2_key_description_by_segment(cd,
                                &cd->u.luks2.hdr, vk, CRYPT_DEFAULT_SEGMENT);
                        if (!r)
@@ -4406,7 +4464,7 @@ int crypt_activate_by_signed_key(struct crypt_device *cd,
                return -EINVAL;
        }
 
-       log_dbg(cd, "%s volume %s by signed key.", name ? "Activating" : "Checking", name ?: "");
+       log_dbg(cd, "%s volume %s by %skey.", name ? "Activating" : "Checking", name ?: "", signature ? "signed " : "");
 
        if (cd->u.verity.hdr.flags & CRYPT_VERITY_ROOT_HASH_SIGNATURE && !signature) {
                log_err(cd, _("Root hash signature required."));
@@ -4956,6 +5014,9 @@ const char *crypt_get_cipher_mode(struct crypt_device *cd)
 /* INTERNAL only */
 const char *crypt_get_integrity(struct crypt_device *cd)
 {
+       if (!cd)
+               return NULL;
+
        if (isINTEGRITY(cd->type))
                return cd->u.integrity.params.integrity;
 
@@ -5235,8 +5296,8 @@ int crypt_get_metadata_size(struct crypt_device *cd,
                msize = LUKS_ALIGN_KEYSLOTS;
                ksize = LUKS_device_sectors(&cd->u.luks1.hdr) * SECTOR_SIZE - msize;
        } else if (isLUKS2(cd->type)) {
-               msize = LUKS2_metadata_size(cd->u.luks2.hdr.jobj);
-               ksize = LUKS2_keyslots_size(cd->u.luks2.hdr.jobj);
+               msize = LUKS2_metadata_size(&cd->u.luks2.hdr);
+               ksize = LUKS2_keyslots_size(&cd->u.luks2.hdr);
        } else
                return -EINVAL;
 
@@ -5510,13 +5571,13 @@ void *crypt_get_hdr(struct crypt_device *cd, const char *type)
 }
 
 /* internal only */
-struct luks2_reenc_context *crypt_get_reenc_context(struct crypt_device *cd)
+struct luks2_reencrypt *crypt_get_luks2_reencrypt(struct crypt_device *cd)
 {
        return cd->u.luks2.rh;
 }
 
 /* internal only */
-void crypt_set_reenc_context(struct crypt_device *cd, struct luks2_reenc_context *rh)
+void crypt_set_luks2_reencrypt(struct crypt_device *cd, struct luks2_reencrypt *rh)
 {
        cd->u.luks2.rh = rh;
 }
@@ -6039,7 +6100,7 @@ crypt_reencrypt_info crypt_reencrypt_status(struct crypt_device *cd,
        if (_onlyLUKS2(cd, CRYPT_CD_QUIET, CRYPT_REQUIREMENT_ONLINE_REENCRYPT))
                return CRYPT_REENCRYPT_INVALID;
 
-       return LUKS2_reencrypt_status(cd, params);
+       return LUKS2_reencrypt_get_params(&cd->u.luks2.hdr, params);
 }
 
 static void __attribute__((destructor)) libcryptsetup_exit(void)
index 859f0ed..bf20b69 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * TCRYPT (TrueCrypt-compatible) and VeraCrypt volume handling
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -749,7 +749,7 @@ int TCRYPT_activate(struct crypt_device *cd,
                return -ENOTSUP;
        }
 
-       if (hdr->d.sector_size && hdr->d.sector_size != SECTOR_SIZE) {
+       if (hdr->d.sector_size % SECTOR_SIZE) {
                log_err(cd, _("Activation is not supported for %d sector size."),
                        hdr->d.sector_size);
                return -ENOTSUP;
@@ -769,15 +769,12 @@ int TCRYPT_activate(struct crypt_device *cd,
        if (!algs)
                return -EINVAL;
 
-       if (hdr->d.sector_size == 0)
-               return -EINVAL;
-
        if (params->flags & CRYPT_TCRYPT_SYSTEM_HEADER)
                dmd.size = 0;
        else if (params->flags & CRYPT_TCRYPT_HIDDEN_HEADER)
-               dmd.size = hdr->d.hidden_volume_size / hdr->d.sector_size;
+               dmd.size = hdr->d.hidden_volume_size / SECTOR_SIZE;
        else
-               dmd.size = hdr->d.volume_size / hdr->d.sector_size;
+               dmd.size = hdr->d.volume_size / SECTOR_SIZE;
 
        if (dmd.flags & CRYPT_ACTIVATE_SHARED)
                device_check = DEV_OK;
@@ -1031,7 +1028,7 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd,
 
        /* Mapping through whole device, not partition! */
        if (params->flags & CRYPT_TCRYPT_SYSTEM_HEADER) {
-               if (crypt_dev_is_partition(device_path(crypt_metadata_device(cd))))
+               if (crypt_dev_is_partition(device_path(crypt_data_device(cd))))
                        return 0;
                goto hdr_offset;
        }
@@ -1042,11 +1039,11 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd,
 
                if (params->flags & CRYPT_TCRYPT_HIDDEN_HEADER) {
                        if (hdr->d.version > 3)
-                               return (hdr->d.mk_offset / hdr->d.sector_size);
+                               return (hdr->d.mk_offset / SECTOR_SIZE);
                        if (device_size(crypt_metadata_device(cd), &size) < 0)
                                return 0;
                        return (size - hdr->d.hidden_volume_size +
-                               (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / hdr->d.sector_size;
+                               (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / SECTOR_SIZE;
                }
                goto hdr_offset;
        }
@@ -1055,11 +1052,11 @@ uint64_t TCRYPT_get_data_offset(struct crypt_device *cd,
                if (device_size(crypt_metadata_device(cd), &size) < 0)
                        return 0;
                return (size - hdr->d.hidden_volume_size +
-                       (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / hdr->d.sector_size;
+                       (TCRYPT_HDR_HIDDEN_OFFSET_OLD)) / SECTOR_SIZE;
        }
 
 hdr_offset:
-       return hdr->d.mk_offset / hdr->d.sector_size;
+       return hdr->d.mk_offset / SECTOR_SIZE;
 }
 
 uint64_t TCRYPT_get_iv_offset(struct crypt_device *cd,
@@ -1073,10 +1070,10 @@ uint64_t TCRYPT_get_iv_offset(struct crypt_device *cd,
        else if (params->mode && !strncmp(params->mode, "lrw", 3))
                iv_offset = 0;
        else
-               iv_offset = hdr->d.mk_offset / hdr->d.sector_size;
+               iv_offset = hdr->d.mk_offset / SECTOR_SIZE;
 
        if (params->flags & CRYPT_TCRYPT_SYSTEM_HEADER)
-               iv_offset += crypt_dev_partition_offset(device_path(crypt_metadata_device(cd)));
+               iv_offset += crypt_dev_partition_offset(device_path(crypt_data_device(cd)));
 
        return iv_offset;
 }
index a3b6ad0..ff12cbd 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * TCRYPT (TrueCrypt-compatible)  header definition
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 0cf4378..7e850a6 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index f5c677a..6b2efdc 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * libcryptsetup - cryptsetup library, cipher benchmark
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 0e3e7fd..562b136 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * blkid probe utilities
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index ca50da7..5b61873 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * blkid probe utilities
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,6 +21,8 @@
 #ifndef _UTILS_BLKID_H
 #define _UTILS_BLKID_H
 
+#include <sys/types.h>
+
 struct blkid_handle;
 
 typedef enum { PRB_OK = 0, PRB_EMPTY, PRB_AMBIGUOUS, PRB_FAIL } blk_probe_status;
index 17dc6d8..f2519c1 100644 (file)
@@ -2,8 +2,8 @@
  * utils_crypt - cipher utilities for cryptsetup
  *
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <ctype.h>
 #include <errno.h>
 
 #include "libcryptsetup.h"
@@ -76,14 +77,16 @@ int crypt_parse_hash_integrity_mode(const char *s, char *integrity)
                return -EINVAL;
 
        r = sscanf(s, "%" MAX_CIPHER_LEN_STR "[^-]-%" MAX_CIPHER_LEN_STR "s", mode, hash);
-       if (r == 2)
+       if (r == 2 && !isdigit(hash[0]))
                r = snprintf(integrity, MAX_CIPHER_LEN, "%s(%s)", mode, hash);
+       else if (r == 2)
+               r = snprintf(integrity, MAX_CIPHER_LEN, "%s-%s", mode, hash);
        else if (r == 1)
                r = snprintf(integrity, MAX_CIPHER_LEN, "%s", mode);
        else
                return -EINVAL;
 
-       if (r < 0 || r == MAX_CIPHER_LEN)
+       if (r < 0 || r >= MAX_CIPHER_LEN)
                return -EINVAL;
 
        return 0;
@@ -174,3 +177,10 @@ ssize_t crypt_hex_to_bytes(const char *hex, char **result, int safe_alloc)
        *result = bytes;
        return i;
 }
+
+bool crypt_is_cipher_null(const char *cipher_spec)
+{
+       if (!cipher_spec)
+               return false;
+       return (strstr(cipher_spec, "cipher_null") || !strcmp(cipher_spec, "null"));
+}
index 32b77cb..9b74969 100644 (file)
@@ -2,8 +2,8 @@
  * utils_crypt - cipher utilities for cryptsetup
  *
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -23,6 +23,7 @@
 #ifndef _UTILS_CRYPT_H
 #define _UTILS_CRYPT_H
 
+#include <stdbool.h>
 #include <unistd.h>
 
 #define MAX_CIPHER_LEN         32
@@ -38,4 +39,6 @@ int crypt_parse_pbkdf(const char *s, const char **pbkdf);
 
 ssize_t crypt_hex_to_bytes(const char *hex, char **result, int safe_alloc);
 
+bool crypt_is_cipher_null(const char *cipher_spec);
+
 #endif /* _UTILS_CRYPT_H */
index 75449c0..f4bb058 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -162,6 +162,9 @@ static int device_ready(struct crypt_device *cd, struct device *device)
        struct stat st;
        size_t tmp_size;
 
+       if (!device)
+               return -EINVAL;
+
        if (device->o_direct) {
                log_dbg(cd, "Trying to open and read device %s with direct-io.",
                        device_path(device));
@@ -217,6 +220,9 @@ static int _open_locked(struct crypt_device *cd, struct device *device, int flag
 {
        int fd;
 
+       if (!device)
+               return -EINVAL;
+
        log_dbg(cd, "Opening locked device %s", device_path(device));
 
        if ((flags & O_ACCMODE) != O_RDONLY && device_locked_readonly(device->lh)) {
@@ -300,6 +306,9 @@ static int device_open_internal(struct crypt_device *cd, struct device *device,
 
 int device_open(struct crypt_device *cd, struct device *device, int flags)
 {
+       if (!device)
+               return -EINVAL;
+
        assert(!device_locked(device->lh));
        return device_open_internal(cd, device, flags);
 }
@@ -354,6 +363,9 @@ void device_release_excl(struct crypt_device *cd, struct device *device)
 
 int device_open_locked(struct crypt_device *cd, struct device *device, int flags)
 {
+       if (!device)
+               return -EINVAL;
+
        assert(!crypt_metadata_locking_enabled() || device_locked(device->lh));
        return device_open_internal(cd, device, flags);
 }
@@ -520,10 +532,16 @@ void device_topology_alignment(struct crypt_device *cd,
 
        temp_alignment = (unsigned long)min_io_size;
 
-       /* Ignore bogus opt-io that could break alignment */
+       /*
+        * Ignore bogus opt-io that could break alignment.
+        * Also real opt_io_size should be aligned to minimal page size (4k).
+        * Some bogus USB enclosures reports wrong data here.
+        */
        if ((temp_alignment < (unsigned long)opt_io_size) &&
-           !((unsigned long)opt_io_size % temp_alignment))
+           !((unsigned long)opt_io_size % temp_alignment) && !MISALIGNED_4K(opt_io_size))
                temp_alignment = (unsigned long)opt_io_size;
+       else if (opt_io_size && (opt_io_size != min_io_size))
+               log_err(cd, _("Ignoring bogus optimal-io size for data device (%u bytes)."), opt_io_size);
 
        /* If calculated alignment is multiple of default, keep default */
        if (temp_alignment && (default_alignment % temp_alignment))
@@ -583,8 +601,11 @@ int device_size(struct device *device, uint64_t *size)
        struct stat st;
        int devfd, r = -EINVAL;
 
+       if (!device)
+               return -EINVAL;
+
        devfd = open(device->path, O_RDONLY);
-       if(devfd == -1)
+       if (devfd == -1)
                return -EINVAL;
 
        if (fstat(devfd, &st) < 0)
@@ -606,6 +627,9 @@ int device_fallocate(struct device *device, uint64_t size)
        struct stat st;
        int devfd, r = -EINVAL;
 
+       if (!device)
+               return -EINVAL;
+
        devfd = open(device_path(device), O_RDWR);
        if (devfd == -1)
                return -EINVAL;
@@ -846,22 +870,30 @@ size_t size_round_up(size_t size, size_t block)
 
 void device_disable_direct_io(struct device *device)
 {
-       device->o_direct = 0;
+       if (device)
+               device->o_direct = 0;
 }
 
 int device_direct_io(const struct device *device)
 {
-       return device->o_direct;
+       return device ? device->o_direct : 0;
 }
 
-static dev_t device_devno(const struct device *device)
+static int device_compare_path(const char *path1, const char *path2)
 {
-       struct stat st;
+       struct stat st_path1, st_path2;
 
-       if (stat(device->path, &st) || !S_ISBLK(st.st_mode))
-               return 0;
+       if (stat(path1, &st_path1 ) < 0 || stat(path2, &st_path2 ) < 0)
+               return -EINVAL;
+
+       if (S_ISBLK(st_path1.st_mode) && S_ISBLK(st_path2.st_mode))
+               return (st_path1.st_rdev == st_path2.st_rdev) ? 1 : 0;
 
-       return st.st_rdev;
+       if (S_ISREG(st_path1.st_mode) && S_ISREG(st_path2.st_mode))
+               return (st_path1.st_ino == st_path2.st_ino &&
+                       st_path1.st_dev == st_path2.st_dev) ? 1 : 0;
+
+       return 0;
 }
 
 int device_is_identical(struct device *device1, struct device *device2)
@@ -872,21 +904,19 @@ int device_is_identical(struct device *device1, struct device *device2)
        if (device1 == device2)
                return 1;
 
-       if (device1->init_done && device2->init_done)
-               return (device_devno(device1) == device_devno(device2));
-       else if (device1->init_done || device2->init_done)
-               return 0;
-
        if (!strcmp(device_path(device1), device_path(device2)))
                return 1;
 
-       return 0;
+       return device_compare_path(device_path(device1), device_path(device2));
 }
 
 int device_is_rotational(struct device *device)
 {
        struct stat st;
 
+       if (!device)
+               return -EINVAL;
+
        if (stat(device_path(device), &st) < 0)
                return -EINVAL;
 
@@ -900,6 +930,9 @@ size_t device_alignment(struct device *device)
 {
        int devfd;
 
+       if (!device)
+               return -EINVAL;
+
        if (!device->alignment) {
                devfd = open(device_path(device), O_RDONLY);
                if (devfd != -1) {
@@ -913,17 +946,18 @@ size_t device_alignment(struct device *device)
 
 void device_set_lock_handle(struct device *device, struct crypt_lock_handle *h)
 {
-       device->lh = h;
+       if (device)
+               device->lh = h;
 }
 
 struct crypt_lock_handle *device_get_lock_handle(struct device *device)
 {
-       return device->lh;
+       return device ? device->lh : NULL;
 }
 
 int device_read_lock(struct crypt_device *cd, struct device *device)
 {
-       if (!crypt_metadata_locking_enabled())
+       if (!device || !crypt_metadata_locking_enabled())
                return 0;
 
        if (device_read_lock_internal(cd, device))
@@ -934,7 +968,7 @@ int device_read_lock(struct crypt_device *cd, struct device *device)
 
 int device_write_lock(struct crypt_device *cd, struct device *device)
 {
-       if (!crypt_metadata_locking_enabled())
+       if (!device || !crypt_metadata_locking_enabled())
                return 0;
 
        assert(!device_locked(device->lh) || !device_locked_readonly(device->lh));
@@ -944,7 +978,7 @@ int device_write_lock(struct crypt_device *cd, struct device *device)
 
 void device_read_unlock(struct crypt_device *cd, struct device *device)
 {
-       if (!crypt_metadata_locking_enabled())
+       if (!device || !crypt_metadata_locking_enabled())
                return;
 
        assert(device_locked(device->lh));
@@ -954,7 +988,7 @@ void device_read_unlock(struct crypt_device *cd, struct device *device)
 
 void device_write_unlock(struct crypt_device *cd, struct device *device)
 {
-       if (!crypt_metadata_locking_enabled())
+       if (!device || !crypt_metadata_locking_enabled())
                return;
 
        assert(device_locked(device->lh) && !device_locked_readonly(device->lh));
index dac8315..36e6496 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Metadata on-disk locking for processes serialization
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -106,7 +106,7 @@ static int open_lock_dir(struct crypt_device *cd, const char *dir, const char *b
        lockdfd = openat(dirfd, base, O_RDONLY | O_NOFOLLOW | O_DIRECTORY | O_CLOEXEC);
        if (lockdfd < 0) {
                if (errno == ENOENT) {
-                       log_std(cd, _("WARNING: Locking directory %s/%s is missing!\n"), dir, base);
+                       log_dbg(cd, _("Locking directory %s/%s will be created with default compiled-in permissions."), dir, base);
 
                        /* success or failure w/ errno == EEXIST either way just try to open the 'base' directory again */
                        if (mkdirat(dirfd, base, DEFAULT_LUKS2_LOCK_DIR_PERMS) && errno != EEXIST)
index 41d0934..d3b55a0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Metadata on-disk locking for processes serialization
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -22,6 +22,8 @@
 #ifndef _CRYPTSETUP_UTILS_LOCKING_H
 #define _CRYPTSETUP_UTILS_LOCKING_H
 
+#include <stdbool.h>
+
 struct crypt_device;
 struct crypt_lock_handle;
 struct device;
index b6c8975..44d7028 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -367,7 +367,9 @@ char *crypt_get_base_device(const char *dev_path)
        if (dm_is_dm_kernel_name(devname))
                return NULL;
 
-       snprintf(part_path, sizeof(part_path), "/dev/%s", devname);
+       if (snprintf(part_path, sizeof(part_path), "/dev/%s", devname) < 0)
+               return NULL;
+
        return strdup(part_path);
 }
 
index 1501eb5..d5a2b43 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -25,7 +25,8 @@
 #define _UTILS_DM_H
 
 /* device-mapper library helpers */
-#include <inttypes.h>
+#include <stddef.h>
+#include <stdint.h>
 
 struct crypt_device;
 struct volume_key;
@@ -69,6 +70,9 @@ static inline uint32_t act2dmflags(uint32_t act_flags)
 #define DM_BITLK_ELEPHANT_SUPPORTED (1 << 21) /* Elephant diffuser for BITLK supported */
 #define DM_VERITY_SIGNATURE_SUPPORTED (1 << 22) /* Verity option root_hash_sig_key_desc supported */
 #define DM_INTEGRITY_DISCARDS_SUPPORTED (1 << 23) /* dm-integrity discards/TRIM option is supported */
+#define DM_VERITY_PANIC_CORRUPTION_SUPPORTED (1 << 24) /* dm-verity panic on corruption  */
+#define DM_CRYPT_NO_WORKQUEUE_SUPPORTED (1 << 25) /* dm-crypt suppot for bypassing workqueues  */
+#define DM_INTEGRITY_FIX_HMAC_SUPPORTED (1 << 26) /* hmac covers also superblock */
 
 typedef enum { DM_CRYPT = 0, DM_VERITY, DM_INTEGRITY, DM_LINEAR, DM_ERROR, DM_ZERO, DM_UNKNOWN } dm_target_type;
 enum tdirection { TARGET_SET = 1, TARGET_QUERY };
@@ -118,9 +122,8 @@ struct dm_target {
                const char *root_hash_sig_key_desc;
 
                uint64_t hash_offset;   /* hash offset in blocks (not header) */
-               uint64_t hash_blocks;   /* size of hash device (in hash blocks) */
                uint64_t fec_offset;    /* FEC offset in blocks (not header) */
-               uint64_t fec_blocks;    /* size of FEC device (in hash blocks) */
+               uint64_t fec_blocks;    /* FEC blocks covering data + hash + padding (foreign metadata)*/
                struct crypt_params_verity *vp;
        } verity;
        struct {
@@ -146,6 +149,8 @@ struct dm_target {
                struct device *meta_device;
 
                bool fix_padding;
+               bool fix_hmac;
+               bool legacy_recalc;
        } integrity;
        struct {
                uint64_t offset;
@@ -185,8 +190,8 @@ int dm_crypt_target_set(struct dm_target *tgt, uint64_t seg_offset, uint64_t seg
        uint32_t tag_size, uint32_t sector_size);
 int dm_verity_target_set(struct dm_target *tgt, uint64_t seg_offset, uint64_t seg_size,
        struct device *data_device, struct device *hash_device, struct device *fec_device,
-       const char *root_hash, uint32_t root_hash_size, const char *root_hash_sig_key_desc,
-       uint64_t hash_offset_block, uint64_t hash_blocks, struct crypt_params_verity *vp);
+       const char *root_hash, uint32_t root_hash_size, const charroot_hash_sig_key_desc,
+       uint64_t hash_offset_block, uint64_t fec_blocks, struct crypt_params_verity *vp);
 int dm_integrity_target_set(struct crypt_device *cd,
        struct dm_target *tgt, uint64_t seg_offset, uint64_t seg_size,
        struct device *meta_device,
index 34b2dae..4fa22fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * FIPS mode utilities
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 2388ba6..51b110b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * FIPS mode utilities
  *
- * Copyright (C) 2011-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2011-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 3fae22b..2681b8f 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 4e64d86..3c92549 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 6e22c19..fdef674 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * kernel keyring utilities
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 37a5ac6..10818e0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * kernel keyring syscall wrappers
  *
- * Copyright (C) 2016-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2016-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 681c123..b5394de 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * loopback block device utilities
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -237,8 +237,9 @@ static char *_sysfs_backing_file(const char *loop)
        if (stat(loop, &st) || !S_ISBLK(st.st_mode))
                return NULL;
 
-       snprintf(buf, sizeof(buf), "/sys/dev/block/%d:%d/loop/backing_file",
-                major(st.st_rdev), minor(st.st_rdev));
+       if (snprintf(buf, sizeof(buf), "/sys/dev/block/%d:%d/loop/backing_file",
+                    major(st.st_rdev), minor(st.st_rdev)) < 0)
+               return NULL;
 
        fd = open(buf, O_RDONLY);
        if (fd < 0)
index a3572dc..cc445d4 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * loopback block device utilities
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 967bb2c..575d841 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * utils_pbkdf - PBKDF settings for libcryptsetup
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 8c1fb5c..6137006 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * utils_safe_memory - safe memory helpers
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -66,6 +66,7 @@ void *crypt_safe_alloc(size_t size)
 void crypt_safe_free(void *data)
 {
        struct safe_allocation *alloc;
+       volatile size_t *s;
 
        if (!data)
                return;
@@ -75,7 +76,8 @@ void crypt_safe_free(void *data)
 
        crypt_safe_memzero(data, alloc->size);
 
-       alloc->size = 0x55aa55aa;
+       s = (volatile size_t *)&alloc->size;
+       *s = 0x55aa55aa;
        free(alloc);
 }
 
index b7e816b..80d275b 100644 (file)
@@ -2,7 +2,7 @@
  * Generic wrapper for storage functions
  * (experimental only)
  *
- * Copyright (C) 2018-2020, Ondrej Kozina
+ * Copyright (C) 2018-2021, Ondrej Kozina
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -62,7 +62,7 @@ static int crypt_storage_backend_init(struct crypt_device *cd,
        struct crypt_storage *s;
 
        /* iv_start, sector_size */
-       r = crypt_storage_init(&s, sector_size, cipher, cipher_mode, vk->key, vk->keylength);
+       r = crypt_storage_init(&s, sector_size, cipher, cipher_mode, vk->key, vk->keylength, flags & LARGE_IV);
        if (r)
                return r;
 
@@ -199,7 +199,7 @@ int crypt_storage_wrapper_init(struct crypt_device *cd,
                goto err;
        }
 
-       if (!strcmp(_cipher, "cipher_null")) {
+       if (crypt_is_cipher_null(_cipher)) {
                log_dbg(cd, "Requested cipher_null, switching to noop wrapper.");
                w->type = NONE;
                *cw = w;
index aaaa824..ec55ec2 100644 (file)
@@ -2,7 +2,7 @@
  * Generic wrapper for storage functions
  * (experimental only)
  *
- * Copyright (C) 2018-2020, Ondrej Kozina
+ * Copyright (C) 2018-2021, Ondrej Kozina
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -22,6 +22,9 @@
 #ifndef _UTILS_STORAGE_WRAPPERS_H
 #define _UTILS_STORAGE_WRAPPERS_H
 
+#include <stdint.h>
+#include <sys/types.h>
+
 struct crypt_storage_wrapper;
 struct device;
 struct volume_key;
@@ -31,6 +34,7 @@ struct crypt_device;
 #define DISABLE_KCAPI  (1 << 1)
 #define DISABLE_DMCRYPT        (1 << 2)
 #define OPEN_READONLY  (1 << 3)
+#define LARGE_IV       (1 << 4)
 
 typedef enum {
        NONE = 0,
index 96dff29..2d84fc0 100644 (file)
@@ -2,8 +2,8 @@
  * utils_wipe - wipe a device
  *
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -26,7 +26,7 @@
 
 /*
  * Wipe using Peter Gutmann method described in
- * http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html
+ * https://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html
  * Note: used only for rotational device (and even there it is not needed today...)
  */
 static void wipeSpecial(char *buffer, size_t buffer_size, unsigned int turn)
index 9171814..d44a230 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2004 Phil Karn, KA9Q
  * libcryptsetup modifications
- *   Copyright (C) 2017-2020 Red Hat, Inc. All rights reserved.
+ *   Copyright (C) 2017-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 920475e..aa27a64 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2002, Phil Karn, KA9Q
  * libcryptsetup modifications
- *   Copyright (C) 2017-2020 Red Hat, Inc. All rights reserved.
+ *   Copyright (C) 2017-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 00ebb8b..cab6ae2 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2002, Phil Karn, KA9Q
  * libcryptsetup modifications
- *   Copyright (C) 2017-2020 Red Hat, Inc. All rights reserved.
+ *   Copyright (C) 2017-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index af31784..278f34a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * dm-verity volume handling
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <netinet/in.h>
@@ -145,6 +146,13 @@ int VERITY_read_sb(struct crypt_device *cd,
        return 0;
 }
 
+static void _to_lower(char *str)
+{
+       for(; *str; str++)
+               if (isupper(*str))
+                       *str = tolower(*str);
+}
+
 /* Write verity superblock to disk */
 int VERITY_write_sb(struct crypt_device *cd,
                   uint64_t sb_offset,
@@ -154,6 +162,7 @@ int VERITY_write_sb(struct crypt_device *cd,
        struct device *device = crypt_metadata_device(cd);
        struct verity_sb sb = {};
        ssize_t hdr_size = sizeof(struct verity_sb);
+       size_t block_size;
        char *algorithm;
        uuid_t uuid;
        int r, devfd;
@@ -173,6 +182,13 @@ int VERITY_write_sb(struct crypt_device *cd,
                return -EINVAL;
        }
 
+       /* Avoid possible increasing of image size - FEC could fail later because of it */
+       block_size = device_block_size(cd, device);
+       if (block_size > params->hash_block_size) {
+               device_disable_direct_io(device);
+               block_size = params->hash_block_size;
+       }
+
        devfd = device_open(cd, device, O_RDWR);
        if (devfd < 0) {
                log_err(cd, _("Cannot open device %s."), device_path(device));
@@ -186,13 +202,17 @@ int VERITY_write_sb(struct crypt_device *cd,
        sb.hash_block_size = cpu_to_le32(params->hash_block_size);
        sb.salt_size       = cpu_to_le16(params->salt_size);
        sb.data_blocks     = cpu_to_le64(params->data_size);
+
+       /* Kernel always use lower-case */
        algorithm = (char *)sb.algorithm;
-       algorithm[sizeof(sb.algorithm)-1] = '\0';
        strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)-1);
+       algorithm[sizeof(sb.algorithm)-1] = '\0';
+       _to_lower(algorithm);
+
        memcpy(sb.salt, params->salt, params->salt_size);
        memcpy(sb.uuid, uuid, sizeof(sb.uuid));
 
-       r = write_lseek_blockwise(devfd, device_block_size(cd, device), device_alignment(device),
+       r = write_lseek_blockwise(devfd, block_size, device_alignment(device),
                                  (char*)&sb, hdr_size, sb_offset) < hdr_size ? -EIO : 0;
        if (r)
                log_err(cd, _("Error during update of verity header on device %s."),
@@ -241,7 +261,7 @@ int VERITY_activate(struct crypt_device *cd,
 {
        uint32_t dmv_flags;
        unsigned int fec_errors = 0;
-       int r;
+       int r, v;
        struct crypt_dm_active_device dmd = {
                .size = verity_hdr->data_size * verity_hdr->data_block_size / 512,
                .flags = activation_flags,
@@ -260,14 +280,19 @@ int VERITY_activate(struct crypt_device *cd,
                log_dbg(cd, "Verification of data in userspace required.");
                r = VERITY_verify(cd, verity_hdr, root_hash, root_hash_size);
 
-               if (r == -EPERM && fec_device) {
+               if ((r == -EPERM || r == -EFAULT) && fec_device) {
+                       v = r;
                        log_dbg(cd, "Verification failed, trying to repair with FEC device.");
                        r = VERITY_FEC_process(cd, verity_hdr, fec_device, 1, &fec_errors);
                        if (r < 0)
                                log_err(cd, _("Errors cannot be repaired with FEC device."));
-                       else if (fec_errors)
+                       else if (fec_errors) {
                                log_err(cd, _("Found %u repairable errors with FEC device."),
                                        fec_errors);
+                               /* If root hash failed, we cannot be sure it was properly repaired */
+                       }
+                       if (v == -EFAULT)
+                               r = -EPERM;
                }
 
                if (r < 0)
@@ -298,7 +323,7 @@ int VERITY_activate(struct crypt_device *cd,
                        crypt_metadata_device(cd), fec_device, root_hash,
                        root_hash_size, signature_description,
                        VERITY_hash_offset_block(verity_hdr),
-                       VERITY_hash_blocks(cd, verity_hdr), verity_hdr);
+                       VERITY_FEC_blocks(cd, fec_device, verity_hdr), verity_hdr);
 
        if (r)
                return r;
index 0b7f0cc..2269649 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * dm-verity volume handling
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -71,6 +71,10 @@ uint64_t VERITY_hash_offset_block(struct crypt_params_verity *params);
 
 uint64_t VERITY_hash_blocks(struct crypt_device *cd, struct crypt_params_verity *params);
 
+uint64_t VERITY_FEC_blocks(struct crypt_device *cd,
+                          struct device *fec_device,
+                          struct crypt_params_verity *params);
+
 int VERITY_UUID_generate(struct crypt_device *cd, char **uuid_string);
 
 #endif
index a8a5e86..e076c97 100644 (file)
@@ -2,7 +2,7 @@
  * dm-verity Forward Error Correction (FEC) support
  *
  * Copyright (C) 2015 Google, Inc. All rights reserved.
- * Copyright (C) 2017-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2017-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -134,8 +134,11 @@ static int FEC_process_inputs(struct crypt_device *cd,
 
        /* calculate the total area covered by error correction codes */
        ctx.size = 0;
-       for (n = 0; n < ctx.ninputs; ++n)
+       for (n = 0; n < ctx.ninputs; ++n) {
+               log_dbg(cd, "FEC input %s, offset %" PRIu64 " [bytes], length %" PRIu64 " [bytes]",
+                       device_path(ctx.inputs[n].device), ctx.inputs[n].start, ctx.inputs[n].count);
                ctx.size += ctx.inputs[n].count;
+       }
 
        /* each byte in a data block is covered by a different code */
        ctx.blocks = FEC_div_round_up(ctx.size, ctx.block_size);
@@ -203,8 +206,8 @@ int VERITY_FEC_process(struct crypt_device *cd,
                      struct device *fec_device, int check_fec,
                      unsigned int *errors)
 {
-       int r;
-       int fd = -1;
+       int r = -EIO, fd = -1;
+       size_t ninputs = FEC_INPUT_DEVICES;
        struct fec_input_device inputs[FEC_INPUT_DEVICES] = {
                {
                        .device = crypt_data_device(cd),
@@ -214,7 +217,8 @@ int VERITY_FEC_process(struct crypt_device *cd,
                },{
                        .device = crypt_metadata_device(cd),
                        .fd = -1,
-                       .start = VERITY_hash_offset_block(params) * params->data_block_size
+                       .start = VERITY_hash_offset_block(params) * params->data_block_size,
+                       .count = (VERITY_FEC_blocks(cd, fec_device, params) - params->data_size) * params->data_block_size
                }
        };
 
@@ -230,7 +234,12 @@ int VERITY_FEC_process(struct crypt_device *cd,
                return -EINVAL;
        }
 
-       r = -EIO;
+       if (!inputs[0].count) {
+               log_err(cd, _("Invalid FEC segment length."));
+               return -EINVAL;
+       }
+       if (!inputs[1].count)
+               ninputs--;
 
        if (check_fec)
                fd = open(device_path(fec_device), O_RDONLY);
@@ -259,16 +268,7 @@ int VERITY_FEC_process(struct crypt_device *cd,
                goto out;
        }
 
-       /* cover the entire hash device starting from hash_offset */
-       r = device_size(inputs[1].device, &inputs[1].count);
-       if (r) {
-               log_err(cd, _("Failed to determine size for device %s."),
-                               device_path(inputs[1].device));
-               goto out;
-       }
-       inputs[1].count -= inputs[1].start;
-
-       r = FEC_process_inputs(cd, params, inputs, FEC_INPUT_DEVICES, fd, check_fec, errors);
+       r = FEC_process_inputs(cd, params, inputs, ninputs, fd, check_fec, errors);
 out:
        if (inputs[0].fd != -1)
                close(inputs[0].fd);
@@ -279,3 +279,38 @@ out:
 
        return r;
 }
+
+uint64_t VERITY_FEC_blocks(struct crypt_device *cd,
+                          struct device *fec_device,
+                          struct crypt_params_verity *params)
+{
+       uint64_t blocks = 0;
+
+       /*
+       * FEC covers this data:
+       *     | protected data | hash area | padding (optional foreign metadata) |
+       *
+       * If hash device is in a separate image, metadata covers the whole rest of the image after hash area.
+       * If hash and FEC device is in the image, metadata ends on the FEC area offset.
+       */
+       if (device_is_identical(crypt_metadata_device(cd), fec_device) > 0) {
+               log_dbg(cd, "FEC and hash device is the same.");
+                blocks = params->fec_area_offset;
+       } else {
+               /* cover the entire hash device starting from hash_offset */
+               if (device_size(crypt_metadata_device(cd), &blocks)) {
+                       log_err(cd, _("Failed to determine size for device %s."),
+                                       device_path(crypt_metadata_device(cd)));
+                       return 0;
+               }
+       }
+
+       blocks /= params->data_block_size;
+       if (blocks)
+               blocks -= VERITY_hash_offset_block(params);
+
+       /* Protected data */
+       blocks += params->data_size;
+
+       return blocks;
+}
index 6142430..a493781 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * dm-verity volume handling
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
  *
  * This file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -89,20 +89,12 @@ out:
        return r;
 }
 
-static int mult_overflow(off_t *u, off_t b, size_t size)
-{
-       *u = (uint64_t)b * size;
-       if ((off_t)(*u / size) != b || (off_t)*u < 0)
-               return 1;
-       return 0;
-}
-
 static int hash_levels(size_t hash_block_size, size_t digest_size,
-                      off_t data_file_blocks, off_t *hash_position, int *levels,
-                      off_t *hash_level_block, off_t *hash_level_size)
+                      uint64_t data_file_blocks, uint64_t *hash_position, int *levels,
+                      uint64_t *hash_level_block, uint64_t *hash_level_size)
 {
        size_t hash_per_block_bits;
-       off_t s, s_shift;
+       uint64_t s, s_shift;
        int i;
 
        if (!digest_size)
@@ -127,11 +119,10 @@ static int hash_levels(size_t hash_block_size, size_t digest_size,
                s_shift = (i + 1) * hash_per_block_bits;
                if (s_shift > 63)
                        return -EINVAL;
-               s = (data_file_blocks + ((off_t)1 << s_shift) - 1) >> ((i + 1) * hash_per_block_bits);
+               s = (data_file_blocks + ((uint64_t)1 << s_shift) - 1) >> ((i + 1) * hash_per_block_bits);
                if (hash_level_size)
                        hash_level_size[i] = s;
-               if ((*hash_position + s) < *hash_position ||
-                   (*hash_position + s) < 0)
+               if ((*hash_position + s) < *hash_position)
                        return -EINVAL;
                *hash_position += s;
        }
@@ -140,9 +131,9 @@ static int hash_levels(size_t hash_block_size, size_t digest_size,
 }
 
 static int create_or_verify(struct crypt_device *cd, FILE *rd, FILE *wr,
-                                  off_t data_block, size_t data_block_size,
-                                  off_t hash_block, size_t hash_block_size,
-                                  off_t blocks, int version,
+                                  uint64_t data_block, size_t data_block_size,
+                                  uint64_t hash_block, size_t hash_block_size,
+                                  uint64_t blocks, int version,
                                   const char *hash_name, int verify,
                                   char *calculated_digest, size_t digest_size,
                                   const char *salt, size_t salt_size)
@@ -152,14 +143,14 @@ static int create_or_verify(struct crypt_device *cd, FILE *rd, FILE *wr,
        char read_digest[digest_size];
        size_t hash_per_block = 1 << get_bits_down(hash_block_size / digest_size);
        size_t digest_size_full = 1 << get_bits_up(digest_size);
-       off_t blocks_to_write = (blocks + hash_per_block - 1) / hash_per_block;
-       off_t seek_rd, seek_wr;
+       uint64_t blocks_to_write = (blocks + hash_per_block - 1) / hash_per_block;
+       uint64_t seek_rd, seek_wr;
        size_t left_bytes;
        unsigned i;
        int r;
 
-       if (mult_overflow(&seek_rd, data_block, data_block_size) ||
-           mult_overflow(&seek_wr, hash_block, hash_block_size)) {
+       if (uint64_mult_overflow(&seek_rd, data_block, data_block_size) ||
+           uint64_mult_overflow(&seek_wr, hash_block, hash_block_size)) {
                log_err(cd, _("Device offset overflow."));
                return -EINVAL;
        }
@@ -241,86 +232,68 @@ static int create_or_verify(struct crypt_device *cd, FILE *rd, FILE *wr,
        return 0;
 }
 
-static int VERITY_create_or_verify_hash(struct crypt_device *cd,
-       int verify,
-       int version,
-       const char *hash_name,
-       struct device *hash_device,
-       struct device *data_device,
-       size_t hash_block_size,
-       size_t data_block_size,
-       off_t data_blocks,
-       off_t hash_position,
-       char *root_hash,
-       size_t digest_size,
-       const char *salt,
-       size_t salt_size)
+static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify,
+       struct crypt_params_verity *params,
+       char *root_hash, size_t digest_size)
 {
        char calculated_digest[digest_size];
        FILE *data_file = NULL;
        FILE *hash_file = NULL, *hash_file_2;
-       off_t hash_level_block[VERITY_MAX_LEVELS];
-       off_t hash_level_size[VERITY_MAX_LEVELS];
-       off_t data_file_blocks;
-       off_t data_device_size = 0, hash_device_size = 0;
+       uint64_t hash_level_block[VERITY_MAX_LEVELS];
+       uint64_t hash_level_size[VERITY_MAX_LEVELS];
+       uint64_t data_file_blocks;
+       uint64_t data_device_offset_max = 0, hash_device_offset_max = 0;
+       uint64_t hash_position = VERITY_hash_offset_block(params);
        uint64_t dev_size;
        int levels, i, r;
 
        log_dbg(cd, "Hash %s %s, data device %s, data blocks %" PRIu64
                ", hash_device %s, offset %" PRIu64 ".",
-               verify ? "verification" : "creation", hash_name,
-               device_path(data_device), data_blocks,
-               device_path(hash_device), hash_position);
-
-       if (data_blocks < 0 || hash_position < 0) {
-               log_err(cd, _("Invalid size parameters for verity device."));
-               return -EINVAL;
-       }
+               verify ? "verification" : "creation", params->hash_name,
+               device_path(crypt_data_device(cd)), params->data_size,
+               device_path(crypt_metadata_device(cd)), hash_position);
 
-       if (!data_blocks) {
-               r = device_size(data_device, &dev_size);
+       if (!params->data_size) {
+               r = device_size(crypt_data_device(cd), &dev_size);
                if (r < 0)
                        return r;
 
-               data_file_blocks = dev_size / data_block_size;
+               data_file_blocks = dev_size / params->data_block_size;
        } else
-               data_file_blocks = data_blocks;
+               data_file_blocks = params->data_size;
 
-       if (mult_overflow(&data_device_size, data_blocks, data_block_size)) {
+       if (uint64_mult_overflow(&data_device_offset_max, params->data_size, params->data_block_size)) {
                log_err(cd, _("Device offset overflow."));
                return -EINVAL;
        }
+       log_dbg(cd, "Data device size required: %" PRIu64 " bytes.", data_device_offset_max);
 
-       if (hash_levels(hash_block_size, digest_size, data_file_blocks, &hash_position,
+       if (hash_levels(params->hash_block_size, digest_size, data_file_blocks, &hash_position,
                &levels, &hash_level_block[0], &hash_level_size[0])) {
                log_err(cd, _("Hash area overflow."));
                return -EINVAL;
        }
-
-       log_dbg(cd, "Using %d hash levels.", levels);
-
-       if (mult_overflow(&hash_device_size, hash_position, hash_block_size)) {
+       if (uint64_mult_overflow(&hash_device_offset_max, hash_position, params->hash_block_size)) {
                log_err(cd, _("Device offset overflow."));
                return -EINVAL;
        }
+       log_dbg(cd, "Hash device size required: %" PRIu64 " bytes.",
+               hash_device_offset_max - params->hash_area_offset);
+       log_dbg(cd, "Using %d hash levels.", levels);
 
-       log_dbg(cd, "Data device size required: %" PRIu64 " bytes.",
-               data_device_size);
-       data_file = fopen(device_path(data_device), "r");
+       data_file = fopen(device_path(crypt_data_device(cd)), "r");
        if (!data_file) {
                log_err(cd, _("Cannot open device %s."),
-                       device_path(data_device)
+                       device_path(crypt_data_device(cd))
                );
                r = -EIO;
                goto out;
        }
 
-       log_dbg(cd, "Hash device size required: %" PRIu64 " bytes.",
-               hash_device_size);
-       hash_file = fopen(device_path(hash_device), verify ? "r" : "r+");
+       hash_file = fopen(device_path(crypt_metadata_device(cd)), verify ? "r" : "r+");
        if (!hash_file) {
                log_err(cd, _("Cannot open device %s."),
-                       device_path(hash_device));
+                       device_path(crypt_metadata_device(cd)));
                r = -EIO;
                goto out;
        }
@@ -330,25 +303,25 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd,
        for (i = 0; i < levels; i++) {
                if (!i) {
                        r = create_or_verify(cd, data_file, hash_file,
-                                                   0, data_block_size,
-                                                   hash_level_block[i], hash_block_size,
-                                                   data_file_blocks, version, hash_name, verify,
-                                                   calculated_digest, digest_size, salt, salt_size);
+                                                   0, params->data_block_size,
+                                                   hash_level_block[i], params->hash_block_size,
+                                                   data_file_blocks, params->hash_type, params->hash_name, verify,
+                                                   calculated_digest, digest_size, params->salt, params->salt_size);
                        if (r)
                                goto out;
                } else {
-                       hash_file_2 = fopen(device_path(hash_device), "r");
+                       hash_file_2 = fopen(device_path(crypt_metadata_device(cd)), "r");
                        if (!hash_file_2) {
                                log_err(cd, _("Cannot open device %s."),
-                                       device_path(hash_device));
+                                       device_path(crypt_metadata_device(cd)));
                                r = -EIO;
                                goto out;
                        }
                        r = create_or_verify(cd, hash_file_2, hash_file,
-                                                   hash_level_block[i - 1], hash_block_size,
-                                                   hash_level_block[i], hash_block_size,
-                                                   hash_level_size[i - 1], version, hash_name, verify,
-                                                   calculated_digest, digest_size, salt, salt_size);
+                                                   hash_level_block[i - 1], params->hash_block_size,
+                                                   hash_level_block[i], params->hash_block_size,
+                                                   hash_level_size[i - 1], params->hash_type, params->hash_name, verify,
+                                                   calculated_digest, digest_size, params->salt, params->salt_size);
                        fclose(hash_file_2);
                        if (r)
                                goto out;
@@ -357,23 +330,23 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd,
 
        if (levels)
                r = create_or_verify(cd, hash_file, NULL,
-                                           hash_level_block[levels - 1], hash_block_size,
-                                           0, hash_block_size,
-                                           1, version, hash_name, verify,
-                                           calculated_digest, digest_size, salt, salt_size);
+                                           hash_level_block[levels - 1], params->hash_block_size,
+                                           0, params->hash_block_size,
+                                           1, params->hash_type, params->hash_name, verify,
+                                           calculated_digest, digest_size, params->salt, params->salt_size);
        else
                r = create_or_verify(cd, data_file, NULL,
-                                           0, data_block_size,
-                                           0, hash_block_size,
-                                           data_file_blocks, version, hash_name, verify,
-                                           calculated_digest, digest_size, salt, salt_size);
+                                           0, params->data_block_size,
+                                           0, params->hash_block_size,
+                                           data_file_blocks, params->hash_type, params->hash_name, verify,
+                                           calculated_digest, digest_size, params->salt, params->salt_size);
 out:
        if (verify) {
                if (r)
                        log_err(cd, _("Verification of data area failed."));
                else {
                        log_dbg(cd, "Verification of data area succeeded.");
-                       r = memcmp(root_hash, calculated_digest, digest_size) ? -EPERM : 0;
+                       r = memcmp(root_hash, calculated_digest, digest_size) ? -EFAULT : 0;
                        if (r)
                                log_err(cd, _("Verification of root hash failed."));
                        else
@@ -403,19 +376,7 @@ int VERITY_verify(struct crypt_device *cd,
                  const char *root_hash,
                  size_t root_hash_size)
 {
-       return VERITY_create_or_verify_hash(cd, 1,
-               verity_hdr->hash_type,
-               verity_hdr->hash_name,
-               crypt_metadata_device(cd),
-               crypt_data_device(cd),
-               verity_hdr->hash_block_size,
-               verity_hdr->data_block_size,
-               verity_hdr->data_size,
-               VERITY_hash_offset_block(verity_hdr),
-               CONST_CAST(char*)root_hash,
-               root_hash_size,
-               verity_hdr->salt,
-               verity_hdr->salt_size);
+       return VERITY_create_or_verify_hash(cd, 1, verity_hdr, CONST_CAST(char*)root_hash, root_hash_size);
 }
 
 /* Create verity hash */
@@ -433,24 +394,12 @@ int VERITY_create(struct crypt_device *cd,
                log_err(cd, _("WARNING: Kernel cannot activate device if data "
                              "block size exceeds page size (%u)."), pgsize);
 
-       return VERITY_create_or_verify_hash(cd, 0,
-               verity_hdr->hash_type,
-               verity_hdr->hash_name,
-               crypt_metadata_device(cd),
-               crypt_data_device(cd),
-               verity_hdr->hash_block_size,
-               verity_hdr->data_block_size,
-               verity_hdr->data_size,
-               VERITY_hash_offset_block(verity_hdr),
-               CONST_CAST(char*)root_hash,
-               root_hash_size,
-               verity_hdr->salt,
-               verity_hdr->salt_size);
+       return VERITY_create_or_verify_hash(cd, 0, verity_hdr, CONST_CAST(char*)root_hash, root_hash_size);
 }
 
 uint64_t VERITY_hash_blocks(struct crypt_device *cd, struct crypt_params_verity *params)
 {
-       off_t hash_position = 0;
+       uint64_t hash_position = 0;
        int levels = 0;
 
        if (hash_levels(params->hash_block_size, crypt_get_volume_key_size(cd),
index 4507451..fafaec6 100644 (file)
@@ -2,7 +2,7 @@
  * cryptsetup volume key implementation
  *
  * Copyright (C) 2004-2006 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
old mode 100644 (file)
new mode 100755 (executable)
index 0cb7f90..21e5e07
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-14"
+VERSION="2.4.6 Debian-2.4.6-15"
 package_revision=2.4.6
 
 
@@ -2141,7 +2141,7 @@ include the following information:
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname $scriptversion Debian-2.4.6-14
+       version:        $progname $scriptversion Debian-2.4.6-15
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
index a6d21ae..c4c0294 100644 (file)
@@ -1071,11 +1071,11 @@ _LT_EOF
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+       10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[[012]][[,.]]*)
          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-       10.*)
+       10.*|11.*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
index 3dbb6e1..333ed58 100644 (file)
@@ -1,4 +1,4 @@
-.TH CRYPTSETUP-REENCRYPT "8" "January 2019" "cryptsetup-reencrypt" "Maintenance Commands"
+.TH CRYPTSETUP-REENCRYPT "8" "January 2021" "cryptsetup-reencrypt" "Maintenance Commands"
 .SH NAME
 cryptsetup-reencrypt - tool for offline LUKS device re-encryption
 .SH SYNOPSIS
@@ -285,9 +285,9 @@ Please attach the output of the failed command with the
 .SH AUTHORS
 Cryptsetup-reencrypt was written by Milan Broz <gmazyland@gmail.com>.
 .SH COPYRIGHT
-Copyright \(co 2012-2020 Milan Broz
+Copyright \(co 2012-2021 Milan Broz
 .br
-Copyright \(co 2012-2020 Red Hat, Inc.
+Copyright \(co 2012-2021 Red Hat, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
index bc3fff6..b9082ee 100644 (file)
@@ -1,4 +1,4 @@
-.TH CRYPTSETUP "8" "January 2019" "cryptsetup" "Maintenance Commands"
+.TH CRYPTSETUP "8" "January 2021" "cryptsetup" "Maintenance Commands"
 .SH NAME
 cryptsetup - manage plain dm-crypt and LUKS encrypted volumes
 .SH SYNOPSIS
@@ -63,7 +63,7 @@ remove data. For a full wipe, overwrite the whole partition before
 container creation. If you do not know how to do that, the
 cryptsetup FAQ describes several options.
 
-.SH BASIC COMMANDS
+.SH BASIC ACTIONS
 The following are valid actions for all supported device types.
 
 \fIopen\fR <device> <name> \-\-type <device_type>
@@ -142,11 +142,12 @@ Updates parameters of active device <name> without need to deactivate the device
 devices: LUKS1, LUKS2 (including authenticated encryption), plain crypt
 and loopaes.
 
-Mandatory parametrs are identical to those of an open action for respective
+Mandatory parameters are identical to those of an open action for respective
 device type.
 
 You may change following parameters on all devices \-\-perf\-same_cpu_crypt,
-\-\-perf\-submit_from_crypt_cpus and \-\-allow\-discards.
+\-\-perf\-submit_from_crypt_cpus, \-\-perf-no_read_workqueue, \-\-perf-no_write_workqueue
+and \-\-allow\-discards.
 
 Refreshing device without any optional parameter will refresh the device
 with default setting (respective to device type).
@@ -199,7 +200,7 @@ as soon as possible and mounted (used) before full data area encryption is compl
 
 Action supports following additional \fB<options>\fR [\-\-encrypt, \-\-decrypt, \-\-device\-size,
 \-\-resilience, \-\-resilience-hash, \-\-hotzone-size, \-\-init\-only, \-\-resume\-only,
-\-\-reduce\-device\-size].
+\-\-reduce\-device\-size, \-\-master\-key\-file, \-\-key\-size].
 
 .SH PLAIN MODE
 Plain dm-crypt encrypts the device sector-by-sector with a
@@ -279,7 +280,9 @@ of reading the passphrase from a file you can
 give '-' as file name, which results in the passphrase being read
 from stdin and the safety-question being skipped.
 
-You can only call luksFormat on a LUKS device that is not mapped.
+You cannot call luksFormat on a device or filesystem that is mapped or in use,
+e.g. mounted filesysem, used in LVM, active RAID member etc.
+The device or filesystem has to be un-mounted in order to call luksFormat.
 
 To use LUKS2, specify \fI\-\-type luks2\fR.
 
@@ -714,12 +717,17 @@ a mapping <name>.
 
 \fB<options>\fR can be [\-\-key\-file, \-\-tcrypt\-hidden,
 \-\-tcrypt\-system, \-\-tcrypt\-backup, \-\-readonly, \-\-test\-passphrase,
-\-\-allow-discards, \-\-veracrypt, \-\-veracrypt\-pim, \-\-veracrypt\-query\-pim].
+\-\-allow-discards, \-\-veracrypt, \-\-veracrypt\-pim, \-\-veracrypt\-query\-pim,
+\-\-header].
 
 The keyfile parameter allows a combination of file content with the
 passphrase and can be repeated. Note that using keyfiles is compatible
 with TCRYPT and is different from LUKS keyfile logic.
 
+If you use \fB\-\-header\fR in combination with hidden or system options,
+the header file must contain specific headers on the same positions as the original
+encrypted container.
+
 \fBWARNING:\fR Option \fB\-\-allow\-discards\fR cannot be combined with
 option \fB\-\-tcrypt\-hidden\fR. For normal mapping, it can cause
 the \fBdestruction of hidden volume\fR (hidden volume appears as unused space
@@ -803,6 +811,13 @@ are fixable. This command will only change the LUKS header, not
 any key-slot data. You may enforce LUKS version by adding \-\-type
 option.
 
+It also repairs (upgrades) LUKS2 reencryption metadata by adding
+metadata digest that protects it against malicious changes.
+
+If LUKS2 reencryption was interrupted in the middle of writting
+reencryption segment the repair command can be used to perform
+reencryption recovery so that reencryption can continue later.
+
 \fBWARNING:\fR Always create a binary backup of the original
 header before calling this command.
 .PP
@@ -835,8 +850,7 @@ lines are always prefixed by '#'.
 If \-\-debug\-json is used, additional LUKS2 JSON data structures are printed.
 .TP
 .B "\-\-type <device-type>
-Specifies required device type, for more info
-read \fIBASIC COMMANDS\fR section.
+Specifies required device type, for more info read \fIBASIC ACTIONS\fR section.
 .TP
 .B "\-\-hash, \-h \fI<hash\-spec>\fR"
 Specifies the passphrase hash for \fIopen\fR (for plain and
@@ -1092,7 +1106,7 @@ You can see all PBKDF parameters for particular LUKS2 keyslot with
 all parameters directly, use \fI\-\-pbkdf\-force\-iterations\fR with
 \fI\-\-pbkdf\-memory\fR and \fI\-\-pbkdf\-parallel\fR.
 This will override the values without benchmarking.
-Note it can cause extremely long unlocking time. Use only is specified
+Note it can cause extremely long unlocking time. Use only in specific
 cases, for example, if you know that the formatted device will
 be used on some small embedded system.
 In this case, the LUKS PBKDF2 digest will be set to the minimum iteration count.
@@ -1209,6 +1223,15 @@ This option is only relevant for \fIopen\fR action.
 performance tuning, use only if you need a change to default dm-crypt
 behaviour. Needs kernel 4.0 or later.
 .TP
+.B "\-\-perf\-no_read_workqueue, \-\-perf\-no_write_workqueue\fR"
+Bypass dm-crypt internal workqueue and process read or write requests
+synchronously.
+This option is only relevant for \fIopen\fR action.
+
+\fBNOTE:\fR These options are available only for low-level dm-crypt
+performance tuning, use only if you need a change to default dm-crypt
+behaviour. Needs kernel 5.9 or later.
+.TP
 .B "\-\-test\-passphrase\fR"
 Do not activate the device, just verify passphrase.
 This option is only relevant for \fIopen\fR action (the device
@@ -1325,7 +1348,8 @@ the flag you want to remove (e.g. to disable persistently stored discard flag,
 use \fI\-\-persistent\fR without \fI\-\-allow-discards\fR).
 
 Only \fI\-\-allow-discards\fR, \fI\-\-perf\-same_cpu_crypt\fR,
-\fI\-\-perf\-submit_from_crypt_cpus\fR and \fI\-\-integrity\-no\-journal\fR
+\fI\-\-perf\-submit_from_crypt_cpus\fR, \fI\-\-perf\-no_read_workqueue\fR,
+\fI\-\-perf\-no_write_workqueue\fR and \fI\-\-integrity\-no\-journal\fR
 can be stored persistently.
 .TP
 .B "\-\-refresh"
@@ -1436,7 +1460,8 @@ new reencryption operation.
 Reencryption resilience mode can be one of \fIchecksum\fR, \fIjournal\fR or \fInone\fR.
 
 \fIchecksum\fR: default mode, where individual checksums of ciphertext hotzone sectors are stored,
-so the recovery process can detect which sectors where already reencrypted. It requires that the device sector write is atomic.
+so the recovery process can detect which sectors where already reencrypted.
+It requires that the device sector write is atomic.
 
 \fIjournal\fR: the hotzone is journaled in the binary area (so the data are written twice).
 
@@ -1446,7 +1471,8 @@ the reencryption is similar to old offline reencryption utility. (ctrl+c).
 The option is ignored if reencryption with datashift mode is in progress.
 .TP
 .B "\-\-resilience-hash <hash>"
-The hash algorithm used with "\-\-resilience checksum" only. The default hash is sha256. With other resilience modes, the hash parameter is ignored.
+The hash algorithm used with "\-\-resilience checksum" only.
+The default hash is sha256. With other resilience modes, the hash parameter is ignored.
 .TP
 .B "\-\-hotzone-size <size>"
 This option can be used to set an upper limit on the size of reencryption area (hotzone).
@@ -1455,17 +1481,21 @@ size may be less than specified <size> due to other limitations (free space in k
 available memory).
 .TP
 .B "\-\-reduce\-device\-size <size>"
-Initialize LUKS2 reencryption with data device size reduction (currently only \-\-encrypt variant is supported).
+Initialize LUKS2 reencryption with data device size reduction
+(currently only \-\-encrypt variant is supported).
 
-Last <size> sectors of <device> will be used to properly initialize device reencryption. That means any
-data at last <size> sectors will be lost.
+Last <size> sectors of <device> will be used to properly initialize device reencryption.
+That means any data at last <size> sectors will be lost.
 
-It could be useful if you added some space to underlying partition or logical volume (so last <size> sectors contains no data).
+It could be useful if you added some space to underlying partition or logical volume
+(so last <size> sectors contains no data).
 
-Recommended minimal size is twice the default LUKS2 header size (\-\-reduce\-device\-size 32M) for \-\-encrypt use case. Be sure to
-have enough (at least \-\-reduce\-device\-size value of free space at the end of <device>).
+Recommended minimal size is twice the default LUKS2 header size (\-\-reduce\-device\-size 32M)
+for \-\-encrypt use case. Be sure to have enough (at least \-\-reduce\-device\-size value
+       of free space at the end of <device>).
 
-WARNING: This is a destructive operation and cannot be reverted.  Use with extreme care - accidentally overwritten filesystems are usually unrecoverable.
+WARNING: This is a destructive operation and cannot be reverted.
+Use with extreme care - accidentally overwritten filesystems are usually unrecoverable.
 .TP
 .B "\-\-version"
 Show the program version.
@@ -1475,6 +1505,28 @@ Show short option help.
 .TP
 .B "\-\-help, \-?"
 Show help text and default parameters.
+.SH EXAMPLE
+.TP
+Example 1: Create LUKS 2 container on block device /dev/sdX.
+sudo cryptsetup --type luks2 luksFormat /dev/sdX
+.TP
+Example 2: Add an additional passphrase to key slot 5.
+sudo cryptsetup luksAddKey --key-slot 5 /dev/sdX
+.TP
+Example 3: Create LUKS header backup and save it to file.
+sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
+.TP
+Example 4: Open LUKS contaner on /dev/sdX and map it to sdX_crypt.
+sudo cryptsetup open /dev/sdX sdX_crypt
+.TP
+.B WARNING: The command in example 5 will erase all key slots.
+Your cannot use your luks container afterwards anymore unless you have a backup to restore.
+.TP
+Example 5: Erase all key slots on /dev/sdX.
+sudo cryptsetup erase /dev/sdX
+.TP
+Example 6: Restore LUKS header from backup file.
+sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
 .SH RETURN CODES
 Cryptsetup returns 0 on success and a non-zero value on error.
 
@@ -1648,7 +1700,10 @@ and for authentication). Both these keys are stored in one LUKS keyslot.
 \fBWARNING:\fR All support for authenticated modes is experimental
 and there are only some modes available for now. Note that there
 are a very few authenticated encryption algorithms that are suitable
-for disk encryption.
+for disk encryption. You also cannot use CRC32 or any other non-cryptographic
+checksums (other than the special integrity mode "none"). If for some reason
+you want to have integrity control without using authentication mode, then you
+should separately configure dm-integrity independently of LUKS2.
 
 .SH NOTES ON LOOPBACK DEVICE USE
 Cryptsetup is usually used directly on a block device (disk
@@ -1702,9 +1757,9 @@ Copyright \(co 2004-2006 Clemens Fruhwirth
 .br
 Copyright \(co 2012-2014 Arno Wagner
 .br
-Copyright \(co 2009-2020 Red Hat, Inc.
+Copyright \(co 2009-2021 Red Hat, Inc.
 .br
-Copyright \(co 2009-2020 Milan Broz
+Copyright \(co 2009-2021 Milan Broz
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -1717,5 +1772,6 @@ online at
 
 The cryptsetup mailing list and list archive, see FAQ entry 1.6.
 
-The LUKS on-disk format specification available at
-\fBhttps://gitlab.com/cryptsetup/cryptsetup/wikis/Specification\fR
+The LUKS version 1 on-disk format specification available at
+\fBhttps://gitlab.com/cryptsetup/cryptsetup/wikis/Specification\fR and
+LUKS version 2 at \fBhttps://gitlab.com/cryptsetup/LUKS2-docs\fR.
index 44e7e07..cce7760 100644 (file)
@@ -1,4 +1,4 @@
-.TH INTEGRITYSETUP "8" "January 2019" "integritysetup" "Maintenance Commands"
+.TH INTEGRITYSETUP "8" "January 2021" "integritysetup" "Maintenance Commands"
 .SH NAME
 integritysetup - manage dm-integrity (block level integrity) volumes
 .SH SYNOPSIS
@@ -118,7 +118,7 @@ The integrity algorithm can be CRC (crc32c/crc32) or hash function (sha1, sha256
 For HMAC (hmac-sha256) you have also to specify an integrity key and its size.
 .TP
 .B "\-\-integrity\-key\-size BYTES"
-The size of the data integrity key.
+The size of the data integrity key. Maximum is 4096 bytes.
 .TP
 .B "\-\-integrity\-key\-file FILE"
 The file with the integrity key.
@@ -158,7 +158,7 @@ Integrity algorithm for journal area.
 See \-\-integrity option for detailed specification.
 .TP
 .B "\-\-journal\-integrity\-key\-size BYTES"
-The size of the journal integrity key.
+The size of the journal integrity key. Maximum is 4096 bytes.
 .TP
 .B "\-\-journal\-integrity\-key\-file FILE"
 The file with the integrity key.
@@ -169,7 +169,7 @@ You can use a block cipher here such as cbc-aes or
 a stream cipher, for example, chacha20 or ctr-aes.
 .TP
 .B "\-\-journal\-crypt\-key\-size BYTES"
-The size of the journal encryption key.
+The size of the journal encryption key. Maximum is 4096 bytes.
 .TP
 .B "\-\-journal\-crypt\-key\-file FILE"
 The file with the journal encryption key.
@@ -184,6 +184,21 @@ The dm-integrity target is available since Linux kernel version 4.12.
 Format and activation of an integrity device always require superuser
 privilege because the superblock is calculated and handled in dm-integrity kernel target.
 
+.SH LEGACY COMPATIBILITY OPTIONS
+.TP
+\fBWARNING:\fR
+Do not use these options until you need compatibility with specific old kernel.
+.TP
+.B "\-\-integrity\-legacy\-padding"
+Use inefficient legacy padding.
+.TP
+.B "\-\-integrity\-legacy\-hmac"
+Use old flawed HMAC calclation (also does not protect superblock).
+.TP
+.B "\-\-integrity\-legacy\-recalculate"
+Allow insecure recalculating of volumes with HMAC keys (recalcualtion offset in superblock
+is not protected).
+
 .SH RETURN CODES
 Integritysetup returns 0 on success and a non-zero value on error.
 
@@ -227,9 +242,9 @@ Please attach the output of the failed command with the
 The integritysetup tool is written by Milan Broz <gmazyland@gmail.com>
 and is part of the cryptsetup project.
 .SH COPYRIGHT
-Copyright \(co 2016-2020 Red Hat, Inc.
+Copyright \(co 2016-2021 Red Hat, Inc.
 .br
-Copyright \(co 2016-2020 Milan Broz
+Copyright \(co 2016-2021 Milan Broz
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
index d907e1b..ccdfe62 100644 (file)
@@ -1,4 +1,4 @@
-.TH VERITYSETUP "8" "January 2019" "veritysetup" "Maintenance Commands"
+.TH VERITYSETUP "8" "January 2021" "veritysetup" "Maintenance Commands"
 .SH NAME
 veritysetup - manage dm-verity (block level verification) volumes
 .SH SYNOPSIS
@@ -40,8 +40,8 @@ Creates a mapping with <name> backed by device <data_device> and using
 The <root_hash> is a hexadecimal string.
 
 \fB<options>\fR can be [\-\-hash-offset, \-\-no-superblock,
-\-\-ignore-corruption or \-\-restart-on-corruption, \-\-ignore-zero-blocks,
-\-\-check-at-most-once, \-\-root-hash-signature]
+\-\-ignore-corruption or \-\-restart-on-corruption, \-\-panic-on-corruption,
+\-\-ignore-zero-blocks, \-\-check-at-most-once, \-\-root-hash-signature]
 
 If option \-\-no-superblock is used, you have to use as the same options
 as in initial format operation.
@@ -117,12 +117,13 @@ Use the provided UUID for format command instead of generating new one.
 The UUID must be provided in standard UUID format,
 e.g. 12345678-1234-1234-1234-123456789abc.
 .TP
-.B "\-\-ignore-corruption", "\-\-restart-on-corruption"
+.B "\-\-ignore-corruption", "\-\-restart-on-corruption", "\-\-panic-on-corruption"
 Defines what to do if data integrity problem is detected (data corruption).
 
 Without these options kernel fails the IO operation with I/O error.
 With \-\-ignore-corruption option the corruption is only logged.
-With \-\-restart-on-corruption the kernel is restarted immediately.
+With \-\-restart-on-corruption or  \-\-panic-on-corruption the kernel
+is restarted (panicked) immediately.
 (You have to provide way how to avoid restart loops.)
 
 \fBWARNING:\fR Use these options only for very specific cases.
@@ -157,7 +158,18 @@ Use encoding data from the specified device.
 The fec device argument can be block device or file image.
 For format, if fec device path doesn't exist, it will be created as file.
 
-Note: block sizes for data and hash devices must match. Also, if the verity data_device is encrypted the fec_device should be too.
+Block sizes for data and hash devices must match.
+Also, if the verity data_device is encrypted the fec_device should be too.
+
+FEC calculation covers data, hash area, and optional foreign metadata stored on the same
+device with the hash tree (additional space after hash area).
+Size of this optional additional area protected by FEC is calculated from image sizes,
+so you must be sure that you use the same images for activation.
+
+If the hash device is in a separate image, metadata covers the whole rest of the image after the hash area.
+
+If hash and FEC device is in the image, metadata ends on the FEC area offset.
+
 .TP
 .B "\-\-fec-offset=bytes"
 This is the offset, in bytes, from the start of the FEC device to the beginning of the encoding data.
@@ -220,9 +232,9 @@ The first implementation of veritysetup was written by Chrome OS authors.
 This version is based on verification code written by Mikulas Patocka <mpatocka@redhat.com>
 and rewritten for libcryptsetup by Milan Broz <gmazyland@gmail.com>.
 .SH COPYRIGHT
-Copyright \(co 2012-2020 Red Hat, Inc.
+Copyright \(co 2012-2021 Red Hat, Inc.
 .br
-Copyright \(co 2012-2020 Milan Broz
+Copyright \(co 2012-2021 Milan Broz
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
index a19cd29..5b8cc9a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Example of LUKS2 kesylot handler (EXAMPLE)
  *
- * Copyright (C) 2016-2020 Milan Broz <gmazyland@gmail.com>
+ * Copyright (C) 2016-2021 Milan Broz <gmazyland@gmail.com>
  *
  * Use:
  *  - generate LUKS device
index 838cd6b..5aa9500 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Example of LUKS2 token storing third party metadata (EXAMPLE)
  *
- * Copyright (C) 2016-2020 Milan Broz <gmazyland@gmail.com>
+ * Copyright (C) 2016-2021 Milan Broz <gmazyland@gmail.com>
  *
  * Use:
  *  - generate LUKS device
diff --git a/missing b/missing
index 8d0eaad..1fe1611 100755 (executable)
--- a/missing
+++ b/missing
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
index 5c63203..fe48bce 100644 (file)
@@ -1,6 +1,6 @@
 Name:     cryptsetup
 Summary:  The cryptsetup
-Version:  2.3.3
+Version:  2.3.7
 Release:  1
 License:  GPL-2.0+, LGPL-2.1+
 Group:    Base/Device Management
index 8c1f2b7..9d4958b 100644 (file)
@@ -37,6 +37,7 @@ lib/luks2/luks2_keyslot_luks2.c
 lib/luks2/luks2_keyslot_reenc.c
 lib/luks2/luks2_luks1_convert.c
 lib/luks2/luks2_reencrypt.c
+lib/luks2/luks2_reencrypt_digest.c
 lib/luks2/luks2_segment.c
 lib/luks2/luks2_token.c
 lib/luks2/luks2_token_keyring.c
index 571c909..80c4a6f 100644 (file)
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3\n"
+"Project-Id-Version: cryptsetup 2.3.7\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,61 +16,62 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr ""
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr ""
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr ""
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr ""
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -111,7 +112,7 @@ msgstr ""
 msgid "Cannot initialize crypto backend."
 msgstr ""
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr ""
@@ -125,7 +126,7 @@ msgstr ""
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr ""
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr ""
 
@@ -133,7 +134,7 @@ msgstr ""
 msgid "This operation is supported only for LUKS2 device."
 msgstr ""
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr ""
 
@@ -147,7 +148,7 @@ msgstr ""
 msgid "Key slot %d is full, please select another one."
 msgstr ""
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr ""
 
@@ -156,7 +157,8 @@ msgstr ""
 msgid "Header detected but device %s is too small."
 msgstr ""
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr ""
 
@@ -164,17 +166,13 @@ msgstr ""
 msgid "Illegal operation with reencryption in-progress."
 msgstr ""
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr ""
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr ""
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr ""
@@ -188,7 +186,7 @@ msgstr ""
 msgid "Invalid plain crypt parameters."
 msgstr ""
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr ""
 
@@ -196,12 +194,16 @@ msgstr ""
 msgid "UUID is not supported for this crypt type."
 msgstr ""
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr ""
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr ""
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr ""
 
@@ -247,8 +249,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr ""
@@ -281,16 +283,16 @@ msgstr ""
 msgid "Can't format VERITY without device."
 msgstr ""
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr ""
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr ""
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr ""
 
@@ -322,236 +324,236 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr ""
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr ""
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr ""
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr ""
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr ""
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr ""
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr ""
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr ""
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr ""
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr ""
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr ""
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr ""
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr ""
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr ""
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
+#: lib/setup.c:3128
 #, c-format
-msgid "Volume %s is not suspended."
+msgid "Resume is not supported for device %s."
 msgstr ""
 
-#: lib/setup.c:3146
+#: lib/setup.c:3130
 #, c-format
-msgid "Resume is not supported for device %s."
+msgid "Error during resuming device %s."
 msgstr ""
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
 #, c-format
-msgid "Error during resuming device %s."
+msgid "Volume %s is not suspended."
 msgstr ""
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr ""
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr ""
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr ""
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr ""
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr ""
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr ""
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr ""
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr ""
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr ""
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr ""
 
-#: lib/setup.c:4171
+#: lib/setup.c:4223
 #, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
+msgid "Device %s already exists."
 msgstr ""
 
-#: lib/setup.c:4174
+#: lib/setup.c:4230
 #, c-format
-msgid "Device %s already exists."
+msgid "Cannot use device %s, name is invalid or still in use."
 msgstr ""
 
-#: lib/setup.c:4296
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr ""
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr ""
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr ""
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr ""
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr ""
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr ""
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr ""
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr ""
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr ""
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr ""
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr ""
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr ""
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr ""
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr ""
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr ""
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr ""
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr ""
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -579,8 +581,8 @@ msgstr ""
 msgid "Cannot seek to requested keyfile offset."
 msgstr ""
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr ""
 
@@ -600,53 +602,58 @@ msgstr ""
 msgid "Cannot read requested amount of data."
 msgstr ""
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr ""
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr ""
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr ""
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr ""
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr ""
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr ""
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr ""
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid ""
 "Attaching loopback device failed (loop device with autoclear flag is "
 "required)."
 msgstr ""
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr ""
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr ""
@@ -723,7 +730,8 @@ msgstr ""
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
+msgid ""
+"Locking directory %s/%s will be created with default compiled-in permissions."
 msgstr ""
 
 #: lib/utils_device_locking.c:119
@@ -732,8 +740,8 @@ msgid ""
 "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr ""
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr ""
 
@@ -758,8 +766,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr ""
@@ -778,12 +786,12 @@ msgid "IO error while encrypting keyslot."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr ""
@@ -804,43 +812,43 @@ msgstr ""
 msgid "LUKS keyslot %u is invalid."
 msgstr ""
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr ""
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr ""
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr ""
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr ""
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr ""
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr ""
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr ""
@@ -866,7 +874,7 @@ msgid ""
 "keyslots."
 msgstr ""
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -876,102 +884,102 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr ""
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr ""
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr ""
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr ""
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr ""
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr ""
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr ""
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr ""
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr ""
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr ""
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr ""
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid ""
 "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr ""
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr ""
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr ""
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr ""
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr ""
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr ""
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr ""
@@ -1007,11 +1015,11 @@ msgstr ""
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr ""
 
@@ -1024,167 +1032,181 @@ msgstr ""
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid ""
 "Unexpected metadata entry type '%u' found when parsing supported Volume "
 "Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid ""
 "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid ""
 "Unexpected metadata entry value '%u' found when parsing supported Volume "
 "Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid ""
 "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid ""
 "Cannot activate device, kernel dm-crypt is missing support for BITLK "
 "Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr ""
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr ""
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr ""
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr ""
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr ""
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr ""
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr ""
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr ""
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr ""
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr ""
 
@@ -1193,41 +1215,37 @@ msgstr ""
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr ""
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr ""
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid ""
 "WARNING: Kernel cannot activate device if data block size exceeds page size "
@@ -1238,53 +1256,63 @@ msgstr ""
 msgid "Failed to allocate RS context."
 msgstr ""
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr ""
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr ""
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr ""
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr ""
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr ""
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid ""
+"Kernel refuses to activate insecure recalculate option (see legacy "
+"activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr ""
@@ -1304,120 +1332,120 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr ""
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid ""
 "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 "
 "keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid ""
 "Binary header with keyslot areas size differ on device and backup, restore "
 "failed."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid ""
 "does not contain LUKS2 header. Replacing header can destroy data on that "
 "device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid ""
 "already contains LUKS2 header. Replacing header will destroy existing "
 "keyslots."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid ""
 "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid ""
 "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr ""
 
@@ -1447,7 +1475,7 @@ msgstr ""
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr ""
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr ""
 
@@ -1489,630 +1517,664 @@ msgstr ""
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid ""
 "Source and target device sizes don't match. Source %<PRIu64>, target: "
 "%<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid ""
 "Data shift is not aligned to requested encryption sector size (%<PRIu32> "
 "bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid ""
 "Data device is not aligned to requested encryption sector size (%<PRIu32> "
 "bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid ""
 "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> "
 "sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr ""
+
+#: lib/luks2/luks2_reencrypt.c:3398
+msgid "Failed to remove reencryption keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid ""
 "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> "
 "sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+msgid "Reencryption metadata is invalid."
+msgstr ""
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr ""
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr ""
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr ""
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr ""
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid ""
 "WARNING: The --hash parameter is being ignored in plain mode with keyfile "
 "specified.\n"
 msgstr ""
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid ""
 "WARNING: The --keyfile-size option is being ignored, the read size is the "
 "same as the encryption key size.\n"
 msgstr ""
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid ""
 "Detected device signature(s) on %s. Proceeding further may damage existing "
 "data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr ""
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr ""
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr ""
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr ""
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr ""
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr ""
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr ""
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
 "This dump should be always stored encrypted on safe place."
 msgstr ""
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid ""
 "Resize of active device requires volume key in keyring but --disable-keyring "
 "option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr ""
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid ""
 "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit "
 "key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr ""
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr ""
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr ""
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr ""
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the "
+"reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as "
+"genuine."
+msgstr ""
+
+#: src/cryptsetup.c:1140
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr ""
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr ""
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr ""
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will "
 "contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr ""
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr ""
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr ""
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr ""
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr ""
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr ""
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr ""
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr ""
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid ""
 "Cannot determine volume key size for LUKS without keyslots, please use --key-"
 "size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr ""
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid ""
 "This is the last keyslot. Device will become unusable after purging this key."
 msgstr ""
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr ""
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr ""
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr ""
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr ""
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr ""
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr ""
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr ""
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr ""
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr ""
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr ""
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr ""
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr ""
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr ""
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr ""
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr ""
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
 "Device will become unusable after this operation."
 msgstr ""
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr ""
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr ""
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr ""
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr ""
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr ""
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr ""
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr ""
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr ""
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr ""
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr ""
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr ""
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2121,252 +2183,261 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr ""
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid ""
 "Encryption without detached header (--header) is not possible without data "
 "device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid ""
 "Requested data offset must be less than or equal to half of --reduce-device-"
 "size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid ""
 "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> "
 "(sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid ""
 "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr ""
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr ""
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid ""
 "Key file can be used only with --key-slot or with exactly one key slot "
 "active."
 msgstr ""
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr ""
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr ""
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr ""
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid ""
 "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt "
 "tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid ""
 "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt "
 "utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr ""
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr ""
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr ""
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr ""
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr ""
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr ""
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr ""
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr ""
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr ""
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr ""
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr ""
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr ""
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr ""
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr ""
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr ""
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr ""
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr ""
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr ""
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr ""
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr ""
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr ""
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr ""
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
 msgstr ""
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2375,7 +2446,7 @@ msgid ""
 "bitlkClose\n"
 msgstr ""
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2385,14 +2456,14 @@ msgid ""
 "<key file> optional key file for the new key for luksAddKey action\n"
 msgstr ""
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2404,7 +2475,7 @@ msgid ""
 "\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n"
 msgstr ""
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2414,725 +2485,733 @@ msgid ""
 "\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n"
 msgstr ""
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid ""
 "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr ""
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr ""
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr ""
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr ""
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr ""
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr ""
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr ""
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr ""
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr ""
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr ""
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr ""
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr ""
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr ""
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr ""
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr ""
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr ""
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr ""
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr ""
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr ""
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr ""
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr ""
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr ""
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr ""
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr ""
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr ""
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr ""
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr ""
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr ""
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr ""
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr ""
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr ""
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr ""
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr ""
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr ""
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr ""
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr ""
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr ""
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr ""
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr ""
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid ""
 "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr ""
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr ""
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr ""
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr ""
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr ""
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr ""
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr ""
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr ""
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr ""
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr ""
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr ""
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr ""
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr ""
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr ""
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr ""
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr ""
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr ""
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr ""
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr ""
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr ""
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr ""
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr ""
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid ""
 "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr ""
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-"
 "size=(bytes)."
 msgstr ""
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr ""
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid ""
 "Option --integrity-no-wipe can be used only for format action with integrity "
 "extension."
 msgstr ""
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid ""
 "Options --label and --subsystem are allowed only for luksFormat and config "
 "LUKS2 operations."
 msgstr ""
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid ""
 "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK "
 "devices."
 msgstr ""
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr ""
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr ""
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr ""
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr ""
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr ""
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr ""
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr ""
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr ""
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr ""
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid ""
 "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only "
 "for luksFormat with LUKS2."
 msgstr ""
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr ""
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid ""
 "Option --offset is supported only for open of plain and loopaes devices, "
 "luksFormat and device reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid ""
 "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only "
 "for TCRYPT device."
 msgstr ""
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr ""
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr ""
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid ""
 "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr ""
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid ""
 "Option --veracrypt-query-pim is supported only for VeraCrypt compatible "
 "devices."
 msgstr ""
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid ""
 "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid ""
 "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/"
 "argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr ""
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid ""
 "Large IV sectors option is supported only for opening plain type device with "
 "sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr ""
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr ""
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr ""
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr ""
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr ""
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr ""
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr ""
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr ""
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr ""
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr ""
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr ""
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr ""
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr ""
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr ""
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr ""
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr ""
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr ""
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr ""
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr ""
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr ""
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr ""
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr ""
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3142,7 +3221,7 @@ msgid ""
 "<root_hash> hash of the root node on <hash_device>\n"
 msgstr ""
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3151,130 +3230,145 @@ msgid ""
 "Hash format: %u\n"
 msgstr ""
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr ""
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr ""
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr ""
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr ""
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr ""
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr ""
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr ""
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr ""
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr ""
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr ""
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr ""
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr ""
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr ""
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr ""
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr ""
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr ""
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr ""
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid ""
 "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks "
 "is allowed only for open operation."
 msgstr ""
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr ""
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid ""
 "Option --ignore-corruption and --restart-on-corruption cannot be used "
 "together."
 msgstr ""
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid ""
+"Option --panic-on-corruption and --restart-on-corruption cannot be used "
+"together."
+msgstr ""
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr ""
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr ""
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr ""
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr ""
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr ""
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3282,414 +3376,419 @@ msgid ""
 "<integrity_device> is the device containing data with integrity tags\n"
 msgstr ""
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr ""
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr ""
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr ""
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr ""
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr ""
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr ""
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr ""
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr ""
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr ""
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr ""
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr ""
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr ""
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr ""
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid ""
 "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and "
 "--no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr ""
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid ""
 "Journal integrity algorithm must be specified if journal integrity key is "
 "used."
 msgstr ""
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid ""
 "Both journal encryption key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid ""
 "Journal encryption algorithm must be specified if journal encryption key is "
 "used."
 msgstr ""
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid ""
 "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid ""
 "No decryption in progress, provided UUID can be used only to resume "
 "suspended decryption process."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid ""
 "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid ""
 "Option --new must be used together with --reduce-device-size or --header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid ""
 "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-"
 "iterations."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr ""
 
@@ -3730,96 +3829,96 @@ msgstr ""
 msgid "Command failed with code %i (%s).\n"
 msgstr ""
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr ""
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr ""
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr ""
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr ""
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr ""
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr ""
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr ""
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr ""
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr ""
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid ""
 "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s "
 "will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid ""
 "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s "
 "will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr ""
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr ""
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr ""
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr ""
@@ -3836,46 +3935,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr ""
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr ""
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr ""
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr ""
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr ""
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr ""
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr ""
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr ""
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr ""
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr ""
index 1adadce..11dea3a 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 94db662..dd02315 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -3,11 +3,12 @@
 # This file is distributed under the same license as the cryptsetup package.
 # Milan Broz <mbroz@redhat.com>, 2010.
 # Petr Pisar <petr.pisar@atlas.cz>, 2010, 2011, 2012, 2013, 2014, 2015, 2016.
-# Petr Pisar <petr.pisar@atlas.cz>, 2017, 2018, 2019, 2020.
+# Petr Pisar <petr.pisar@atlas.cz>, 2017, 2018, 2019, 2020, 2021.
 #
 # See `LUKS On-Disk Format Specification' document to clarify some terms.
 #
 # backing device → podpůrné zařízení
+# detached header → oddědelená hlavička
 # digest → otisk
 # key slot → pozice klíče
 # keyring → klíčenka
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-15 18:12+02:00\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-23 07:33+02:00\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -36,61 +37,62 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Nelze inicializovat device-mapper, nespuštěno superuživatelem."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Nelze inicializovat device-mapper. Je jaderný modul dm_mod zaveden?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Požadovaný příznak pozdrženo není podporován."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID pro zařízení %s bylo zkráceno."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Neznámý druh cíle DM."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Požadované výkonnostní volby dm-cryptu nejsou podporovány."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Požadované volby, jak zacházet s poškozením dat dm-verity, nejsou podporovány."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Požadované FEC volby dm-cryptu nejsou podporovány."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Požadované volby integrity dat nejsou podporovány."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Požadované volby sector_size není podporována."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Požadovaný automatický přepočet značek integrity není podporován."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Zahazování (TRIM) není podporováno."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Požadovaný režim bitmapy integrity DM není podporován."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Dotaz na část dm-%s selhal."
@@ -133,7 +135,7 @@ msgstr "Implementaci šifrovacího generátoru náhodných čísel nelze inicial
 msgid "Cannot initialize crypto backend."
 msgstr "Implementaci šifrování nelze inicializovat."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Hašovací algoritmus %s není podporován."
@@ -147,7 +149,7 @@ msgstr "Chyba zpracování klíče (za použití haše %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Druh zařízení nelze určit. Nekompatibilní aktivace zařízení?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Tato operace je podporována jen u zařízení LUKS."
 
@@ -155,7 +157,7 @@ msgstr "Tato operace je podporována jen u zařízení LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Tato operace je podporována jen u zařízení LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Všechny pozice klíčů jsou obsazeny."
 
@@ -169,7 +171,7 @@ msgstr "Pozice klíče %d není platná, prosím, vyberte číslo mezi 0 a %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Pozice klíče %d je obsazena, prosím, vyberte jinou."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Velikost zařízení není zarovnaná na velikost logického sektoru zařízení."
 
@@ -178,7 +180,8 @@ msgstr "Velikost zařízení není zarovnaná na velikost logického sektoru za
 msgid "Header detected but device %s is too small."
 msgstr "Nalezena hlavička, ale zařízení %s je příliš malé."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Tato operace není na zařízení tohoto typu podporována."
 
@@ -186,17 +189,13 @@ msgstr "Tato operace není na zařízení tohoto typu podporována."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Zakázaná operace spolu s probíhajícím přešifrování."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Nepodporovaná verze LUKS %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Zařízení s oddělenými metadaty není na šifře tohoto typu podporováno."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Zařízení %s není aktivní."
@@ -210,7 +209,7 @@ msgstr "Zařízení nižší úrovně pod šifrovaným zařízením %s zmizelo."
 msgid "Invalid plain crypt parameters."
 msgstr "Neplatné parametry plain šifry."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Neplatná velikost klíče."
 
@@ -218,12 +217,16 @@ msgstr "Neplatná velikost klíče."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID není na šifře tohoto typu podporováno."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Zařízení s oddělenými metadaty není na šifře tohoto typu podporováno."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Nepodporovaná velikost šifrovaného sektoru."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Velikost zařízení není zarovnaná na požadovanou velikost sektoru."
 
@@ -267,8 +270,8 @@ msgstr "POZOR: Metadata LUKS2 změnila velikost na %<PRIu64> bajtů.\n"
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "POZOR: Oblast s pozicemi klíčů pro LUKS2 změnila velikost na %<PRIu64> bajtů.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Zařízení %s je příliš malé."
@@ -302,16 +305,16 @@ msgstr "LOOPAES nelze bez zařízení naformátovat."
 msgid "Can't format VERITY without device."
 msgstr "VERITY nelze bez zařízení naformátovat."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Nepodporovaný druh VERITY haše %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Nepodporovaná velikost bloku VERITY."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Nepodporovaná poloha haše VERITY."
 
@@ -341,236 +344,236 @@ msgstr "POZOR: Požadovaná velikost značky %d bajtů se liší od výstupu vel
 msgid "Unknown crypt device type %s requested."
 msgstr "Požadován neznámý typ šifrovaného zařízení %s."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Nepodporované parametry na zařízení %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Neodpovídající parametry an za zařízení %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Zařízení dmcryptu si neodpovídají."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Zařízení %s nebylo možné znovu zavést."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Zařízení %s nebylo možné pozastavit."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Zařízení %s nebylo možné probudit."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Nepřekonatelná chyba při zavádění zařízení %s (nad zařízením %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Zařízení %s nebylo možné přepnout do dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Nelze změnit velikost zařízení zpětné smyčky."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Opravdu chcete změnit UUID zařízení?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Soubor se zálohou hlavičky neobsahuje kompatibilní hlavičku LUKS."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Svazek %s není aktivní."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Svazek %s je již uspán."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Uspání není na zařízení %s podporováno."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Chyba při uspávání zařízení %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Svazek %s není uspán."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Probuzení není na zařízení %s podporováno."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Chyba při probouzení zařízení %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Svazek %s není uspán."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Heslo svazku neodpovídá svazku."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Nelze přidat pozici klíče, všechny pozice jsou zakázány a klíč svazku nebyl poskytnut."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Záměna novou pozicí klíče se nezdařila."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Pozice klíče %d je neplatná."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Pozice klíče %d není aktivní."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Hlavička zařízení se překrývá s datovou oblastí."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Přešifrování již probíhá. Zařízení nelze aktivovat."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Získání zámku pro přešifrování selhalo."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Obnova přešifrování LUKS2 selhalo."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Typ zařízení není řádně inicializován."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Zařízení %s nelze použít. Název není platný nebo zařízení se stále používá."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Zařízení %s již existuje."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Zařízení %s nelze použít. Název není platný nebo zařízení se stále používá."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Byl zadán neplatný klíč svazku."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "K zařízení VERITY byl zadán neplatný kořenový haš."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Je potřeba podpis kořenového otisku."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Jaderná klíčenka chybí: je potřeba pro předání podpisu do jádra."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Klíč se nepodařilo přidat do jaderné klíčenky."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Zařízení %s se stále používá."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Neplatné zařízení %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Vyhrazená paměť pro klíč svazku je příliš malá."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Nelze získat klíč svazku pro otevřené zařízení."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "K zařízení VERITY nelze získat kořenový otisk."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Na šifrovaném zařízení %s není tato operace podporována."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Operace výpisu není na zařízení tohoto typu podporována."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Počátek dat není násobkem %u bajtů."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Zařízení %s, které se stále používá, nelze konvertovat."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Přiřazení pozice klíče %u jakožto nového klíče svazku se nezdařilo."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Inicializace parametrů výchozí pozice klíče LUKS2 selhala."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Přiřazení pozice klíče %d k otisku se nezdařilo."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Jaderná klíčenka není jádrem podporována."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Čtení hesla z klíčenky selhalo (chyba %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Získání zámku pro tvrdý přístup do globální paměti selhalo."
 
@@ -598,8 +601,8 @@ msgstr "O souboru s klíčem nebylo možné zjistit údaje."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Nelze se přesunout na požadované místo v souboru s klíčem."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Při čtení hesla došla paměť."
 
@@ -619,52 +622,57 @@ msgstr "Maximální délka souboru s klíčem překročena."
 msgid "Cannot read requested amount of data."
 msgstr "Požadované množství dat nelze načíst."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Zařízení %s neexistuje nebo přístup byl zamítnut."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Zařízení %s není kompatibilní."
 
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "U zařízení s daty se ignoruje chybná optimální velikost I/O (%u bajtů)."
+
 # TODO: Pluralize
-#: lib/utils_device.c:642
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Zařízení %s je příliš malé. Je třeba alespoň %<PRIu64> bajtů."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Zařízení %s nelze použít, protože se již používá (již namapováno nebo připojeno)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Zařízení %s nelze použít, povolení zamítnuto."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "O zařízení %s nelze získat údaje."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Zařízení typu loopback nelze použít, nespuštěno superuživatelem."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Připojení zařízení zpětné smyčky selhalo (požadováno zařízení s příznakem autoclear)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Požadovaná poloha je za hranicí skutečné velikosti zařízení %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Zařízení %s má nulovou velikost."
@@ -738,16 +746,16 @@ msgstr "Zamykání zrušeno. Zamykací cesta %s/%s je nepoužitelná (není adre
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "POZOR: Adresář se zámkem %s/%s chybí!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Zamykací adresář %s/%s bude vytvořen s výchozími zakompilovanými právy."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Zamykání zrušeno. Zamykací cesta %s/%s je nepoužitelná (%s není adresářem)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Nelze se přesunout na požadované místo v zařízení."
 
@@ -774,8 +782,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Zápis šifry by měl být ve tvaru [šifra]-[režim]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Na zařízení %s nelze zapsat, povolení zamítnuto."
@@ -794,12 +802,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Chyba vstupu/výstupu při šifrování pozice klíče."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Zařízení %s nelze otevřít."
@@ -820,43 +828,43 @@ msgstr "Zařízení %s je příliš malé. (LUKS1 vyžaduje alespoň %<PRIu64> b
 msgid "LUKS keyslot %u is invalid."
 msgstr "Pozice %u klíče LUKS není platná."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Zařízení %s není platným zařízením LUKS."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Požadovaný soubor se zálohou hlavičky %s již existuje."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Soubor se zálohou hlavičky %s nelze vytvořit."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Nelze zapsat soubor %s se zálohou hlavičky."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Záložní soubor neobsahuje platnou hlavičku LUKS."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Nelze otevřít soubor se zálohou hlavičky %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Soubor se zálohou hlavičky %s nelze načíst."
@@ -878,7 +886,7 @@ msgstr "neobsahuje hlavičku LUKS. Nahrazení hlavičky může zničit data na d
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "již obsahuje hlavičku LUKS. Nahrazení hlavičky zničí existující pozice s klíči."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -890,102 +898,102 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Nestandardní velikost klíče, je třeba ruční opravy."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Nestandardní zarovnání pozice klíče, je třeba ruční opravy."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Opravují se pozice klíčů."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Pozice klíče %i: poloha opravena (%u → %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Pozice klíče %i: proklad opraven (%u → %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Pozice klíče %i: chybná značka oddílu."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Pozice klíče %i: sůl vymazána."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Hlavička LUKS se zapisuje na disk."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Oprava selhala."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Požadovaný haš LUKSu %s není podporován."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "V hlavičce LUKS nenalezen žádný známý problém."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Chyba při aktualizaci hlavičky LUKS na zařízení %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Chyba při opakovaném čtení hlavičky LUKS po aktualizaci zařízení %s."
 
 # TODO: Pluralize
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Poloha dat u hlavičky LUKS musí být buď 0 nebo více než velikost hlavičky."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Poskytnut UUID LUKSu ve špatném tvaru."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Hlavičku LUKS nelze vytvořit: čtení náhodné soli selhalo."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Hlavičku LUKS nelze vytvořit: výpočet otisku hlavičky (haš %s) selhal."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Pozice klíče %d je aktivní, nejprve ji uvolněte."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Pozice klíče %d obsahuje příliš málo útržků. Manipulace s hlavičkou?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Pozici s klíčem nezle otevřít (za použití haše %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Pozice klíče %d není platná, prosím, vyberte pozici mezi 0 a %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Zařízení %s není možné smazat."
@@ -1021,11 +1029,11 @@ msgstr "Překročena maximální délka hesla TCRYPT (%zu)."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Hašovací algoritmus PBKDF2 %s není podporován, přeskakuje se."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Požadované kryptografické rozhraní jádra není dostupné."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Ujistěte se, že jaderný modul algif_skcipher je zaveden."
 
@@ -1038,160 +1046,174 @@ msgstr "Aktivace nad sektory o velikosti %d není podporována."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Jádro nepodporuje aktivaci v tomto zastaralém režimu TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Aktivuje se systémové šifrování TCRYPT pro oddíl %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Jádro nepodporuje mapování kompatibilní s TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Bez dat s hlavičkou TCRYPT není tato funkce podporována."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Při rozboru podporovaného hlavního klíče svazku byla nalezena položka nečekaného typu „%u“."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Při rozboru hlavního svazku klíče byl nalezen neplatný řetězec."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Při rozboru hlavního klíče svazku byl nalezen nečekaný řetězec („%s“)."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Při rozboru hlavního klíče svazku byl nalezen záznam metadat s nečekanou hodnotou „%u“."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Z %s nebylo možné načíst vzorec BITLK."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Neplatná nebo neznámá značka zařízení BITLK."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK verze 1 není v současnosti podporován."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Neplatná nebo neznámá značka zavaděče zařízení BITLK."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Neplatná nebo neznámá značka zařízení BITLK."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Nepodporovaná velikost sektoru %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Z %s nebylo možné načíst hlavičku BITLK."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Z %s nebylo možné přečíst metadata BITLK FVE."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Neznámý nebo nepodporovaný druh šifrování."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Z %s nebylo možné načíst položky metadat BITLK."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Při rozboru externího klíče byla v metadatech nalezena položka nečekaného typu „%u“."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Při rozboru externího klíče byla v metadatech nalezena položka s nečekanou hodnotou „%u“."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Při rozboru startovacího klíče byla v metadatech nalezena nečekaná položka."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Tato operace není podporována."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Špatná velikost klíče."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Nečekaná velikost údajů o klíči."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Toto zařízení BITLK je v nepodporovaném stavu a nelze jej aktivovat."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Zařízení BITLK s typem „%s“ nelze aktivovat."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Aktivace částečně dešifrovaného zařízení BITLK není podporována."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Zařízení nelze aktivovat. Jaderný dm-crypt postrádá podporu inicializačního vektoru BITLK."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Zařízení nelze aktivovat. Jaderný dm-crypt postrádá podporu difuzéru Elephant BITLK."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Zařízení VERITY %s nepoužívá hlavičku uvnitř disku."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Zařízení %s není platným zařízením VERITY."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Nepodporovaná verze VERITY %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Hlavička VERITY je poškozena."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Na zařízení %s poskytnuto UUID VERITY ve špatném tvaru."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Chyba při aktualizaci hlavičky VERITY na zařízení %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Ověření podpisu kořenového otisku není podporováno."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Chyby v zařízení FEC nelze opravit."
 
 # TODO: Pluralize
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Nalezeno %u opravitelných chyb v zařízení FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Jádro nepodporuje mapování dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Jádro nepodporuje volbu pro podpis dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Po aktivaci zjistilo zařízení VERITY poškození."
 
@@ -1200,41 +1222,37 @@ msgstr "Po aktivaci zjistilo zařízení VERITY poškození."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Řídká oblast na pozici %<PRIu64> není vynulována."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Pozice na zařízení přetekla."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Ověření na pozici %<PRIu64> selhalo."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Neplatné parametry velikosti pro zařízení VERITY."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Přetečení oblasti haše."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Ověření datové oblasti selhalo."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Ověření kořenového haše selhalo."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Při vytváření oblasti haší došlo k chybě na vstupu/výstupu."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Oblast haší se nepodařilo vytvořit."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "POZOR: Jádro nemůže aktivovat zařízení, pokud velikost datového bloku přesahuje velikost stránky (%u)."
@@ -1243,55 +1261,63 @@ msgstr "POZOR: Jádro nemůže aktivovat zařízení, pokud velikost datového b
 msgid "Failed to allocate RS context."
 msgstr "Kontext RS se nepodařilo alokovat."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Vyrovnávací paměť se nepodařilo alokovat."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Čtení bloku RS %<PRIu64> bajtu %d selhalo."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Čtení parity bloku RS %<PRIu64> selhalo."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Oprava parity bloku RS %<PRIu64> selhala."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Zápis parity bloku RS %<PRIu64> selhal."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Velikosti bloků musí odpovídat FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Chybný počet paritních bajtů."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Neplatná délka části FEC."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Velikost zařízení %s se nepodařilo určit."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Jádro nepodporuje mapování dm-integrity."
 
 # Fixed metadata means fix_padding attribute of dm-integrity target
 # documented as "use a smaller padding".
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Jádro nepodporuje drobné zarovnání metadat dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Jádro odmítá aktivovat volbu nebezpečného přepočtu (pro přebití vizte zastaralé volby aktivace)"
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Získání zámku pro zápis do zařízení %s selhalo."
@@ -1313,45 +1339,45 @@ msgid "Requested data offset is too small."
 msgstr "Požadovaná poloha dat je příliš nízká."
 
 # TODO: Pluralize
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "POZOR: oblast s pozicemi klíčů (%<PRIu64> bajtů) je příliš malá, dostupný počet pozic klíčů LUKS2 je značně omezen.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Získání zámku pro čtení ze zařízení %s selhalo."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "V záloze %s byly zjištěny zakázané požadavky na LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Počátek dat se liší mezi zařízením a zálohou, obnova se nezdařila."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Velikost binární hlavičky s oblastí pro pozice klíčů se liší mezi zařízením a zálohou, obnova se nezdařila."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Zařízení %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "neobsahuje hlavičku LUKS2. Nahrazení hlavičky může zničit data na daném zařízení."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "již obsahuje hlavičku LUKS2. Nahrazení hlavičky zničí existující pozice s klíči."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1361,7 +1387,7 @@ msgstr ""
 "POZOR: Ve skutečné hlavičce zařízení byly objeveny neznámé požadavky na LUKS2!\n"
 "Nahrazení hlavičky zálohou může zničit data na zařízení!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1371,58 +1397,58 @@ msgstr ""
 "POZOR: Na zařízení bylo objeveno nedokončené offline přešifrování!\n"
 "Nahrazení hlavičky zálohou může zničit data."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Neznámý příznak %s ignorován."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Chybí klíč pro dm-crypt část %u."
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Nastavení části dm-crypt selhalo."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Nastavení části dm-linear selhalo."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Nepodporovaná konfigurace integrity zařízení."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Probíhá přešifrování. Zařízení nelze deaktivovat."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Výměna pozastaveného zařízení %s za cíl dm-error selhala."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Čtení požadavků na LUKS2 selhalo."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Zjištěny nesplněné požadavky na LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Operace se neslučuje se zařízením označeným pro zastaralé přešifrování. Operace se ruší."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Operace se neslučuje se zařízením označeným pro přešifrování LUKS2. Operace se ruší."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Nedostatek paměti pro otevření pozice s klíčem."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Otevření pozice s klíčem selhalo."
 
@@ -1452,7 +1478,7 @@ msgstr "Oblast s pozicemi klíčů nelze přesunout. Nedostatek místa."
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Oblast s pozicemi klíčů nelze přesunout. Oblast s pozicemi klíčů LUKS2 je příliš malá."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Oblast s pozicemi klíčů nelze přesunout."
 
@@ -1490,281 +1516,293 @@ msgstr "Nelze převést do formátu LUKS1 – pozice s klíčem %u (nad maxime
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Nelze převést do formátu LUKS1 – pozice s klíče %u není slučitelná s LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Velikost horké zóny musí být násobek vypočteného zarovnání zóny (%zu bajtů)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Velikost zařízení musí být násobek vypočteného zarovnání zóny (%zu bajtů)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Nepodporovaný režim odolnosti %s"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Obálku pro starou část úložiště se nepodařilo inicializovat."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Obálku pro novou část úložiště se nepodařilo inicializovat."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Kontrolní součty pro aktuální horkou zónu se nepodařilo přečíst."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Čtení oblasti s horkou zónou počínaje na %<PRIu64> selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Sektor %zu nebylo možné rozšifrovat."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Sektor %zu nebylo možné obnovit."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Velikosti zdrojového a cílového zařízení se neshodují. Zdroj %<PRIu64>, cíl %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Aktivace zařízení horké zóny %s selhala."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Aktivace překryvného zařízení %s se skutečnou tabulkou původu selhala."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Zavedení nového mapování pro zařízení %s selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Zásobník zařízení k přešifrování se nepodařilo obnovit."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Nastavení velikosti nové oblasti s pozicemi klíčů selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Posun dat není zarovnán s požadovanou velikostí šifrovaného sektoru (%<PRIu32> bajtů)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Zařízení s daty není zarovnáno na požadovanou velikost šifrovaného sektoru (%<PRIu32> bajtů)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Posun dat (%<PRIu64> sektorů) je menší než budoucí poloha dat (%<PRIu64> sektorů)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Zařízení %s nebylo možné otevřít ve výlučném režimu (již namapováno nebo připojeno)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Zařízení není označeno pro přešifrování LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Načtení kontextu přešifrování LUKS2 selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Stavu přešifrování se nepodařilo zjistit."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Zařízení se nepřešifrovává."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Proces přešifrování již běží."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Získání zámku pro přešifrování selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "V přešifrování nelze pokračovat. Spusťte nejprve obnovu přešifrování."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Aktivní velikost zařízení a velikost požadovaná k přešifrování si neodpovídají."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "V parametrech přešifrování je požadována zakázaná velikost zařízení."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Probíhá přešifrování. Obnovu nelze provést."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "V metadatech je přešifrování LUKS2 již inicializováno."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Inicializace přešifrování LUKS2 v metadatech selhala."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Nastavení segmentů zařízení pro další horkou zónu přešifrování selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Metadata pro odolnost při přešifrování se nepodařilo zapsat."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Rozšifrování selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Zápis oblasti s horkou zónou počínaje na %<PRIu64> selhal."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Synchronizace dat selhala."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Po dokončení přešifrování aktuální horké zóny se nepodařilo aktualizovat metadata."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Zápis metadat LUKS2 selhal."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Vyčištění dat záložní části selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Vypnutí příznaku požadavku na přešifrování selhalo."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Přiřazení tokenu %d do pozice s klíčem %d selhalo."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Získání zámku pro přešifrování selhalo."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Nepřekonatelná chyba při přešifrování bloku na pozici %<PRIu64> dlouhého %<PRIu64> sektorů."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Zařízení neprobouzejte, dokud jej ručně nenahradíte chybovým cílem."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "V přešifrování nelze pokračovat. Přešifrování se nachází v nečekaném stavu."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Chybějící nebo neplatný kontext přešifrování."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Zásobník zařízení k přešifrování se nepodařilo inicializovat."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Kontext přešifrování se nepodařilo aktualizovat."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Pozice klíče %d je neplatná."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Žádná volná pozice s tokenem"
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Vestavěný token %s nebylo možné vytvořit"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Se vstupem mimo terminál nelze ověřit heslo."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Parametry pro šifrování pozice s klíčem lze nastavit jen u zařízení LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Nelze najít žádný známý vzorek se specifikaci šifry."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "POZOR: Jedná-li se o režim plain a je-li určen soubor s klíčem, parametr --hash se ignoruje.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "POZOR: Přepínač --keyfile-size se ignoruje, velikost pro čtení je stejná jako velikosti šifrovacího klíče.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Na %s byla nalezen vzorec zařízení. Pokračování může poškodit existující data."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operace zrušena.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Je vyžadován přepínač --key-file."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Zadejte PIM VeraCryptu: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Neplatná hodnota VIM: chyba rozboru"
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Neplatná hodnota PIM: 0"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Neplatná hodnota PIM: mimo rozsah"
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "S tímto heslem není rozpoznatelná žádná hlavička zařízení."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Zařízení %s není platným zařízením BITLK."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1774,89 +1812,97 @@ msgstr ""
 "který umožňuje přístup k šifrovanému oddílu bez znalosti hesla.\n"
 "Tento výpis by měl být vždy uložen na bezpečném místě a v zašifrované podobě."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Zařízení %s je stále aktivní a naplánováno pro opožděné odstranění.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Změna velikosti aktivního zařízení vyžaduje klíč svazku v klíčence. Byl však použit přepínač --disable-keyring."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Hodnocení výkonu přerušeno."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     –\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iterací za sekundu pro %zubitový klíč\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s –\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iterací, %5u paměti, %1u souběžných vláken (procesorů) pro %zubitový klíč (požadován čas %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Výsledek hodnocení výkonu není spolehlivý."
 
 # ???: are aproximated?
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*sAlgoritmus |      Klíč |       Šifrování |     Dešifrování\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Šifra %s (s %ibitovým klíčem) není dostupná."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#    Algoritmus |      Klíč |       Šifrování |     Dešifrování\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "–"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Zdá se, že zařízení nevyžaduje obnovu přešifrování.\n"
-"Přejete si přesto pokračovat?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Zadejte heslo pro obnovení přešifrování: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Opravdu pokračovat s obnovou přešifrování LUKS2?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Zadejte heslo pro obnovení přešifrování: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Zadejte heslo pro obnovení přešifrování: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Opravdu se pokusit opravit hlavičku zařízení LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1865,106 +1911,110 @@ msgstr ""
 "Lze přerušit pomocí Ctrl+C (zbytek nesmazaného zařízení bude obsahovat\n"
 "neplatné součty).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Dočasné zařízení %s nelze deaktivovat."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Volby integrity lze použít jen při formátu LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Nepodporované volby velikosti metadat LUKS2."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Soubor s hlavičkou neexistuje. Chcete jej vytvořit?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Soubor s hlavičkou %s nelze vytvořit."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Nelze najít žádný známý vzorek se specifikací integrity."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "%s nelze použít pro hlavičku uvnitř disku."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Toto nevratně přepíše data na %s."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Nastavení parametrů PBKDF selhalo."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Zmenšená poloha dat je dovolena jen u oddělené hlavičky LUKS."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Bez pozic pro klíče nelze určit velikost LUKS klíče svazku. Prosím, použijte přepínač --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Zařízení aktivováno, ale příznaky nelze učinit trvalými."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Ke smazání vybrán klíč na pozici %d."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr ""
 "Toto je poslední pozice klíče. Smazáním tohoto klíče přijdete o možnost\n"
 "zařízení použít."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Zadejte jakékoliv jiné heslo: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operace zrušena, pozice klíče NEBYLA vymazána.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Zadejte heslo, které se má smazat: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Zadejte nové heslo pro pozici klíče: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Zadejte jakékoliv existující heslo: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Zadejte heslo, které má být změněno: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Zadejte nové heslo: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Zadejte heslo pro pozici klíče, který má být převeden: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "U operace isLuks je podporován pouze jeden argument se zařízením."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1974,12 +2024,12 @@ msgstr ""
 "který umožňuje přístup k šifrovanému oddílu bez znalosti hesla.\n"
 "Tento výpis by měl být uložen na bezpečném místě a v zašifrované podobě."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Pozice klíče %d neobsahuje nepřiřazený klíč."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1987,30 +2037,40 @@ msgstr ""
 "Výpis hlavičky s nepřiřazeným klíčem je citlivý údaj.\n"
 "Tento výpis by měl být uložen na bezpečném místě a v zašifrované podobě."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s není název aktivního zařízení %s."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s není název aktivního zařízení LUKS nebo mu chybí hlavička."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Je vyžadován přepínač --header-backup-file."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s není zařízení spravované nástrojem cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Reaktivace není na zařízení typu %s podporována"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Nerozpoznaná metadata druhu zařízení %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Příkaz vyžaduje jako argumenty zařízení a mapovaný název."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2019,95 +2079,95 @@ msgstr ""
 "Tento úkon smaže všechny pozice s klíči na zařízení %s.\n"
 "Po jeho dokončení zařízení bude nepoužitelné."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operace zrušena, pozice s klíči NEBYLY smazány.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Neplatný druh formátu LUKS. Podporován je pouze LUKS1 a LUKS2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Zařízení je již druhu %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Tato operace převede formát %s na %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operace zrušena, zařízení NEBYLO převedeno.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Chybí přepínač --priority, --label nebo --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Token %d je neplatný."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Token %d se používá."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Přidání tokenu %d klíčenky LUKS2 selhalo."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Přiřazení tokenu %d do pozice s klíčem %d selhalo."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Token %d se nepoužívá."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Import tokenu ze souboru selhal."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Získání tokenu %d za účelem exportu selhalo."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Parametr --key-description je při přidávání tokenu povinný."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Akce vyžaduje určitý token. Použijte parametr --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Neplatná operace tokenu %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Automaticky nalezené aktivní zařízení DM „%s“ pro datové zařízení %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Zařízení %s není blokovým zařízením.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Držitele zařízení %s nebylo možné automaticky nalézt."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2120,237 +2180,246 @@ msgstr ""
 "To může vést k poškození dat, bylo-li zařízení ve skutečnosti aktivováno.\n"
 "Pro přešifrování za běhu použijte parametr --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Neplatný druh zařízení LUKS."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
-msgstr "Přešifrování bez odpojené hlavičky (--header) není možné bez zmenšení velikosti datového zařízení (--reduce-device-size)."
+msgstr "Přešifrování bez oddělené hlavičky (--header) není možné bez zmenšení velikosti datového zařízení (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Požadovaný počátek dat musí být menší nebo roven polovině parametru --reduce-device-size"
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Upravuje se hodnota --reduce-device-size na dvojnásobek --offset %<PRIu64> (v sektorech).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Šifrování je podporováno jen s formátem LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Na %s zjištěno zařízeno LUKS. Přejete si toto zařízení LUKS znovu zašifrovat?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Dočasný soubor s hlavičkou %s již existuje. Operace se ruší."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Dočasný soubor s hlavičkou %s nelze vytvořit."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s je nyní aktivní a připraveno pro přešifrování za běhu.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "Dešifrování LUKS2 je podporováno jen u zařízení s oddělenou hlavičkou."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Nedostatek pozic s klíči pro přešifrování."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Soubor s klíčem lze použít jen s přepínačem --key-slot nebo s právě jednou aktivní pozicí klíče."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Zadejte heslo pro pozici klíče %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Zadejte heslo pro pozici klíče %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Přepíná se algoritmus šifrování dat na %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Příkaz vyžaduje jako argument zařízení."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Nyní je podporován pouze formát LUKS2. Pro LUKS1, prosím, použijte nástroj cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Zastaralé offline přešifrování již probíhá. Použijte nástroj cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Přešifrování zařízení s profilem integrity není podporováno."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Přešifrování LUKS2 je již inicializováno. Operace se ruší."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "Zařízení LUKS2 se nepřešifrovává."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<zařízení> [--type <druh>] [<název>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "otevře zařízení jako <název>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<název>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "zavře zařízení (odstraní mapování)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "změní velikost aktivního zařízení"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "zobrazí stav zařízení"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <šifra>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "zhodnotí výkon šifry"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<zařízení>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "pokusí se opravit metadata uložená na disku"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "přešifruje zařízení LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "smaže všechny pozice s klíči (odstraní šifrovací klíč)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "převede formát LUKS do/z formátu LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "nastaví trvalé volby konfigurace pro LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<zařízení> [<soubor_s_novým_klíčem>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "naformátuje zařízení LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "do zařízení LUKS přidá klíč"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<zařízení> [<soubor_s_klíčem>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "odstraní zadaný klíč nebo soubor s klíčem ze zařízení LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "změní zadaný klíč nebo soubor s klíčem u zařízení LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "převede klíč do nových parametrů PBKDF"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<zařízení> <pozice_klíče>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "smaže klíč s číslem <pozice_klíče> ze zařízení LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "zobrazí UUID zařízení LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "otestuje <zařízení> na hlavičku oddílu LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "vypíše údaje o oddílu LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "vypíše údaje o oddílu TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "vypíše údaje o zařízení BITLK"
 
 # TODO: not consistent with previous line
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Uspí zařízení LUKS a smaže klíč (všechny operace budou zmrazeny)"
 
 # TODO: not consistent with previous line
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Probudí uspané zařízení LUKS"
 
 # TODO: not consistent with previous line
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Zálohuje hlavičku zařízení LUKS a jeho pozice s klíči"
 
 # TODO: not consistent with previous line
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Obnoví hlavičku zařízení LUKS a jeho pozice s klíči"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <zařízení>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Zachází s tokeny LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2358,7 +2427,7 @@ msgstr ""
 "\n"
 "<akce> je jedna z:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2370,7 +2439,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2385,7 +2454,7 @@ msgstr ""
 "<pozice_klíče> je číslo pozice klíče LUKS, který se má upravit\n"
 "<soubor_s_klíčem> je volitelný soubor s novým klíčem pro akci luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2394,7 +2463,7 @@ msgstr ""
 "\n"
 "Výchozí zakompilovaný formát metadat (pro akci luksFormat) je %s.\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2411,7 +2480,7 @@ msgstr ""
 "Výchozí PBKDF pro LUKS2: %s\n"
 "\tDoba iterací: %d, nutná paměť: %d kB, souběžná vlákna: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2426,443 +2495,451 @@ msgstr ""
 "\tplain: %s, Klíč: %d bitů, Haš hesla: %s\n"
 "\tLUKS: %s, Klíč: %d bitů, Haš hlavičky LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: V režimu XTS (dva vnitřní klíče) bude výchozí velikost klíče zdvojnásobena.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: vyžaduje %s jako argumenty"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Zobrazí tuto nápovědu"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Zobrazí stručný návod na použití"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Vypíše verzi balíku"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Přepínače nápovědy:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Zobrazuje podrobnější chybové hlášky"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Zobrazuje ladicí hlášky"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Zobrazuje ladicí hlášky včetně metadat JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Šifra použita k zašifrování disku (vizte /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Haš použit k vytvoření šifrovacího klíče z hesla"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Ověřuje heslo dvojitým dotazem"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Klíč načte ze souboru"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "(Hlavní) klíč svazku načte ze souboru."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Vypíše (hlavní) klíč svazku namísto údajů o pozicích klíčů"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Velikost šifrovacího klíče"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITY"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Omezí čtení ze souboru s klíčem"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "bajty"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Přeskočí daný počet bajtů na začátku souboru s klíčem"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Omezí čtení z nově přidaného souboru s klíčem"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Přeskočí daný počet bajtů na začátku nově přidaného souboru s klíčem"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Číslo pozice pro nový klíč (výchozí je první volná)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Velikost zařízení"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTORY"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Použije zadanou velikost zařízení (ignoruje zbytek zařízení). NEBEZPEČNÉ!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Poloha začátku dat v podkladovém zařízení"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Kolik sektorů šifrovaných dat se má na začátku přeskočit"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Vytvoří mapování určené jen pro čtení"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Nevyžaduje potvrzení"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Časový limit pro interaktivní dotaz na heslo (v sekundách)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "sekundy"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Aktualizace ukazatele postupu (v sekundách)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Kolikrát se lze zeptat na heslo"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Zarovnává data na hranici <n> sektorů – pro luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Soubor se zálohou hlavičky LUKS a pozic s klíči"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Pro vytvoření klíče svazku použije /dev/random"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Pro vytvoření klíče svazku použije /dev/urandom"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Zařízení sdílí s jiným nepřekrývajícím se šifrovaným segmentem"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "Použije zařízení s UUID"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Povolí u daného zařízení požadavky na zahození (TRIM)"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Zařízení nebo soubor s oddělenou hlavičkou LUKS"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Zařízení neaktivuje, jen zkontroluje heslo"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Použije se skrytá hlavička (skryté zařízení TCRYPT)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Zařízení je systémová jednotka TCRYPT (se zavaděčem)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Použije se záložní (druhá) hlavička TCRYPT"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Hledá také zařízení kompatibilní s VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Osobní iterační činitel (PIM) pro zařízení kompatibilní s VeraCrypt"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Zeptá se na Osobní iterační činitel pro zařízení kompatibilní s VeraCrypt"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Druh metadat zařízení: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Vypne kontrolku odolnosti hesla (byla-li zapnuta)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Použije výkonnostně kompatibilní přepínač dmcryptu same_cpu_crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Použije výkonnostně kompatibilní přepínač dmcryptu submit_from_crypt_cpus"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Přeskočit pracovní frontu dm-cryptu a zpracovávat požadavky na čtení synchronně"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Přeskočit pracovní frontu dm-cryptu a zpracovávat požadavky na zápis synchronně"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Odstranění zařízení se odloží, dokud jej poslední uživatel neuzavře"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Pro serializaci paměti těžkého PBKDF použije globální zámek (obezlička při nedostatku paměti)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Doba opakování PBKDF pro LUKS (v ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "milisekundy"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algoritmus PBKDF (pro LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "omezení paměťové náročnosti PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobajty"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "náročnost paralelizace PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "vlákna"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "náročnost iterací PBKDF (vynuceno, vypne test složitosti)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Priorita pozice klíče: ignore [ignorovat], normal [normální], prefer [upřednostnit]"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Vypne zamykání metadata uložených na disku"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Vypne načítání klíčů svazků přes jadernou klíčenku"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algoritmus pro integritu dat (pouze LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Vypne žurnál pro zařízení s integritou"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Po formátu nevymazat zařízení"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Použije neefektivní zastaralé vyplňování (stará jádra)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Neptá se na heslo, když aktivace tokenem selže"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Číslo tokenu (výchozí cokoliv)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Popis klíče"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Velikost sektoru šifrování (výchozí: 512 bajtů)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Inicializační vektor počítá ve velikostech sektoru (nikoliv po 512 bajtech)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Nastaví trvalé příznaky pro aktivaci zařízení"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Nastaví jmenovku zařízení LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Nastaví jmenovku podsystému zařízení LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Vytvoří nebo vypíše nepřiřazenou (žádný datový segment nepřiřazen) LUKS2 pozici s klíčem"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Načte nebo zapíše JSON z nebo do souboru"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Velikost oblasti s metadaty hlavičky LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Velikost oblasti s pozicemi klíčů hlavičky LUKS"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Reaktivuje zařízení s novými parametry"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Pozice s klíčem LUKS2: Velikost šifrovacího klíče"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Pozice s klíčem LUKS2: Šifra použitá pro šifrování pozice s klíčem"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Zašifruje zařízení LUKS2 (šifrování bez mezikopie)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Natrvalo dešifruje zařízení LUKS2 (odstraní šifrování)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Inicializuje přešifrování LUKS2 pouze v metadatech."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Pouze dokončí již inicializované přešifrování LUKS2."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Zmenší velikost datového zařízení (posune začátek dat). NEBEZPEČNÉ!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Maximální velikost horké zóny při přešifrování."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Druh odolnosti horké zóny při přešifrování (checksum [kontrolní součet], journal [žurnál], none [žádná])"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Algoritmus kontrolního součtu při přešifrování"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Přebije automatické hledání zařízení DM pro přešifrování"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[PŘEPÍNAČ…] <akce> <přepínače_akce>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Chybí argument <akce>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Neznámá akce."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Přepínače --refresh a --test-passphrase se vzájemně vylučují."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Přepínač --deferred je dovolen jen při příkazu zavření."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Přepínač --shared je dovolen jen při úkonu otevírání zařízení plain."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Přepínač --allow-discards je dovolen jen při úkonu otevírání."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Přepínač --persistent je dovolen jen při úkonu otevírání."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Přepínač --serialize-memory-hard-pbkdf je dovolen jen při úkonu otevírání."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Přepínač --persistent není dovolen současně s --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2871,261 +2948,260 @@ msgstr ""
 "open a benchmark. Čtení ze souboru s klíčem lze omezit\n"
 "pomocí --keyfile-size=(bajty)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Přepínač --integrity je dovolen pouze u luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Přepínač --integrity-no-wipe smí být použit jen při formátování s rozšířením integrity."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Přepínače --label a --subsystem jsou dovoleny jen při úkonech luksFormat a config s LUKS2."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Přepínač --test-passphrase je dovolen pouze při otevírání zařízení LUKS, TCRYPT a BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Velikost klíče musí být násobkem 8 bitů."
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Pozice klíče není platná."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Přepínač --key-file má přednost před zadaným argumentem souboru s klíčem."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "U přepínače není záporné číslo dovoleno."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Je dovolen pouze jeden argument přepínače --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Je dovolen pouze jeden z přepínačů --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Přepínač --use-[u]random je dovolen pouze u luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Přepínač --uuid je dovolen pouze u luksFormat a luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Přepínač --align-payload je dovolen pouze u luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Přepínače --luks2-metadata-size a --opt-luks2-keyslots-size jsou dovoleny jen při úkonu luksFormat s LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Zadána neplatná velikost metadat LUKS2."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Zadána neplatná velikost pozic s klíči LUKS2."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Přepínače --align-payload a --offset nelze kombinovat."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Přepínač --skip je podporován jen při otevírání zařízení plain a loopaes."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Přepínač --offset je podporován jen při otevírání zařízení plain a loopaes a při úkonu luksFormat a přešifrování."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Přepínač --tcrypt-hidden, --tcrypt-system nebo --tcrypt-backup je podporován jen u zařízení TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Přepínač --tcrypt-hidden nelze použít s přepínačem --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Přepínač --veracrypt je podporován jen u typu zařízení TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Zadán neplatný argument parametru --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Přepínač --veracrypt-pim je podporován jen u zařízení kompatibilním s VeraCrypt."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Přepínač --veracrypt-query-pim je podporován jen u zařízení kompatibilním s VeraCrypt."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Přepínače --veracrypt-pim a --veracrypt-query-pim se vzájemně vylučují."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Přepínač --priority smí mít pouze argument ignore, normal a prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Je nutné určit pozici s klíčem."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Funkce pro odvození klíče na základě hesla (PBKDF) smí být pouze pbkdf2 nebo argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Vynucené iterace PBKDF nelze kombinovat s volnou doby iterací."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "Tento příkaz nepodporuje volbu velikosti sektoru."
 
 # FIXME: "Large IV sectors" should read "IV large sectors".
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "Volba inicializačního vektoru s velkými sektory je podporována jen při otevírání zařízení typu plain s velikostí sektoru větší než 512 bajtů."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "Přepínač --unbound vyžaduje velikost klíče."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Přepínač --unbound lze použít pouze s akcemi luksAddKey nebo luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Přepínač --refresh lze použít pouze s úkonem otevření."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Zamykání metadata nelze vypnout."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Zadána neplatná maximální velikost horké zóny při přešifrování."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Zadána neplatná velikost zařízení."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Maximální velikost zmenšení zařízení je 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Velikost zmenšení musí být násobkem 512bajtových sektorů."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Zadána neplatná velikost dat."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Velikost ke zmenšení přetekla."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "Dešifrování LUKS2 vyžaduje přepínač --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Velikost zařízení musí být násobkem 512bajtových sektorů."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Přepínače --reduce-device-size a --data-size nelze kombinovat."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Přepínače --device-size a --size nelze kombinovat."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Přepínače --ignore-corruption a --restart-on-corruption nelze použít najednou."
+msgstr "Přepínače --keyslot-cipher a --keyslot-key-size musí být použity spolu."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Zadán neplatný řetězec se solí."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Nelze vytvořit obraz hašů %s určený k zápisu."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Nelze vytvořit obraz FEC %s určený k zápisu."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Zadán neplatný řetězec s kořenovým hašem."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Neplatné soubor s podpisem %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Soubor s podpisem %s nelze číst."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<zařízení_dat> <zařízení_hašů>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "naformátuje zařízení"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<zařízení_dat> <zařízení_hašů> <kořenový_haš>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "ověří zařízení"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<zařízení_dat> <název> <zařízení_hašů> <kořenový_haš>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "zobrazí stav aktivního zařízení"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<zařízení_hašů>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "zobrazí údaje z disku"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3140,7 +3216,7 @@ msgstr ""
 "<zařízení_hašů> je zařízení obsahující ověřovací data\n"
 "<kořenový_haš> haš kořenového uzlu na <zařízení_hašů>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3151,127 +3227,140 @@ msgstr ""
 "Výchozí zakompilované parametry dm-verity:\n"
 "\tHaš: %s, Datový blok (bajty): %u, Blok hašů (bajty): %u, Velikost soli: %u, Formát haše: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Nepoužije superblok verity"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Druh formátu (1 – běžný, 0 – původní z OS Chrome)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "číslo"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Velikost bloku na zařízení dat"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Velikost bloku na zařízení hašů"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Paritní bajty FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Počet bloků v datovém souboru"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "bloky"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Cesta k zařízení s daty pro opravu chyb"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "cesta"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Poloha začátku dat v zařízení hašů"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Poloha začátku dat v zařízení FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Hašovací algoritmus"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "řetězec"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Sůl"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "šestnáctkový řetězec"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Cesta k souboru s podpisem kořenového otisku"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Restartuje jádro, pokud je zjištěno poškození"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Jádro zpanikaří, pokud je zjištěno poškození"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignoruje poškození, pouze jej zaznamená"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Neověřuje vynulované bloky"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Ověří datový blok pouze při prvním čtení"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Přepínače --ignore-corruption, --restart-on-corruption nebo --ignore-zero-blocks jsou dovoleny jen při úkonu otevírání."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Přepínač --root-hash-signature smí být použit jen při otevírání."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Přepínače --ignore-corruption a --restart-on-corruption nelze použít najednou."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Přepínač --panic-on-corruption a --restart-on-corruption nelze použít najednou."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Neplatná velikost klíče. Maximální je %u bajtů."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Soubor s klíčem %s nelze číst."
 
 # FIXME: Pluralize
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Ze souboru s klíčem %2$s nelze přečíst %1$d bajtů."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formátováno s velikostí značky %u, vnitřní integrita %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<zařízení_s_daty_integrity>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<zařízení_s_daty_integrity> <název>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3282,403 +3371,409 @@ msgstr ""
 "<název> je zařízení, které bude vytvořeno pod %s\n"
 "<zařízení_s_daty_integrity> je zařízení obsahující data se značkami integrity\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Výchozí zakompilované parametry dm-integrity:\n"
 "\tAlgoritmus kontrolního součtu: %s\n"
+"\tMaximální velikost souboru s klíčem: %d kB\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Cesta k zařízení s daty (je-li odděleno)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Velikost žurnálu"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Prokládat sektory"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Zaplněnost žurnálu"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "procenta"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Perioda vyprazdňování žurnálu"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Počet 512bajtových sektorů na bit (režim bitmapy)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Perioda vyprazdňování při režimu bitmapy"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Velikost značky (na sektor)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Velikost sektoru"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Velikost vyrovnávací paměti"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algoritmus pro kontrolu integrity dat"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Velikost klíče pro integritu dat"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Klíč pro integritu načte ze souboru"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algoritmus pro integritu žurnálu"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Velikost klíče integrity žurnálu"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Klíč integrity žurnálu načte ze souboru"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algoritmus šifrování žurnálu"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Velikost šifrovacího klíče žurnálu"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Šifrovací klíč žurnálu načte ze souboru"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Režim obnovy (žádný žurnál, žádná kontrola značek)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Ke sledování změn použije bitmapu a vypne žurnál pro zařízení s integritou"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Automaticky přepočítá počáteční značky."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Nechrání superblok pomocí HMAC (stará jádra)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Povolí přepočet svazků s klíči HMAC (stará jádra)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Přepínač --integrity-recalculate smí být použit jen při otevírání."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Přepínače --journal-size, --interleave-sectors, --sector-size, --tag-size a --no-wipe lze použít jen při formátování."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Zadána neplatná velikost žurnálu."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Musí být zadány oba přepínače pro soubor s klíčem a velikostí klíče."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Je-li použit klíč integrity, musí být zadán algoritmus integrity."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Musí být zadány oba přepínače pro soubor s klíčem žurnálu a velikostí klíče."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Je-li použit klíč integrity žurnálu, musí být zadán algoritmus integrity žurnálu."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Musí být zadány oba přepínače pro soubor s šifrovacím klíčem žurnálu a velikostí klíče."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Je-li použit šifrovací klíč žurnálu, musí být zadán algoritmus šifrování žurnálu."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Přepínače režimu bitmapy a obnovení se vzájemně vylučují."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Přepínače žurnálu nelze použití spolu s režimem bitmapy."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Přepínače bitmapy lze použít jen při režimu bitmapy."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Přešifrování již probíhá."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Zařízení %s nelze výlučně otevřít. Zařízení se používá."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Alokace zarovnané paměti se nezdařila."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Ze zařízení %s nelze číst."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "LUKS1 zařízení %s se označuje za nepoužitelné."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Na zařízení %s se nastavuje příznak offline přešifrování."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Zařízení %s není možné zapsat."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Nelze zapsat soubor s protokolem přešifrování."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Soubor s protokolem přešifrování nelze načíst."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Soubor s protokolem %s existuje, pokračuje se v přerušeném přešifrování.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Aktivuje se dočasné zařízení za pomoci staré hlavičky LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Aktivuje se dočasné zařízení za pomoci nové hlavičky LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Aktivace dočasných zařízení selhala."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Nastavení polohy dat selhalo."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Nastavení velikosti metadat selhalo."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Byla vytvořena nová hlavička LUKS zařízení %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Tato verze cryptsetup-reencrypt neumí zacházet s novým vnitřním druhem tokenů %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Přečtení příznaků pro aktivaci ze záložní hlavičky selhalo."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Zápis příznaků pro aktivaci do nové hlavičky selhal."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Čtení požadavků ze záložní hlavičky selhalo."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Záloha hlavičky %s zařízení %s byla vytvořena."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Záložní hlavičky LUKS se nepodařilo vytvořit."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Hlavičku %s na zařízení %s nelze obnovit."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Hlavička %s na zařízení %s byla obnovena."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Nelze otevřít dočasné zařízení LUKS."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Velikost zařízení nelze zjistit."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Chyba vstupu/výstupu během přešifrování."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Poskytnuté UUID není platné."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Nelze otevřít soubor s protokolem přešifrování."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Žádné dešifrování není rozpracované. Poskytnuté UUID lze použít jen k dokončení pozastaveného procesu dešifrování."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Parametry PBKDF pro pozici klíče %i změněny."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Velikost bloku přešifrování"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Nezmění klíč, oblast s daty se nepřešifruje"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Nový (hlavní) klíč svazku načte ze souboru"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Doba opakování PBKDF2 pro LUKS (v ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "K zařízením se bude přistupovat pomocí přímého I/O"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Po každém bloku se zavolá fsync"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Po každém bloku se aktualizuje soubor s protokolem"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Použije se pouze tato pozice (ostatní budou zakázány)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Vytvoří novou hlavičku na nešifrovaném zařízení"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Natrvalo dešifruje zařízení (odstraní šifrování)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "UUID, které se použije pro dokončení dešifrování"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Druh metadat LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[PŘEPÍNAČ…] <zařízení>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Přešifrování změní: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "klíč svazku"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "nastaví haš na "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", nastaví šifru na "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Vyžadován argument."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Velikost bloku při přešifrování může nabývat hodnot pouze mezi 1 a 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Maximální velikost zmenšení zařízení je 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Přepínač --new musí být použit spolu s --reduce-device-size nebo --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Přepínač --keep-key lze použít jen s přepínači --hash, --iter-time nebo --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Přepínač --new nelze být použit spolu s --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Přepínač --decrypt se neslučuje se zadanými parametry."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Přepínač --uuid lze použít jen spolu s přepínačem --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Neplatný druh LUKS. Použijte jeden z: „luks“, „luks1“ nebo „luks2“"
 
@@ -3719,32 +3814,32 @@ msgstr "neznámá chyba"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Příkaz selhal s kódem %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Pozice klíče %i vytvořena."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Pozice klíče %i odemknuta."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Pozice klíče %i odemknuta."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i vytvořen."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i se odstraněn."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3752,55 +3847,55 @@ msgstr ""
 "\n"
 "Výmaz přerušen."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "POZOR: Zařízení %s již obsahuje vzorec oddílu „%s“.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "POZOR: Zařízení %s již obsahuje vzorec superbloku „%s“.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Sondu vzorců zařízení se nepodařilo inicializovat."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "O zařízení %s nebylo možné zjistit údaje."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Zařízení %s se používá. K formátování nelze přikročit."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Soubor %s nebylo možné otevřít pro čtení i zápis."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Existující vzorec „%s“ oddílu (poloha: %<PRIi64> bajtů) na zařízení %s bude vymazán."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Existující vzorec superbloku „%s“ (poloha: %<PRIi64> bajtů) na zařízení %s bude vymazán."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Odstranění vzorce ze zařízení selhalo."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Otestování zařízení %s na vzorce selhalo."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3808,7 +3903,7 @@ msgstr ""
 "\n"
 "Přešifrování přerušeno."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Odolnost hesla nelze prověřit: %s"
@@ -3827,46 +3922,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Kontrola odolnosti hesla selhala: Špatné heslo (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Chyba při čtení hesla z terminálu."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Ověřte heslo: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Hesla se neshodují."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Ve vstupu z terminálu nelze měnit polohu."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Zadejte heslo: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Zadejte heslo pro %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "S tímto heslem není dostupný žádný klíč."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Nejsou dostupné žádné použitelné pozice s klíči."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Soubor s klíčem %s nelze otevřít pro zápis."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Do souboru s klíčem %s nelze zapsat."
@@ -3909,6 +4004,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Zapsaní souboru s dokumentem JSON selhalo."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Vypnutí příznaku požadavku na přešifrování selhalo."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Zdá se, že zařízení nevyžaduje obnovu přešifrování.\n"
+#~ "Přejete si přesto pokračovat?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "POZOR: Adresář se zámkem %s/%s chybí!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Neplatné parametry velikosti pro zařízení VERITY."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Je-li použit klíč integrity, musí být zadán algoritmus integrity."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Špatná velikost klíče."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "Přepínač --refresh je dovolen jen při příkazu otevření nebo reaktivace."
 
index 61f31c2..08eb808 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index 385ae6d..bda7f15 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup-2.3.1-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2020-03-08 22:35+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -29,61 +29,62 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Kan ikke initialisere enhedsoversætter, kører som ikke-root bruger."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Kan ikke initialisere enhedsoversætter. Er dm_mod-kernemodulet indlæst?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Det anmodede udskudte flag er ikke understøttet."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID for enheden %s blev afkortet."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Ukendt dm-måltype."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Forespurgte dm-crypt-ydelsestilvalg er ikke understøttede."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Forespurgte dm-verity-håndteringstilvalg for datakorruption er ikke understøttede."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Forespurgte dm-verity FEC-tilvalg er ikke understøttede."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Forespurgte dataintegritetstilvalg er ikke understøttede."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Forespurgte sector_size-tilvalg er ikke understøttet."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Forespurgte automatiske genberegning af integritetsmærker er ikke understøttet."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM %s er ikke understøttet."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Forespurgte dm-integritetsbitmaptilstand er ikke understøttet."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Kunne ikke forespørge dm-%s-segment."
@@ -125,7 +126,7 @@ msgstr "Kan ikke initialisere crypto RNG-motor."
 msgid "Cannot initialize crypto backend."
 msgstr "Kan ikke initialisere crypto-motor."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Hashalgoritmen %s er ikke understøttet."
@@ -139,7 +140,7 @@ msgstr "Nøglebehandlingsfejl (der bruger hash %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Kan ikke bestemme enhedstype. Er aktivering af enhed ikke kompatibel?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Denne operation er kun understøttet for LUKS-enhed."
 
@@ -147,7 +148,7 @@ msgstr "Denne operation er kun understøttet for LUKS-enhed."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Denne operation er kun understøttet for LUKS2-enhed."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Alle nøglepladser er udfyldt."
 
@@ -161,7 +162,7 @@ msgstr "Nøglepladsen %d er ugyldig, vælg venligst mellem 0 og %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Nøglepladsen %d er fuld, vælg venligst en anden."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Enhedsstørrelsen er ikke justeret til logisk blokstørrelse for enhed."
 
@@ -170,7 +171,8 @@ msgstr "Enhedsstørrelsen er ikke justeret til logisk blokstørrelse for enhed."
 msgid "Header detected but device %s is too small."
 msgstr "Teksthoved registreret men enheden %s er for lille."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Denne operation er ikke understøttet for denne enhedstype."
 
@@ -178,17 +180,13 @@ msgstr "Denne operation er ikke understøttet for denne enhedstype."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Ulovlig operation med omkryptering i gang."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "LUKS-version %d er ikke understøttet."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Frakoblet metadataenhed er ikke understøttet for denne crypttype."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Enheden %s er ikke aktiv."
@@ -202,7 +200,7 @@ msgstr "Underliggende enhed for cryptenheden %s forsvandt."
 msgid "Invalid plain crypt parameters."
 msgstr "Ugyldige rene crypt-parametre."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Ugyldig nøglestørrelse."
 
@@ -210,12 +208,16 @@ msgstr "Ugyldig nøglestørrelse."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID er ikke understøttet for denne crypttype."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Frakoblet metadataenhed er ikke understøttet for denne crypttype."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Sektorstørrelsen på krypteringen er ikke understøttet."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Enhedsstørrelsen er ikke justeret til den anmodede sektorstørrelse."
 
@@ -259,8 +261,8 @@ msgstr "ADVARSEL: LUKS2-metadatastørrelse ændret til %<PRIu64> byte.\n"
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "ADVARSEL: LUKS2-nøglepladsens områdestørrelse er ændret til %<PRIu64> byte.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Enheden %s er for lille."
@@ -293,16 +295,16 @@ msgstr "Kan ikke formatere LOOPAES uden enhed."
 msgid "Can't format VERITY without device."
 msgstr "Kan ikke formatere VERITY uden enhed."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "VERITY-hashtypen %d er ikke understøttet."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "VERITY-blokstørrelse er ikke understøttet."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "VERITY-hashforskydning er ikke understøttet."
 
@@ -332,236 +334,236 @@ msgstr "ADVARSEL: Anmodte mærkestørrelse %d byte er forskellig fra %s størrel
 msgid "Unknown crypt device type %s requested."
 msgstr "Der blev anmodt om ukendt crypt-enhedstype %s."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Ikke understøttede parametre på enheden %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Parametre matcher ikke på enheden %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Crypt-enheder er forskellige."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Kunne ikke genindlæse enheden %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Kunne ikke placere enheden %s i dvale."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Kunne ikke genoptage enheden %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Der opstod en fatal fejl under genindlæsning af enheden %s (oven på enheden %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Kunne ikke skifte enheden %s til dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Kan ikke ændre størrelse på loop-enhed."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Ønsker du at ændre UUID for enhed?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Sikkerhedskopifilen indeholder ikke gyldige LUKS-teksthoveder."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Diskenheden %s er ikke aktiv."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Diskenheden %s er allerede suspenderet."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Suspension er ikke understøttet for enheden %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Fejl under suspension af enheden %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Diskenheden %s er ikke suspenderet."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Genoptag er ikke understøttet for enheden %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Fejl under genoptagelse af enheden %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Diskenheden %s er ikke suspenderet."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Diskenhedsnøgle matcher ikke diskenheden."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Kan ikke tilføje nøgleplads, alle pladser er deaktiveret og ingen diskenhedsnøgle tilbudt."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Kunne ikke swappe ny nøgleplads."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Nøglepladsen %d er ugyldig."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Nøglepladsen %d er ikke aktiv."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Enhedsteksthoved overlapper med dataområde."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Omkryptering er i gang. Kan ikke aktivere enhed."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Kunne ikke indhente omkrypteringslås."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "LUKS2-omkrypteringsgendannelse mislykkedes."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Enhedstypen er ikke ordentlig initialiseret."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Kan ikke bruge enheden %s, navnet er ugyldigt eller stadig i brug."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Enheden %s findes allerede."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Kan ikke bruge enheden %s, navnet er ugyldigt eller stadig i brug."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Ukorrekt diskenhedsnøgle specificeret for ren enhed."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Ukorrekt roothash specificeret for verity-enhed."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Roothash-signatur er krævet."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Kernenøglering mangler: krævet for at sende signatur til kernen."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Kunne ikke indlæse nøgle i kernenøglefil."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Enheden %s er stadig i brug."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Ugyldig enhed %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Diskenhedsnøglebuffer er for lille."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Kan ikke indhente diskenhedsnøgle for ren enhed."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Kan ikke hente roothash for verity-enhed."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Denne operation er ikke understøttet for %s crypt-enhed."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Dump-operation er ikke understøttet for denne enhedstype."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Dataforskydning er ikke et multiplum af %u byte."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Kan ikke konvertere enheden %s som stadig er i brug."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Kunne ikke tildele nøglepladsen %u som den nye diskenhedsnøgle."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Kunne ikke initialisere standardparametre for LUKS2-nøgleplads."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Kunne ikke tildele nøglepladsen %d til sammendrag."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Kernenøglering er ikke understøttet af kernen."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Kunne ikke læse adgangsfrase fra nøglering (fejl %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Kunne ikke indhente global adgangsserialiseringslås for memory-hard."
 
@@ -589,8 +591,8 @@ msgstr "Kunne ikke køre stat på nøglefil."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Kan ikke søge til anmodede nøglefilsforskydning."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Ikke nok hukommelse under læsning af adgangsfrase."
 
@@ -610,51 +612,56 @@ msgstr "Nøglefilsstørrelsen er over maksimum."
 msgid "Cannot read requested amount of data."
 msgstr "Kan ikke læse den anmodede datamængde."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Enheden %s findes ikke eller adgang nægtet."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Enheden %s er ikke kompatibel."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Enheden %s er for lille. Kræver mindst %<PRIu64> byte."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Kan ikke bruge enheden %s som er i brug (allerede kortlagt eller monteret)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Kan ikke bruge enheden %s, tilladelse nægtet."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Kan ikke indhente information om enheden %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Kan ikke bruge en loopback-enhed, kører som ikke-root bruger."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Vedhæftelse af loopback-enhed mislykkedes (loop-enhed med flaget autoclear er krævet)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Anmodt forskydning er mere end den reelle størrelse for enheden %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Enheden %s har nul størrelse."
@@ -728,16 +735,16 @@ msgstr "Låsning afbrudt. Låsestien %s/%s kan ikke bruges (ikke en mappe eller
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "ADVARSEL: Låsemappen %s/%s mangler!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr ""
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Låsning afbrudt. Låsestien %s/%s kan ikke bruges (%s er ikke en mappe)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Kan ikke søge til enhedsforskydning."
 
@@ -764,8 +771,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Specifikation for krypteringsalgoritme skal være i [cipher]-[mode]-[iv]-format."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Kan ikke skrive til enheden %s, tilladelse nægtet."
@@ -784,12 +791,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "IO-fejl under kryptering af nøgleplads."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Kan ikke åbne enheden %s."
@@ -810,43 +817,43 @@ msgstr "Enheden %s er for lille. (LUKS1 kræver mindst %<PRIu64> byte.)"
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS-nøgleplads %u er ugyldig."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Enheden %s er ikke en gyldig LUKS-enhed."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Den anmodede sikkerhedskopifil %s for teksthoveder findes allerede."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Kan ikke oprette sikkerhedskopifilen %s for teksthoveder."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Kan ikke skrive sikkerhedskopifilen %sf for teksthoveder."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Sikkerhedskopifilen indeholder ikke gyldige LUKS-teksthoveder."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Kan ikke åbne sikkerhedskopifilen %s for teksthoveder."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Kan ikke læse sikkerhedskopifilen %s for teksthoveder."
@@ -868,7 +875,7 @@ msgstr "indeholder ikke LUKS-teksthoveder. Erstatning af teksthoved kan ødelæg
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "indeholder allerede LUKS-teksthoveder. Erstatning af teksthoveder vil ødelægge eksisterende nøglepladser."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -880,101 +887,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Nøglestørrelsen følger ikke standarden, en manuel reparation er krævet."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Nøglepladsopstillingen følger ikke standarden, en manuel reparation er krævet."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Reparerer nøglepladser."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Nøgleplads %i: forskydning repareret (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Nøgleplads %i: striber (»stripes«) repareret (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Nøgleplads %i: falsk partitionssignatur."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Nøgleplads %i: salt ryddet."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Skriver LUKS-teksthovedet til disken."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Reparation mislykkedes."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Den anmodede LUKS-hash %s er ikke understøttet."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Ingen kendte problemer registreret for LUKS-teksthoved."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Fejl under opdatering af LUKS-teksthoved på enheden %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Fejl under genlæsning af LUKS-teksthoved efter opdatering på enheden %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Dataforskydning for LUKS-teksthoved skal være enten 0 eller større end teksthovedstørrelse."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Forkert LUKS UUID-format anført."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Kan ikke oprette LUKS-teksthoved: læsning af vilkårlig salt mislykkedes."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Kan ikke oprette LUKS-teksthoved: Teksthovedsammendrag mislykkedes (bruger hash %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Nøgleplads %d aktiv, nulstil (purge) den først."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Nøgleplads %d-materiale inkluderer for få striber (»stribes«). Teksthovedmanipulering?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Kan ikke åbne nøgleplads (der bruger hash %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Nøgleplads %d er ugyldig, vælg nøgleplads mellem 0 og %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Kan ikke rydde enheden %s."
@@ -1010,11 +1017,11 @@ msgstr "Den maksimale længde for TCRYPT-adgangsfrasen (%zu) er overskredet."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2-hashalgoritmen %s er ikke tilgængelig, udelader."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Krævet kernegrænseflade for crypto er ikke tilgængelig."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Sikr dig at du har kernemodulet algif_skcipher indlæst."
 
@@ -1027,159 +1034,174 @@ msgstr "Aktivering er endnu ikke understøttet for %d sektorstørrelse."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Kerne understøtter ikke aktivering for denne TCRYPT legacy-tilstand."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Aktivering af TCRYPT-systemkryptering for partition %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Kerne understøtter ikke TCRYPT-kompatibel oversættelse."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Denne funktion er ikke understøttet uden TCRYPT-teksthovedindlæsning."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Uventet metadataindgangstype »%u« fundet da understøttet Volume Master Key blev fortolket."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Ugyldig streng fundet da Volume Master Key blev fortolket."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Uventet streng (»%s«) fundet da Volume Master Key blev fortolket."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Uventet metadataindgangsværdi »%u« fundet da Volume Master Key blev fortolket."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Kunne ikke læse BITLK-signatur fra %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Ugyldig eller ukendt signatur for BITLK-enhed."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK version 1 er i øjeblikket ikke understøttet."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Ugyldig eller ukendt opstartssignatur for BITLK-enhed."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Ugyldig eller ukendt signatur for BITLK-enhed."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Sektorstørrelsen på krypteringen er ikke understøttet."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Kunne ikke læse BITLK-teksthoved fra %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Kunne ikke læse BITLK FVE-metadata fra %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Ukendt eller ikke understøttet krypteringstype."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Kunne ikke læse BITLK-metadataposter fra %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, fuzzy, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Uventet metadataindgangstype »%u« fundet da understøttet Volume Master Key blev fortolket."
+
+#: lib/bitlk/bitlk.c:912
+#, fuzzy, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Uventet metadataindgangsværdi »%u« fundet da Volume Master Key blev fortolket."
+
+#: lib/bitlk/bitlk.c:980
+#, fuzzy
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Uventet metadataindgangstype »%u« fundet da understøttet Volume Master Key blev fortolket."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Denne operation er ikke understøttet."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Forkert nøglestørrelse."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Denne BITLK-enhed er i en ikkeunderstøttet tilstand og kan ikke aktiveres."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "BITLK-enheder med typen »%s« kan ikke aktiveres."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Aktivering af delvist dekrypteret BITLK-enhed er ikke understøttet."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Kan ikke aktivere enhed, kernel dm-crypt mangler understøttelse for BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Kan ikke aktivere enhed, kernen dm-crypt mangler understøttelse for BITLK Elephant diffuser."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Verity-enheden %s bruger ikke on-disk-teksthoved."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Enheden %s er ikke en gyldig VERITY-enhed."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Ikke understøttet VERITY-version %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY-teksthovedet er ødelagt."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Forkert VERITY UUID-format indeholdt på enheden %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Fejl under opdatering af verity-teksthoved på enheden %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Roothash-signaturverifikation er ikke understøttet."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Fejl kan ikke repareres med FEC-enhed."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Fandt %u fejl der kan repareres med FEC-enhed."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Kerne understøtter ikke dm-verity-oversættelse."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Kerne understøtter ikke dm-verity-signaturtilvalg."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Verity-enheden registrerede korruption efter aktivering."
 
@@ -1188,41 +1210,37 @@ msgstr "Verity-enheden registrerede korruption efter aktivering."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Ledigt område nulstilles ikke (»not zeroed«) på position %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Forskydningsoverløb for enhed."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Verificering mislykkedes på position %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Ugyldig størrelse for parametre for verity-enhed."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Hashområdeoverløb."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Verifikation af dataområde mislykkedes."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Verifikation af root-hash mislykkedes."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Inddata/uddata-fejl under oprettelse af hash-område."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Oprettelse af hash-område mislykkedes."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "ADVARSEL: Kerne kan ikke aktivere enhed hvis dataenes blokstørrelse er større end sidestørrelsen (%u)."
@@ -1231,53 +1249,62 @@ msgstr "ADVARSEL: Kerne kan ikke aktivere enhed hvis dataenes blokstørrelse er
 msgid "Failed to allocate RS context."
 msgstr "Kunne ikke allokere RS-kontekst."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Kunne ikke allokere buffer."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Kunne ikke læse RS-blok %<PRIu64> byte %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Kunne ikke læse paritet for RS-blok %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Kunne ikke reparere paritet for blok %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Kunne ikke skrive paritet for RS-blok %<PRIu64>.."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Blokstørrelser skal matche for FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Ugyldigt antal paritetsbyte."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+#, fuzzy
+msgid "Invalid FEC segment length."
+msgstr "Ugyldig signaturfil %s."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Kunne ikke bestemme størrelsen på enheden %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Kerne understøtter ikke dm-integrity-oversættelse."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Kerne understøtter ikke dm-integrity fast metadatajustering."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Kunne ikke indhente skrivelås på enheden %s."
@@ -1298,45 +1325,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Forespurgte dataforskydning er for lille."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "ADVARSEL: nøglepladsområde (%<PRIu64> byte) er meget lille, tilgængelige LUKS2-nøglepladsantal er meget begrænset.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Kunne ikke indhente læselås på enheden %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Forbudt LUKS2-krav registreret i sikkerhedskopien %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Dataforskydning er forskellig på enhed eller sikkerhedskopi, gendannelse mislykkedes."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Binær teksthoved med nøglepladsområdestørrelse er forskellige på enhed eller sikkerhedskopi, gendannelse mislykkedes."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Enheden %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "indeholder ikke LUKS2-teksthoveder. Erstatning af teksthoved kan ødelægge data på den enhed."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "indeholder allerede LUKS2-teksthoveder. Erstatning af teksthoveder vil ødelægge eksisterende nøglepladser."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1346,7 +1373,7 @@ msgstr ""
 "ADVARSEL: Ukendte LUKS2-krav registreret i reel enhedsteksthoved!\n"
 "Erstatning af teksthoved med sikkerhedskopi kan ødelægge data på den enhed!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1356,58 +1383,58 @@ msgstr ""
 "ADVARSEL: Ufærdig frakoblet omkryptering registreret på enheden!\n"
 "Erstatning af teksthoved med sikkerhedskopi kan ødelægge data."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Ignorerede ukendt flag %s."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Manglende nøgle for dm-crypt-segmentet %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Kunne ikke angive dm-crypt-segmentet."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Kunne ikke angive dm-linear-segmentet."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Ikke understøttet konfiguration for enhedsintegritet."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Omkryptering i gang. Kan ikke deaktivere enhed."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Kunne ikke erstatte enheden %s i dvale med dm-error-mål."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Kunne ikke læse LUKS2-krav."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Uopfyldte LUKS2-krav registreret."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Operation er ikke kompatibel med enhed markeret for forældet omkryptering. Afbryder."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Operation er ikke kompatibel med enhed markeret for LUKS2-omkryptering. Afbryder."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Ikke nok hukommelse tilgængelig til at åbne en nøgleplads."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Åbning af nøgleplads mislykkedes."
 
@@ -1437,7 +1464,7 @@ msgstr "Kan ikke flytte nøglepladsområde. Ikke nok plads."
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Kan ikke flytte nøglepladsområde. LUKS2-nøglepladsområdet er for lille."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Kan ikke flytte nøglepladsområde."
 
@@ -1482,281 +1509,293 @@ msgstr ""
 "Kan ikke konvertere til LUKS1-format - nøglepladsen %u er ikke\n"
 "LUKS1-kompatibel."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Hotzonestørrelsen skal være et multiplum af beregnet zonejustering (%zu byte)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Enhedsstørrelsen skal være et multiplum af beregnet zonejustering (%zu byte)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Resilience-tilstanden %s er ikke understøttet"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Kunne ikke initialisere gammelt lageromslag for segmentet."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Kunne ikke initialisere nyt lageromslag for segmentet."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Kunne ikke læse kontrolsummer for nuværende hotzone."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Kunne ikke læse hotzone-område startende på %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Kunne ikke dekryptere sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Kunne ikke gendanne sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Størrelsen på kilde- og målenhed er forskellig. Kilde %<PRIu64>, mål: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Kunne ikke køre aktivere hotzone-enheden %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Kunne ikke aktivere overlagsenheden %s med faktiske origin-tabel."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Kunne ikke indlæse ny oversættelse for enheden %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Kunne ikke opdatere omkrypteringsenhedsstakken."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Kunne ikke angive områdestørrelse for nye nøglepladser."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Dataflytning er ikke justeret til den anmodede krypteringssektorstørrelse (%<PRIu32> byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Datanhed er ikke justeret til den anmodede krypteringssektorstørrelse (%<PRIu32> byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Dataskift (%<PRIu64> sektorer) er mindre end fremtidig dataforskydning (%<PRIu64> sektorer)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Kan ikke åbne %s i eksklusiv tilstand (allerede kortlagt eller monteret)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Enhed er ikke markeret for LUKS2-omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Kunne ikke indlæse LUKS2-omkrypteringskontekst."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Kunne ikke indhente omkrypteringstilstand."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Enheden er ikke under omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Omkrypteringsproces er allerede i gang."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Kunne ikke indhente omkrypteringslås."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Kan ikke fortsætte med omkryptering. Kør omkrypteringsgendannelse først."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Aktiv enhedsstørrelse og anmodet sektorstørrelse er forskellige."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "Ugyldig enhedsstørrelse i omkrypteringsparametrene."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Omkryptering er i gang. Kan ikke udføre gendannelse."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "LUKS2-omkryptering er allerede initialiseret i metadata."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Kunne ikke initialisere LUKS2-omkryptering i metadata."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Kunne ikke angive enhedssegmenter for næste omkrypteringshotzone."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Kunne ikke skrive resilience-metadata for omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Dekryptering mislykkedes."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Kunne ikke skrive hotzoneområde startende på %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Kunne ikke synkronisere data."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Kunne ikke opdatere metadata efter nuværende omkrypteringshotzone var fuldført."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Kunne ikke skrive LUKS2-metadata."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Kunne ikke rydde segmentdata for sikkerhedskopien."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Kunne ikke deaktivere kravflag for omkrypteringen."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Kunne ikke tildele symbolet %d til nøglepladsen %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Kunne ikke indhente omkrypteringslås."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Der opstod en fatal fejl under omkryptering af kodestump startende på %<PRIu64>, %<PRIu64> sektorer i alt."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Genaktiver ikke enheden med mindre erstattet med fejlmål manuelt."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Kan ikke fortsætte med omkryptering. Uventet omkrypteringsstatus."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Manglende eller ugyldig omkrypteringskontekst."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Kunne ikke initialisere enhedsstak for omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Kunne ikke opdatere omkrypteringskontekst."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Nøglepladsen %d er ugyldig."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Ingen frie symbolpladser."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Kunne ikke oprette indbygget symbol %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Kan ikke udføre verificering af adgangsfrase på ikke-tty-inddata."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Parametre til kryptering af nøgleplads kan kun angives for LUKS2-enhed."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Ikke kendt specifikationsmønster for krypteringsalgoritme registreret."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "ADVARSEL: Parameteren --hash bliver ignoreret i ren (plain) tilstand med nøglefil specificeret.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "ADVARSEL: Tilvalget --keyfile-size bliver ignoreret, læsestørrelsen er den samme som størrelsen for krypteringsnøglen.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Registrerede enhedssignaturer på %s. Videre behandling kan beskadige eksisterende data."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operation afbrudt.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Tilvalget --key-file er krævet."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Indtast VeraCrypt-PIM: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Ugyldig PIM-værdi: fortolkningsfejl."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Ugyldig PIM-værdi: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Ugyldig PIM-værdi: uden for interval."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Intet enhedsteksthoved registreret med denne adgangsfrase."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Enheden %s er ikke en gyldig BITLK-enhed."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1766,88 +1805,96 @@ msgstr ""
 "som giver adgang til krypteret partition uden adgangsfrase.\n"
 "Dette dump bør altid lagres krypteret et sikkert sted."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Enheden %s er stadig aktiv og planlagt til udskudt fjernelse.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Ændring af størrelse på aktiv enhed kræver diskenhedsnøgle i nøglering men tilvalget --disable-keyring er ikke angivet."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Sammenligning afbrudt."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     -\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iterationer per sekund for %zu-bit nøgle\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s .\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iterationer, %5u hukommelse, %1u parallelle tråde (CPU'er) for %zu-bit nøgle (anmodet %u ms time)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Sammenligningens resultat er ikke troværdigt."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Test bruger kun hukommelse omtrentlig (ingen lager-IO).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algoritme |     Nøgle |      Kryptering |    Dekryptering\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Krypteringsalgoritmen %s-%s (nøglestørrelse %zd bit) er ikke tilgængelig."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#     Algoritme |       Nøgle |    Kryptering |    Dekryptering\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "-"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Ser ud til at enheden ikke kræver omkrypteringsgendannelse.\n"
-"Ønsker du at fortsætte alligevel?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Indtast adgangsfrase for omkrypteringsgendannelse: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Fortsæt med LUKS2-omkrypteringsgendannelse?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Indtast adgangsfrase for omkrypteringsgendannelse: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Indtast adgangsfrase for omkrypteringsgendannelse: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Skal LUKS-enhedsteksthovedet forsøges repareres?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1855,104 +1902,108 @@ msgstr ""
 "Rydder enhed for at initialisere integritetskontrolsum.\n"
 "Du kan afbryde dette ved at trykke på CTRL+c (resten af ikke ryddet enhed vil indeholder ugyldig kontrolsum).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Kan ikke deaktivere midlertidig enhed %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Integritetstilvalg kan kun bruges for LUKS2-format."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Indstillinger for LUKS2-metadatastørrelse er ikke understøttet."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Kan ikke oprette teksthovedfilen %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Ikke kendt specifikationsmønster for krypteringsalgoritme registreret."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Kan ikke bruge %s på on-disk-teksthoved."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Dette vil uigenkaldeligt overskrive data på %s."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Kunne ikke angive pbkdf-parametre."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Reduceret dataforskydning er kun tilladt for frakoblet LUKS-teksthoved."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Kan ikke bestemme nøglestørrelsen på diskenheden for LUKS uden nøglepladser, brug venligst tilvalget --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Enhed aktiveret men kan ikke gøre flag vedvarende."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Nøgleplads %d valgt for sletning."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Dette er den sidste nøgleplads. Enheden vil blive ubrugelig efter fjernelse af denne nøgle."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Indtast en eventuel tilbageværende adgangsfrase: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operation afbrudt, nøglepladsen var IKKE ryddet.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Indtast adgangsfrase som skal slettes: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Indtast ny adgangsfrase for nøgleplads: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Indtast en eventuel eksisterende adgangsfrase: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Indtast adgangsfrase som skal ændres: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Indtast ny adgangsfrase: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Indtast adgangsfrase for nøgleplads til konvertering: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Kun et enhedsargument for isLuks-operation er understøttet."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -1963,12 +2014,12 @@ msgstr ""
 "som giver adgang til krypteret partition uden adgangsfrase.\n"
 "Dette dump bør altid lagres krypteret et sikkert sted."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Nøglepladsen %d er ikke aktiv."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -1978,30 +2029,40 @@ msgstr ""
 "som giver adgang til krypteret partition uden adgangsfrase.\n"
 "Dette dump bør altid lagres krypteret et sikkert sted."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s er ikke en cryptsetup-håndteret enhed."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Tilvalget --header-backup-file er krævet."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s er ikke en cryptsetup-håndteret enhed."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Opdater er ikke understøttet for enhedstypen %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Metadataenhedstypen %s blev ikke genkendt."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Kommandoen kræver enhedsnavn og oversat navn som argumenter."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2010,95 +2071,95 @@ msgstr ""
 "Denne operation vil slette alle nøglepladser på enheden %s.\n"
 "Enheden vil blive ubrugelig efter denne operation."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operation afbrudt, nøglepladser blev IKKE fjernet (wiped).\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Ugyldig LUKS-type, kun luks1 og luks2 er understøttet."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Enheden er allerede %s-type."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Denne operation vil konvertere %s til %s-format.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operation afbrudt, enheden blev IKKE konverteret.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Tilvalget --priority, --label eller --subsystem mangler."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Symbolet %d er ugyldigt."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Symbolet %d er i brug."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Kunne ikke tilføje luks2-keyringsymbolet %d."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Kunne ikke tildele symbolet %d til nøglepladsen %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Symbolet %d er ikke i brug."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Kunne ikke importere symbol fra fil."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Kunne ikke indhente symbolet %d for eksport."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "parameteren --key-description er obligatorisk for symbol tilføj-handling."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Handling kræver specifik symbol. Brug parameteren --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Ugyldig symboloperation %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Automatisk registreret aktiv dm-enhed »%s« for dataenheden %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Enheden %s er ikke en blokenhed.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Kunne ikke automatisk registrere enheds-%s-holdere."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2113,233 +2174,242 @@ msgstr ""
 "For at afvikle omkryptering i frakoblet tilstand bruges parameteren\n"
 "--active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Ugyldig LUKS-enhedstype."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Kryptering uden frakoblet teksthoved (--header) er ikke muligt uden størrelsesreduktion for dataenhed (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Anmodte dataforskydning skal være mindre end eller lig med halvdelen af --reduce-device-size parameter."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Justerer --reduce-device-size value til det dobbelte af --offset %<PRIu64> (sektorer).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Kryptering er kun understøttet for formatet LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Registrerede LUKS-enhed på %s. Ønsker du at kryptere den LUKS-enhed igen?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Midlertidig teksthovedfil %s findes allerede. Afbryder."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Kan ikke oprette midlertidig teksthovedfil %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s er nu aktiv og klar til kryptering via nettet.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Ikke nok ledige nøglepladser for omkryptering."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Nøglefil kan kun bruges med --key-slot eller med præcis en aktiv nøgleplads."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Indtast adgangsfrase for nøgleplads %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Indtast adgangsfrase for nøgleplads %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Kommandoen kræver enhed som argument."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Kun formatet LUKS2 er i øjeblikket understøttet. Brug venligst værktøjet cryptsetup-reencrypt for LUKS1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Forældet frakoblet omkryptering er allerede i gang. Brug redskabet cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Omkryptering af enhed med integritetsprofil er ikke understøttet."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "LUKS2-omkryptering er allerede initialiseret. Afbryder operation."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "LUKS2-enheden er ikke i omkryptering."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<enhed> [--type <type>] [<navn>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "åbn enhed som <navn>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<navn>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "luk enhed (fjern oversættelse)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "ændr størrelse på aktiv enhed"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "vis enhedsstatus"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <krypteringsalgoritme>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "krypteringsalgoritme for sammenligning"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<enhed>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "prøv at reparere on-disk-metadata"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "omkrypter LUKS2-enhed"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "slet alle nøglepladser (fjern krypteringsnøgle)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "konverter LUKS fra/til LUKS2-format"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "angiv permanente konfigurationstilvalg for LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<enhed> [<ny nøglefil>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "formaterer en LUKS-enhed"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "tilføj nøgle til LUKS-enhed"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<enhed> [<nøglefil>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "fjerner leveret nøgle eller nøglefil fra LUKS-enhed"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "ændrer leveret nøgle eller nøglefil for LUKS-enhed"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "konverterer en nøgle til nye pbkdf-parametre"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<enhed> <nøgleplads>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "rydder nøgle med nummer <nøgleplads> fra LUKS-enhed"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "vis UUID for lUKS-enhed"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "tester <enhed> for LUKS-partitionsteksthoved"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "dump LUKS-partitionsinformation"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "dump TCRYPT-enhedsinformation"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "dump BITLK-enhedsinformation"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Suspender LUKS-enhed og ryd nøgle (alle IO'er fryses fast)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Genoptag suspenderet LUKS-enhed"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Lav sikkerhedskopi af LUKS-enhedsteksthoved og nøglepladser"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Gendan LUKS-teksthoved og nøglepladser"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <enhed>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Manipuler LUKS2-symboler"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2347,7 +2417,7 @@ msgstr ""
 "\n"
 "<handling> er en af:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2359,7 +2429,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2374,7 +2444,7 @@ msgstr ""
 "<nøgleplads> er LUKS-nøglens pladsnummer, der skal ændres\n"
 "<nøglefil> valgfri nøglefil for den nye nøgle for luksAddKey-handling\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2383,7 +2453,7 @@ msgstr ""
 "\n"
 "Standardindkompileret metadataformat er %s (for luksFormat-handling).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2400,7 +2470,7 @@ msgstr ""
 "Standard-PBKDF for LUKS2: %s\n"
 "\tTterationtid: %d, hukommelse krævet: %dkB, parallelle tråde: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2415,452 +2485,460 @@ msgstr ""
 "\tplain: %s, Nøgle: %d bit, Adgangskodehashing: %s\n"
 "\tLUKS: %s, Nøgle: %d bit, LUKS-teksthovedhashing: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: Standardstørrelse på nøgle med XTS-tilstand (to interne nøgler) vil blive fordoblet.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: kræver %s som argumenter"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Vis denne hjælpetekst"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Vis en kort brugsmanual"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Vis pakkeversion"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Hjælpetilvalg:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Viser mere detaljerede fejlbeskeder"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Vis fejlsøgningsbeskeder"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Vis fejlsøgningsbeskeder inklusive JSON-metadata"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Krypteringsalgoritmen brugt til at kryptere disken (se /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Hashen brugt til at oprette krypteringsnøglen fra adgangsfrasen"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verificerer adgangsfrasen ved at anmode om den to gange"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Læs nøglen fra en fil"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Læs diskenhedens (master) nøgle fra fil."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Dump diskenheds (master) nøgle i stedet for information om nøgleplads"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Krypteringsnøglens størrelse"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BIT"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Begræns læsningen fra nøglefil"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "byte"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Antallet af byte at udelade i nøglefil"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Begræns læsningnen fra nyligt tilføjet nøglefil"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Antallet af byte at udelade i senest tilføjet nøglefil"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Pladsnummer for ny nøgle (standard er den første ledige)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Størrelse på enheden"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTORER"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Brug kun specificeret enhedstørrelse (ignorer resten af enheden). FARLIGT!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Startforskydningen i motorenheden"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Antal sektorer med krypterede data som skal udelades i begyndelsen"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Opret en skrivebeskyttet oversættelse"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Anmod ikke om bekræftelse"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Tidsudløb for interaktiv adgangsfraseprompt (i sekunder)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "sek"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Statuslinjeopdatering (i sekunder)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Hvor ofte inddata for adgangsfrasen kan indhentes"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Juster belastning ved <n> sektorgrænser - for luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Fil med LUKS-teksthoved og sikkerhedskopi af nøglepladser"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Brug /dev/random til oprettelse af diskenhedsnøgle"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Brug /dev/urandom til oprettelse af diskenhedsnøgle"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Del enhed med et andet ikkeoverlappende kryptsegment"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID som enheden skal bruge"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Tillader fjernelsesforespørgsler (a.k.a. TRIM) for enhed"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Enhed eller fil med adskilt LUKS-teksthoved"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Aktiver ikke enhed, kontroller bare adgangsfrase"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Brug skjult teksthoved (skjult TCRYPT-enhed)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Enhed er system-TCRYPT-drev (med opstartsindlæser)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Brug sikkerhedskopi (sekundær) TCRYPT-teksthoved"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Skan også for VeraCrypt-kompatibel enhed"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Personlig iterationmultiplikator for VeraCrypt-kompatibel enhed"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Forespørg personlig iterationmultiplikator for VeraCrypt-kompatibel enhed"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Type for enhedsmetadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Deaktiver kontrol af adgangskodens kvalitet (hvis aktiveret)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Brug tilvalgene dm-crypt og same_cpu_crypt for ydelseskompatibilitet"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Brug tilvalgene dm-crypt og submit_from_crypt_cpus for ydelseskompatibilitet"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Enhedsfjernelse er udskudt indtil den sidste bruger lukker enheden"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Brug global lås til at serialisere memory-hard-PBKDF (OOM-alternativ)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "PBKDF-iterationstid for LUKS (i ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "PBKDF-algoritme (for LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "PBKDF-hukommelsesomkostningsbegrænsning"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobyte"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "PBKDF-parallel omkostning"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "tråde"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "PBKDF-iterationsomkostning (tvunget, deaktiverer sammenligning)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Nøglepladsprioritet: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Deaktiver låsning af on-disk-metadata"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Deaktiver indlæsning af diskenhedsnøgler via kernenøglering"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Dataintegritetsalgoritme (kun LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Deaktiver journal for integritetsenhed"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Ryd ikke enhed efter formatering"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Brug ineffektive forældede mellemrum (gamle kerner)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Spørg ikke om adgangsfrase hvis aktivering via symbol mislykkes"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Symbolnummer (standard: alle)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Nøglebeskrivelse"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Sektorstørrelse for kryptering (standard: 512 byte)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 #, fuzzy
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Sektorstørrelse for kryptering (standard: 512 byte)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Angiv aktiveringsflag vedvarende for enhed"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Angiv etiket for LUKS2-enhed"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Angiv undersystemetiket for LUKS2-enhed"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 #, fuzzy
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Opret ubunden (intet tildelt datasegment) LUKS2-nøgleplads"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Læs eller skriv json fra eller til en fil"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Størrelse på metadataområdet for LUKS2-teksthovedet"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Størrelse på nøglepladsområdet for LUKS2-teksthovedet"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Opdater (genaktiver) enhed med nye parametre"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "LUKS2-nøgleplads: Krypteringsnøglens størrelse"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "LUKS2-nøgleplads: krypteringsalgoritmen brugt for nøglepladskryptering"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Krypter LUKS2-enhed (på stedet kryptering)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Dekrypter LUKS2-enhed (fjern kryptering)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Initialiser LUKS2-omkryptering kun i metadata."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Genoptag kun initialiseret LUKS2-omkryptering."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Reducer dataenhedstørrelse (flyt dataforskydning). FARLIGT!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Maksimal størrelse for omkrypteringshotzone."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Resilience-type for omkrypteringshotzonen (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Kontrolsumshash for omkrypteringshotzonen"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Overskriv automatisk registrering af enhed for dm-enhed der skal omkrypteres"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[TILVALG...] <handling> <handling-specifik>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argument <handling> mangler."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Ukendt handling."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 #, fuzzy
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Tilvalgene --refresh og --test-passphrase udelukker hinanden.\n"
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "Tilvalget --deferred er kun tilladt for kommandoen close (luk).\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Tilvalget --shared er kun tilladt for åbning af en ren enhed.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Tilvalget --allow-discards er kun tilladt for åbne operationer.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Tilvalget --persistent er kun tilladt for åben operation.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Tilvalget --serialize-memory-hard-pbkdf er kun tilladt for åbne operationer.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 #, fuzzy
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Tilvalget --persistent er ikke tilladt med --test-passphrase.\n"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2869,282 +2947,282 @@ msgstr ""
 "åbn- og sammenligningshandlinger. For at begrænse læsning fra nøglefilen bruges\n"
 "--keyfile-size=(bytes)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Tilvalget --integrity er kun tilladt for luksFormat (LUKS2).\n"
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 #, fuzzy
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Tilvalget --integrity-no-wipe kan kun bruges for formathandling med integritetudvidelse.\n"
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Tilvalget --label og --subsystem er kun tilladt for luksFormat og config LUKS2-operationer.\n"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Tilvalget --test-passphrase er kun tilladt for åbning af LUKS- TCRYPT- og BITLK-enheder.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Nøglestørrelse skal gå op i 8 bit"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Nøgleplads er ugyldig."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Tilvalget --key-file har forrang over specificeret nøglefilsargument."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Negativ nummer for tilvalg er ikke tilladt."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Kun et argument for --key-file er tilladt."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Kun et af tilvalgene --use-[u]random er tilladt."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Tilvalget --use-[u]random er kun tilladt for luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Tilvalget --uid er kun tilladt for luksFormat og luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Tilvalget --align-payload er kun tilladt for luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Tilvalgene --luks2-metadata-size og --opt-luks2-keyslots-size er kun tilladt for luksFormat med LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Ugyldig specifikation for størrelsen på LUKS2-metadata."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Ugyldig specifikation for størrelsen på LUKS2-nøgleplads."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Tilvalgene --align-payload og --offset kan ikke kombineres."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Tilvalget --skip er kun understøttet for åbning af plain- og loopaes-enheder.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Tilvalget --offset er kun understøttet for åbning af plain- og loopaes-enheder, luksFormat og enhedsomkryptering.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Tilvalgene --tcrypt-hidden, --tcrypt-system eller --tcrypt-backup er kun understøttet for TCRYPT-enhed.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Tilvaget --tcrypt-hidden kan ikke kombineres med --allow-discards.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Tilvalget --veracrypt er kun understøttet for TCRYPT-enhedstype.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 #, fuzzy
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Ugyldigt argument for parameteren --veracrypt-pim angivet.\n"
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Tilvalget --veracrypt-pim er kun understøttet for VeraCrypt-kompatible enheder.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Tilvalget --veracrypt-query-pim er kun understøttet for VeraCrypt-kompatible enheder.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 #, fuzzy
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Tilvalgene --veracrypt-pim og --veracrypt-query-pm udelukker hinanden.\n"
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 #, fuzzy
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Tilvalget --priority kan kun være ignore/normal/prefer.\n"
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 #, fuzzy
 msgid "Keyslot specification is required."
 msgstr "Nøglepladsspecifikation er krævet.\n"
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 #, fuzzy
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Adgangskodebaseret nøgleudledningsfunktion (PBKDF) kan kun være pbkdf2 eller argon2i/argon2id.\n"
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 #, fuzzy
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "PBKDF-tvungne iterationer kan ikke kombineres med tilvalg for iterationstid.\n"
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Tilvalg for sektorstørrelse er ikke understøttet for denne kommando.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 #, fuzzy
 msgid "Key size is required with --unbound option."
 msgstr "Nøglestørrelse er krævet med tilvalget --unbound.\n"
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 #, fuzzy
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Tilvalget --unbound kan kun bruges med luksAddKey-handlingen.\n"
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "Tilvalget --refresh kan kun bruges med open-handlingen.\n"
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 #, fuzzy
 msgid "Cannot disable metadata locking."
 msgstr "Kan ikke deaktivere metadatalåsning.\n"
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Ugyldig maksimal størrelsesspecifikation for omkrypteringshotzonen."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Ugyldig specifikation for enhedsstørrelse."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Maksimal reduceringsstørrelse for enhed er 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Reducer størrelse skal være multiplum af 512 byte sektor."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Ugyldig størrelsesspecifikation for data."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Reducer størrelsesoverløb."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "LUKS2-omkryptering kræver tilvalget --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Enhedsstørrelse skal være multiplum af 512 byte sektor."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Tilvalgene --reduce-device-size og --data-size kan ikke kombineres."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Tilvalgene --device-size og --size kan ikke kombineres."
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 #, fuzzy
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr "Tilvalgene --ignore-corruption og --restart-on-corruption kan ikke bruges sammen.\n"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Ugyldig salt-streng angivet."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Kan ikke oprette hashaftryk %s for skriving."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Kan ikke oprette FEC-aftryk %s for skriving."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Ugyldig root-hash-streng angivet."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Ugyldig signaturfil %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Kan ikke læse signaturfilen %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<data_enhed> <hash_device>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "formater enhed"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<data_enhed> <hash_enhed> <root_hash>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "verificer enhed"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<data_enhed> <navn> <hash_enhed> <root_hash>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "vis aktiv enhedsstatus"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<hash_enhed>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "vis on-disk-information"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3159,7 +3237,7 @@ msgstr ""
 "<hash_enhed> er enheden indeholdende verifikationsdata\n"
 "<root_hash> hash for root-knuden på <hash_enhed>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3170,129 +3248,144 @@ msgstr ""
 "Standardindkompilerede dm-verity-parametre:\n"
 "\tHash: %s, Databok (byte): %u, Hashblok (byte): %u, Salt-str.: %u, Hashformat: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Brug ikke verity-superblok"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Formatype (1 - normal, 0 - original Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "nummer"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Blokstørrelse på dataenheden"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Blokstørrelse på hashenheden"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "FEC-paritetbyte"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Antallet af blokke i datafilen"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "blokke"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Sti til enhed med fejlkorrektionsdata"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "sti"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Starter forskydning på hashenheden"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Starter forskydning på FEC-enheden"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Hashalgoritme"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "streng"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Salt"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "hex-streng"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Stil til roothash-signaturfil"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Genstart kerne hvis korruption er registreret"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+#, fuzzy
+msgid "Panic kernel if corruption is detected"
+msgstr "Genstart kerne hvis korruption er registreret"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignorer korruption, log den kun"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Bekræft ikke nulstillede blokke"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Verificer kun datablok første gang den læses"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Tilvalgene --ignore-corruption, --restart-on-corruption eller --ignore-zero-blocks er kun tilladt for åben operation.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Tilvalget --root-hash-signature kan kun bruges til åben operation.\n"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Tilvalgene --ignore-corruption og --restart-on-corruption kan ikke bruges sammen.\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Tilvalgene --ignore-corruption og --restart-on-corruption kan ikke bruges sammen.\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Ugyldig nøglestørrelse."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Kan ikke læse nøglefilen %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Kan ikke læse %d byte fra nøglefilen %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formateret med mærkestørrelse %u, intern integritet %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<integritet_enhed>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<integritet_enhed> <navn>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3303,404 +3396,409 @@ msgstr ""
 "<navn> er enheden der skal opretttes under %s\n"
 "<integritet_enhed> er enheden indeholdende data med integritetsmærker\n"
 
-#: src/integritysetup.c:507
-#, c-format
+#: src/integritysetup.c:520
+#, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Standardindkompilerede dm-integrity-parametre:\n"
 "\tkontrolsumalgoritme: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Sti til dataenhed (hvis adskilt)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Journalstørrelse"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Interleave-sektorer"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Journalvandmærke"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "procent"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Journal commit-tid"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Antallet af 512-byte sektorer per bit (bitmap-tilstand)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Flush-tid for Bitmap-tilstand"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Mærkestørrelse (per-sektor)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Sektorstørrelse"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Bufferstørrelse"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Dataintegritetsalgoritme"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Størrelsen for dataintegritetsnøglen"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Læs integritetsnøglen fra en fil"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Journalintegritetsalgoritme"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Størrelsen for journalintegritetsnøglen"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Læs journalintegritetsnøglen fra en fil"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Journalkrypteringsalgoritme"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Størrelsen for journalkrypteringsnøglen"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Læs journalkrypteringsnøglen fra en fil"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Gendannelsestilstand (ingen journal, ingen mærkekontrol)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Brug bitmap til at registrere ændringer og deaktivere journal for integritetsenhed"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Genberegn oprindelige mærker automatisk."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Tilvalget --integrity-recalculate kan kun bruges for open-handling."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 #, fuzzy
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Tilvalgene --journal-size, --interleave-sectors, --sector-size, --tag-size og --no-wipe kan kun bruges for formathandlingen.\n"
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Ugyldig specifikation for journalstørrelse."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Både nøglefil og tilvalg for nøglestørrelse skal være angivet."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Integritetsalgoritme skal være angivet hvis der bruges integritetsnøgle."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Både journalintegritetsnøglefil og tilvalg for nøglestørrelse skal være angivet."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Journalintegritetsalgoritme skal være angivet hvis journalintegritetsnøgle anvendes."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Både journalkrypteringsnøglefil og tilvalg for nøglestørrelse skal være angivet."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Journalkrypteringsalgoritme skal være angivet hvis journalkrypteringsnøgle bruges."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Tilvalgene recovery og bitmap udelukker hinanden."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Journaltilvalg kan ikke bruges i bitmap-tilstand."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Bitmap-tilvalg kan kun bruges i bitmap-tilstand."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Omkryptering er allerede i gang."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Kan ikke eksklusivt åbne %s, enheden er i brug."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Allokering af tilpasset hukommelse mislykkedes."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Kan ikke læse enheden %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Markerer LUKS-enheden %s som ubrugelig."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Angivelse af LUKS2 som frakoblet omkrypterer flag på enheden %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Kan ikke skrive enhed %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Kan ikke skrive omkrypteringslogfilen."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Kan ikke læse omkrypteringslogfilen."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Logfilen %s findes, genoptager omkryptering.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Aktiverer midlertidig enhed via brug af gammelt LUKS-teksthoved."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Aktiverer midlertidig enhed via brug af nyt LUKS-teksthoved."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Aktivering af midlertidige enheder mislykkedes."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Kunne ikke angive dataforskydning."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Kunne ikke angive metadatastørrelse."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Nyt LUKS-teksthoved for enheden %s oprettet."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Denne version af cryptsetup-reencrypt kan ikke håndtere ny intern symboltype %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Kunne ikke læse aktiveringsflag fra sikkerhedskopiteksthoved."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Kunne ikke skrive aktiveringsflag til nyt teksthoved."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Kunne ikke læse krav fra sikkerhedskopiteksthoved."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "%s-sikkerhedskopi af teksthoved for enheden %s er oprettet."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Oprettelse af LUKS-sikkerhedskopiteksthoveder mislykkedes."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Kan ikke gendanne %s-teksthoved på enheden %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "%s-teksthoved på enheden %s er gendannet."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Kan ikke åbne midlertidig LUKS-enhed."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Kan ikke indhente enhedsstørrelse."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "IO-fejl under omkryptering."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Angivet UUID er ugyldig."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Kan ikke åbne omkrypteringslogfilen."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Ingen dekryptering i gang, angivet UUID kan kun bruges til at genoptage suspenderet dekrypteringsproces."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Ændret pbkdf-parameter i nøgleplads %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Blokstørrelse for omkryptering"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Ændr ikke nøgle, ingen dataområdeomkryptering"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Læs ny diskenhednøgle (master) fra fil"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "PBKDF2-iterationstid for LUKS (i ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Brug direct-io når enheder tilgås"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Brug fsync efter hver blok"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Opdater logfil efter hver blok"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Brug kun denne plads (andre vil blive deaktiveret)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Opret nyt teksthoved på ikke krypteret enhed"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Dekrypter enhed permanent (fjern kryptering)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "UUID'en brugt til at genoptage dekryptering"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Type for LUKS-metadata: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[TILVALG...] <enhed>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Omkryptering vil ændre: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "diskenhedsnøgle"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "sæt hash til "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", set krypteringsalgoritme til "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argument krævet."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Kun værdier mellem 1 MiB og 64 MiB tilladt for omkrypteringsblokstørrelsen."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Maksimal reduceringsstørrelse for enhed er 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Tilvalget --new skal bruges sammen med --reduce-device-size eller --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Tilvalget --keep-key kan kun bruges med --hash, --iter-time eller --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Tilvalget --new kan ikke bruges sammen med --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Tilvalget --decrypt er ikke kompatibelt med specificerede parametre."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Tilvalget --uuid er kun tilladt sammen med --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Ugyldig luks-type. Brug en af disse: »luks«, »luks2« eller »luks2«."
 
@@ -3741,32 +3839,32 @@ msgstr "ukendt fejl"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Kommando mislykkedes med kode %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Nøglepladsen %i oprettet."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Nøgleplads %i låst op."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Nøgleplads %i fjernet."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Symbol %i oprettet."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Symbol %i fjernet."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3774,55 +3872,55 @@ msgstr ""
 "\n"
 "Sletning (wipe) afbrudt."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "ADVARSEL: Enheden %s indeholder allerede en »%s«-partitionsignatur.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "ADVARSEL: Enheden %s indeholder allerede en »%s«-superbloksignatur.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Kunne ikke initialisere enhedssignaturundersøgelser."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Kunne ikke køre stat på enheden %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Enheden %s er i brug. Kan ikke fortsætte med formatoperation."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Kunne ikke åbne filen %s i læs/skriv-tilstand."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Eksisterende »%s«-partitionsignatur (forskydning: %<PRIi64> byte) på enheden %s vil blive slettet."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Eksisterende »%s«-superbloksignatur (forskydning: %<PRIi64> byte) på enheden %s vil blive slettet."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Kunne ikke rydde enhedssignatur."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Kunne ikke undersøge enheden %s for en signatur."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3830,7 +3928,7 @@ msgstr ""
 "\n"
 "Omkryptering afbrudt."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Kan ikke kontrollere adganskodekvalitet: %s"
@@ -3849,46 +3947,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Kontrol af adgangskodens kvalitet mislykkedes: Ugyldig adgangsfrase (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Kunne ikke læse adgangsfrase fra terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Verificer adgangsfrase: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Adgangsfraser matcher ikke."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Kan ikke bruge forskydning med terminalinddata."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Indtast adgangsfrase: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Indtast adgangsfrase for %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Ingen nøgle tilgængelig med denne adgangsfrase."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Ingen brugbar nøgleplads tilgængelig."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Kan ikke bne nøglefilen %s for skrivning."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Kan ikke skrive til nøglefilen %s."
@@ -3931,15 +4029,39 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Kunne ikke skrive JSON-fil."
 
+#, c-format
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "ADVARSEL: Låsemappen %s/%s mangler!\n"
+
+#~ msgid "Wrong key size."
+#~ msgstr "Forkert nøglestørrelse."
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Ugyldig størrelse for parametre for verity-enhed."
+
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Kunne ikke deaktivere kravflag for omkrypteringen."
+
+#, c-format
 #~ msgid "Cipher %s is not available."
 #~ msgstr "Krypteringsalgoritmen %s er ikke tilgængelig."
 
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Ser ud til at enheden ikke kræver omkrypteringsgendannelse.\n"
+#~ "Ønsker du at fortsætte alligevel?"
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands.\n"
 #~ msgstr "Parameteren --refresh er kun tilladt for kommandoerne open (åbn) eller refresh (opdater).\n"
 
 #~ msgid "Unsupported encryption sector size.\n"
 #~ msgstr "Krypteringsektorstørrelsen er ikke understøttet.\n"
 
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Integritetsalgoritme skal være angivet hvis der bruges integritetsnøgle."
+
 #~ msgid "Requested dmcrypt performance options are not supported."
 #~ msgstr "Forespurgte dmcrypt-ydelsestilvalg er ikke understøttede."
 
index 301c436..9e60335 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 808523c..8183d8f 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-15 15:19+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-22 19:35+0200\n"
 "Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -16,64 +16,65 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.3.1\n"
+"X-Generator: Poedit 2.4.3\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Das Kernelmodul »device-mapper« kann nicht initialisiert werden, da das Programm nicht mit Root-Rechten läuft."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Das Kernelmodul »device-mapper« kann nicht initialisiert werden. Ist das Kernelmodul »dm_mod« geladen?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Verlangter »deferred«-Schalter wird nicht unterstützt."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID für Gerät »%s« wurde verkürzt."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Unbekannte Art des dm-Ziels."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Die verlangten dm-crypt-Performance-Optionen werden nicht unterstützt."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Die verlangten dm-verity-Datenbeschädigungs-Optionen werden nicht unterstützt."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Die verlangten dm-verity-FEC-Optionen werden nicht unterstützt."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Die verlangten Datenintegritäts-Optionen werden nicht unterstützt."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Die verlangte sector_size-Option wird nicht unterstützt."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Die verlangte automatische Berechnung der Integritätsangaben wird nicht unterstützt."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "»Discard/TRIM« wird nicht unterstützt."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Der verlangte Bitmap-Modus für dm-Integrität wird nicht unterstützt."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Fehler beim Abfragen des »dm-%s«-Segments."
@@ -115,7 +116,7 @@ msgstr "Fehler beim Initialisieren des Krypto-Zufallszahlengenerator-Backends."
 msgid "Cannot initialize crypto backend."
 msgstr "Fehler beim Initialisieren des Krypto-Backends."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Hash-Algorithmus »%s« wird nicht unterstützt."
@@ -129,7 +130,7 @@ msgstr "Fehler beim Verarbeiten des Schlüssels (mit Hash-Algorithmus »%s«)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Geräte-Art kann nicht bestimmt werden. Inkompatible Aktivierung des Geräts?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Diese Operation wird nur für LUKS-Geräte unterstützt."
 
@@ -137,7 +138,7 @@ msgstr "Diese Operation wird nur für LUKS-Geräte unterstützt."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Diese Operation wird nur für LUKS2-Geräte unterstützt."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Alle Schlüsselfächer sind voll."
 
@@ -151,7 +152,7 @@ msgstr "Schlüsselfach %d ist ungültig, bitte wählen Sie eins zwischen 0 und %
 msgid "Key slot %d is full, please select another one."
 msgstr "Schlüsselfach %d ist voll, bitte wählen Sie ein anderes."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Gerätegröße ist nicht an logischer Sektorgröße ausgerichtet."
 
@@ -160,7 +161,8 @@ msgstr "Gerätegröße ist nicht an logischer Sektorgröße ausgerichtet."
 msgid "Header detected but device %s is too small."
 msgstr "Header gefunden, aber Gerät »%s« ist zu klein."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Diese Operation wird für diese Geräteart nicht unterstützt."
 
@@ -168,17 +170,13 @@ msgstr "Diese Operation wird für diese Geräteart nicht unterstützt."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Ungültige Operation, während die Wiederverschlüsselung läuft."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Nicht unterstützte LUKS-Version %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Gerät für separierte Metadaten wird für diese Verschlüsselungsart nicht unterstützt."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Gerät »%s« ist nicht aktiv."
@@ -192,7 +190,7 @@ msgstr "Zugrundeliegendes Gerät für das Kryptogerät »%s« ist verschwunden."
 msgid "Invalid plain crypt parameters."
 msgstr "Ungültige Parameter für Plain-Verschlüsselung."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Ungültige Schlüsselgröße."
 
@@ -200,12 +198,16 @@ msgstr "Ungültige Schlüsselgröße."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID wird für diese Verschlüsselungsart nicht unterstützt."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Gerät für separierte Metadaten wird für diese Verschlüsselungsart nicht unterstützt."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Nicht unterstützte Sektorengröße für Verschlüsselung."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Gerätegröße ist nicht an verlangter Sektorgröße ausgerichtet."
 
@@ -249,8 +251,8 @@ msgstr "Warnung: Größe der LUKS2-Metadaten wurde auf %<PRIu64> geändert.\n"
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "Warnung: Größe des LUKS2-Schlüsselfachbereichs wurde auf %<PRIu64> Bytes geändert.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Gerät »%s« ist zu klein."
@@ -283,16 +285,16 @@ msgstr "Ohne Gerät kann LOOPAES nicht formatiert werden."
 msgid "Can't format VERITY without device."
 msgstr "Ohne Gerät kann VERITY nicht formatiert werden."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Nicht unterstützte VERITY-Hash-Art %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Nicht unterstützte VERITY-Blockgröße."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Nicht unterstützter VERITY-Hash-Offset."
 
@@ -322,236 +324,236 @@ msgstr "WARNUNG: Angeforderte Taggröße mit %d Bytes unterscheidet sich von der
 msgid "Unknown crypt device type %s requested."
 msgstr "Unbekannte Art des Verschlüsselungsgeräts »%s« verlangt."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Nicht unterstützte Parameter für Gerät %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Parameter für Gerät %s sind durcheinander."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Verschlüsselungsgeräte passen nicht zusammen."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Gerät »%s« konnte nicht neugeladen werden."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Gerät »%s« konnte nicht stillgelegt werden."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Gerät »%s« konnte nicht fortgesetzt werden."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Schwerwiegender Fehler beim Neuladen von Gerät »%s« (über Gerät »%s«)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Gerät »%s« konnte nicht auf dm-error umgeschaltet werden."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Fehler beim Ändern der Größe des Loopback-Geräts."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Wollen Sie wirklich die UUID des Geräts ändern?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Header-Backupdatei enthält keinen kompatiblen LUKS-Header."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Laufwerk »%s« ist nicht aktiv."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Laufwerk »%s« ist bereits im Ruhezustand."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Das Gerät »%s« unterstützt keinen Ruhezustand."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Das Gerät »%s« kann nicht in den Ruhezustand versetzt werden."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Laufwerk »%s« ist nicht im Ruhezustand."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Das Gerät »%s« kann nicht aus dem Ruhezustand aufgeweckt werden."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Fehler beim Aufwecken von Gerät »%s« aus dem Ruhezustand."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Laufwerk »%s« ist nicht im Ruhezustand."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Der Laufwerksschlüssel passt nicht zum Laufwerk."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Schlüsselfach kann nicht hinzugefügt werden, da alle Fächer deaktiviert sind und kein Laufwerksschlüssel angegeben wurde."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Neues Schlüsselfach konnte nicht ausgewechselt werden."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Schlüsselfach %d ist ungültig."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Schlüsselfach %d ist nicht aktiv."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Geräteheader und Datenbereich überlappen sich."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Wiederverschlüsselung läuft bereits. Das Gerät kann nicht aktiviert werden."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Fehler beim Zugriff auf die Sperre zur Wiederverschlüsselung."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Fehler beim Wiederherstellen der LUKS2-Wiederverschlüsselung."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Geräteart ist nicht richtig initialisiert."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Gerät »%s« kann nicht verwendet werden, da es gerade benutzt wird oder der Name ungültig ist."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Das Gerät »%s« existiert bereits."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Gerät »%s« kann nicht verwendet werden, da es gerade benutzt wird oder der Name ungültig ist."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Falscher Laufwerksschlüssel für Plain-Gerät angegeben."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Falscher Root-Hash-Schlüssel für VERITY-Gerät angegeben."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Signatur des Stammhashes erforderlich."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Der Kernel-Schlüsselbund fehlt. Wird benötigt, um die Signatur zum Kernel zu übergeben."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Fehler beim Laden des Schlüssels im Kernel-Schlüsselbund."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Gerät »%s« wird gerade benutzt."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Ungültiges Gerät »%s«."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Laufwerks-Schlüsselpuffer zu klein."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Fehler beim Ermitteln des Laufwerksschlüssels für Plain-Gerät."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Root-Hash für Verity-Gerät kann nicht ermittelt werden."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Diese Operation wird für Kryptogerät »%s« nicht unterstützt."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Die Dump-Operation wird für diese Geräteart nicht unterstützt."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Datenoffset ist kein Vielfaches von %u Bytes."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Gerät »%s« kann nicht konvertiert werden, da es gerade benutzt wird."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Schlüsselfach %u konnte nicht dem Laufwerksschlüssel zugeordnet werden."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Fehler beim Initialisieren der LUKS2-Schlüsselfach-Parameter."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Schlüsselfach %d konnte nicht dem Digest zugeordnet werden."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Der Kernel-Schlüsselbund wird vom Kernel nicht unterstützt."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Fehler beim Lesen der Passphrase vom Schlüsselbund (Fehler %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Globale Speicherzugriffsserialisierungssperre konnte nicht angefordert werden."
 
@@ -579,8 +581,8 @@ msgstr "Fehler beim Öffnen der Schlüsseldatei."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Fehler beim Zugriff auf die Schlüsseldatei."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Zu wenig Speicher zum Einlesen der Passphrase."
 
@@ -600,51 +602,56 @@ msgstr "Größenbegrenzung für die Schlüsseldatei überschritten."
 msgid "Cannot read requested amount of data."
 msgstr "Die gewünschte Menge an Daten kann nicht eingelesen werden."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Gerät »%s« existiert nicht oder Zugriff verweigert."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Gerät »%s« ist nicht kompatibel."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Merkwürdige Optimale-Datenübertragungs-Größe für Datengerät (%u Bytes) wird ignoriert."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Gerät »%s« ist zu klein. Mindestens %<PRIu64> Bytes erforderlich."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Gerät »%s« kann nicht benutzt werden, da es bereits anderweitig benutzt wird."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Gerät »%s« kann nicht verwendet werden, Zugriff verweigert."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Fehler beim Abrufen der Infos über Gerät »%s«."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Das Loopback-Gerät kann nicht benutzt werden, da das Programm nicht mit Root-Rechten läuft."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Anklemmen des Loopback-Geräts fehlgeschlagen (das Loopback-Gerät benötigt den »autoclear«-Schalter)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Der angeforderte Offset ist jenseits der wirklichen Größe des Geräts »%s«."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Gerät »%s« hat die Größe 0."
@@ -718,16 +725,16 @@ msgstr "Sperren abgebrochen. Der Sperrpfad %s/%s ist unbenutzbar (kein Verzeichn
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "WARNUNG: Zugriffssperren-Verzeichnis %s/%s ist nicht vorhanden!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Das Verzeichnis %s/%s, das die Dateisperren enthält, wird mit den vorgegebenen, fest einprogrammierten Berechtigungen erzeugt."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Sperren abgebrochen. Der Sperrpfad %s/%s ist unbenutzbar (%s ist kein Verzeichnis)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Fehler beim Springen zum Gerät-Offset."
 
@@ -755,8 +762,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Verschlüsselungsverfahren sollte im Format [Verfahren]-[Modus]-[IV] sein."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Fehler beim Schreiben auf Gerät »%s«, Zugriff verweigert."
@@ -775,12 +782,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "E/A-Fehler beim Verschlüsseln des Schlüsselfachs."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Fehler beim Öffnen des Geräts »%s«."
@@ -801,43 +808,43 @@ msgstr "Gerät »%s« ist zu klein. (LUKS1 benötigt mindestens %<PRIu64> Bytes.
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS-Schlüsselfach %u ist ungültig."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Gerät »%s« ist kein gültiges LUKS-Gerät."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Angeforderte Header-Backupdatei »%s« existiert bereits."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Fehler beim Anlegen der Header-Backupdatei »%s«."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Fehler beim Speichern der Header-Backupdatei »%s«."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Backupdatei enthält keinen gültigen LUKS-Header."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Fehler beim Öffnen der Header-Backupdatei »%s«."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Fehler beim Einlesen der Header-Backupdatei »%s«."
@@ -859,7 +866,7 @@ msgstr "enthält keinen LUKS-Header. Das Ersetzen des Headers kann Daten auf dem
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "enthält bereits einen LUKS-Header. Das Ersetzen des Headers wird bestehende Schlüsselfächer zerstören."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -871,103 +878,103 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Ungewöhnliche Schlüsselgröße, manuelles Reparieren erforderlich."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Ungewöhnliche Ausrichtung der Schlüsselfächer, manuelles Reparieren erforderlich."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Schlüsselfächer werden repariert."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Schlüsselfach %i: Offset repariert (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Schlüsselfach %i: Streifen repariert (%u -> %u)."
 
 # XXX
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Schlüsselfach %i: schwindlerische Partitions-Signatur."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Schlüsselfach %i: Salt gelöscht."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "LUKS-Header wird auf den Datenträger geschrieben."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Fehler beim Reparieren."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Verlangter LUKS-Hash »%s« wird nicht unterstützt."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Keine bekannten Probleme im LUKS-Header erkannt."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Fehler beim Aktualisieren des LUKS-Headers auf Gerät »%s«."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Fehler beim Neueinlesen des LUKS-Headers nach dem Aktualisieren auf Gerät »%s«."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Daten-Offset für LUKS-Header muss entweder 0 sein oder mehr als die Headergröße."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Falsches LUKS-UUID-Format angegeben."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "LUKS-Header kann nicht angelegt werden: Fehler beim Einlesen des zufälligen Salts."
 
 # XXX
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "LUKS-Header kann nicht angelegt werden: Fehler beim Hashen des Headers (mit Hash-Algorithmus »%s«)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Schlüsselfach %d aktiv, löschen Sie es erst."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Material für Schlüsselfach %d enthält zu wenige Streifen. Manipulation des Headers?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Schlüsselfach kann nicht geöffnet werden (mit Hash-Algorithmus »%s«)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Schlüsselfach %d ist ungültig, bitte wählen Sie ein Schlüsselfach zwischen 0 und %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Gerät »%s« kann nicht ausgelöscht werden."
@@ -1003,11 +1010,11 @@ msgstr "Maximale Länge der TCRYPT-Passphrase (%zu) überschritten."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Der Hash-Algorithmus »%s« für PBKDF2 wird nicht unterstützt, überspringe diesen Teil."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Die benötigte Crypto-Kernel-Schnittstelle ist nicht verfügbar."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Stellen Sie sicher, dass das Kernelmodul »algif_skcipher« geladen ist."
 
@@ -1020,159 +1027,173 @@ msgstr "Aktivierung wird für die Sektorengröße %d nicht unterstützt."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Der Kernel unterstützt die Aktivierung für diesen TCRYPT-Legacymodus nicht."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "TCRYPT-Systemverschlüsselung für Partition »%s« wird aktiviert."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Kernel unterstützt TCRYPT-kompatibles Mapping nicht."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Diese Funktionalität braucht einen geladenen TCRYPT-Header."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Unerwartete Art »%u« des Metadaten-Eintrags beim Parsen des unterstützten Volume Master Keys gefunden."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Ungültige Zeichenkette beim Parsen des Volume Master Key gefunden."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Unerwartete Zeichenkette »%s« beim Parsen des Volume Master Key gefunden."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Unerwarteter Metadaten-Eintrag %u beim Einlesen des unterstützten Volume Master Key gefunden."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Fehler beim Lesen der BITLK-Signatur von »%s«."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Ungültige oder unbekannte Signatur für BITLK-Gerät."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK Version 1 wird derzeit nicht unterstützt."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Ungültige oder unbekannte Bootsignatur für BITLK-Gerät."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Ungültige oder unbekannte Signatur für BITLK-Gerät."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Nicht unterstützte Sektorengröße %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Fehler beim Lesen des BITLK-Headers von »%s«."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Fehler beim Schreiben der BITLK-FVE-Metadaten von »%s«."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Unbekannte oder nicht unterstützte Verschlüsselungsart."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Fehler beim Lesen der BITLK-Metadaten von »%s«."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Unerwartete Art »%u« des Metadaten-Eintrags beim Parsen des externen Schlüssels gefunden."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Unerwarteter Metadaten-Eintrag »%u« beim Einlesen des externen Schlüssels gefunden."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Unerwartete Art »%u« des Metadaten-Eintrags beim Einlesen des Startschlüssels gefunden."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Diese Operation wird nicht unterstützt."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Falsche Schlüsselgröße."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Unerwartete Größe des Datenschlüssels."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Dieses BITLK-Gerät ist in einem nicht unterstützten Zustand und kann daher nicht aktiviert werden."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "BITLK-Geräte der Art »%s« können nicht aktiviert werden."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Aktivieren eines teilweise entschlüsselten BITLK-Geräts wird nicht unterstützt."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Gerät kann nicht aktiviert werden, dem Kernelmodul dm-crypt fehlt die Unterstützung für BITLK-IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Gerät kann nicht aktiviert werden, da dem Kernelmodul dm-crypt die Unterstützung für BITLK-Elephant-Verschleierer fehlt."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Verity-Gerät »%s« benutzt keinen Header auf dem Datenträger."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Gerät »%s« ist kein gültiges VERITY-Gerät."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Nicht unterstützte VERITY-Version %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY-Header verfälscht."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Falsches VERITY-UUID-Format über Gerät »%s« angegeben."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Fehler beim Aktualisieren des VERITY-Headers auf Gerät »%s«."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Verifikation der Stammhash-Signatur wird nicht unterstützt."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Fehler können mit einem FEC-Gerät nicht repariert werden."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "%u reparierbare Fehler mit FEC-Gerät gefunden."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Kernel unterstützt dm-verity-Zuordnung nicht."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Kernel unterstützt Signatur-Option für dm-verity nicht."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Verity-Gerät hat eine Verfälschung nach der Aktivierung festgestellt."
 
@@ -1181,41 +1202,37 @@ msgstr "Verity-Gerät hat eine Verfälschung nach der Aktivierung festgestellt."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Zusätzlicher Platz an Position %<PRIu64> ist nicht ausgenullt."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Überlauf beim Geräte-Offset."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Fehler beim Verifizieren an Position %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Ungültige Größenparameter für Verity-Gerät."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Überlauf des Hashbereichs."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Fehler beim Verifizieren des Datenbereichs."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Fehler beim Verifizieren des Root-Hashes."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "E/A-Fehler beim Anlegen des Hash-Bereiches."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Fehler beim Anlegen des Hash-Bereiches."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "WARNUNG: Kernel kann das Gerät nicht aktivieren, wenn die Datenblockgröße die Seitengröße (%u) übersteigt."
@@ -1224,53 +1241,61 @@ msgstr "WARNUNG: Kernel kann das Gerät nicht aktivieren, wenn die Datenblockgr
 msgid "Failed to allocate RS context."
 msgstr "Fehler beim Reservieren des RS-Kontexts."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Fehler beim Reservieren des Puffers."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Fehler beim Lesen des RS-Blocks %<PRIu64>, Byte %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Fehler beim Lesen der Parität für RS-Block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Fehler beim Reparieren der Parität für RS-Block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Fehler beim Schreiben der Parität für RS-Block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Blockgrößen müssen für FEC zusammen passen."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Ungültige Anzahl von Paritätsbytes."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Ungültige FEC-Segmentlänge."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Fehler beim Ermitteln der Größe von Gerät »%s«."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Kernel unterstützt dm-integrity-Zuordnung nicht."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Kernel unterstützt feste Ausrichtung der Metadaten für dm-integrity nicht."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Der Kernel weigert sich, die unsichere Neuberechnungs-Option zu aktivieren. Um dies zu übersteuern, können Sie die veralteten Aktivierungsoptionen nutzen."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Fehler beim exklusiven Schreibzugriff auf Gerät »%s«."
@@ -1291,45 +1316,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Verlangter Daten-Offset ist zu klein."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "WARNING: Der Schlüsselfach-Bereich (%<PRIu64> Bytes) ist sehr klein, die LUKS2-Schlüsselfachanzahl ist sehr begrenzt.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Fehler beim Zugriff auf die Lesesperre für das Gerät »%s«."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Verbotene LUKS2-Anforderungen in Backup »%s« entdeckt."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Unterschiedliche Datenoffsets auf Gerät und Backup. Wiederherstellung fehlgeschlagen."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Unterschiedliche Größe der Binärheader mit Schlüsselfach-Bereichen zwischen Gerät und Backup. Wiederherstellung fehlgeschlagen."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Gerät »%s« %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "enthält keinen LUKS2-Header. Das Ersetzen des Headers kann Daten auf dem Gerät zerstören."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "enthält bereits einen LUKS2-Header. Das Ersetzen des Headers wird bestehende Schlüsselfächer zerstören."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1339,7 +1364,7 @@ msgstr ""
 "WARNUNG: Unbekannte LUKS2-Anforderungen im echten Geräteheader entdeckt!\n"
 "Das Ersetzen des Headers mit dem Backup kann zu Datenverlust auf dem Gerät führen!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1349,58 +1374,58 @@ msgstr ""
 "WARNUNG: Unvollendete Offline-Wiederverschlüsselung auf dem Gerät entdeckt!\n"
 "Das Ersetzen des Headers mit dem Backup kann zu Datenverlust auf dem Gerät führen."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Unbekannter Schalter »%s« wird ignoriert."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Fehlender Schlüssel für dm-crypt-Segment %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Fehler beim Festlegen des »dm-crypt«-Segments."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Fehler beim Festlegen des »dm-linear«-Segments."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Nicht unterstützte Konfiguration für Geräteintegrität."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Wiederverschlüsselung läuft gerade. Das Gerät kann nicht deaktiviert werden."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Das stillgelegte Gerät »%s« mit dm-error-Ziel konnte nicht in den Fehlerzustand gesetzt werden."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Fehler beim Lesen der LUKS2-Anforderungen."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Unerfüllte LUKS2-Anforderungen entdeckt."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Diese Operation kann nicht mit einem Gerät durchgeführt werden, das für Altlasten-Wiederverschlüsselung markiert ist. Wird abgebrochen."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Diese Operation kann nicht mit einem Gerät durchgeführt werden, das für LUKS2-Wiederverschlüsselung markiert ist. Wird abgebrochen."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Nicht genügend Speicher, um ein Schlüsselfach zu öffnen."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Fehler beim Öffnen des Schlüsselfachs."
 
@@ -1430,7 +1455,7 @@ msgstr "Fehler beim Verschieben des Schlüsselfach-Bereichs. Nicht genug Speiche
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Fehler beim Verschieben des Schlüsselfach-Bereichs. Bereich für die LUKS2-Schlüsselfächer ist zu klein."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Fehler beim Verschieben des Schlüsselfach-Bereichs."
 
@@ -1467,282 +1492,294 @@ msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach %u (über Maxim
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Fehler beim Konvertieren in LUKS1-Format: Schlüsselfach %u ist nicht zu LUKS1 kompatibel."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Die Größe der Hotzone muss ein Vielfaches der berechneten Zonenausrichtung (%zu Bytes) sein."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Gerätegröße muss ein Vielfaches der berechneten Zonenausrichtung (%zu Bytes) sein."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Nicht unterstützter Modus »%s« für Widerstandsfähigkeit"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Fehler beim Initialisieren der Umverpackung für den Speicher alter Segmente."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Fehler beim Initialisieren der Umverpackung für den Speicher neuer Segmente."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Fehler beim Lesen der Prüfsummen für die aktuelle Hotzone."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Fehler beim Lesen des Hotzone-Bereichs, der bei %<PRIu64> beginnt."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Fehler beim Entschlüsseln von Sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Fehler beim Wiederherstellen von Sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Die Größe der Quell- und Zielgeräte stimmt nicht überein. Quelle %<PRIu64>, Ziel: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Fehler beim Aktivieren des Hotzone-Geräts »%s«."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Fehler beim Aktivieren des Überlagerungsgeräts »%s« mit der tatsächlichen Ursprungstabelle."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Fehler beim Laden der neuen Zuordnung für Gerät »%s«."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Fehler beim Auffrischen des Gerätestapels für Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Fehler beim Festlegen der neuen Bereichsgröße für Schlüsselfächer."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Datenverschiebung ist nicht an der angeforderten Verschlüsselungs-Sektorgröße (%<PRIu32> Bytes) ausgerichtet."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Datengerät ist nicht an der angeforderten Verschlüsselungs-Sektorgröße (%<PRIu32> Bytes) ausgerichtet."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Datenverschiebung (%<PRIu64> Sektoren) ist weniger als der zukünftige Datenoffset (%<PRIu64> Sektoren)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Fehler beim exklusiven Öffnen von »%s« (wird bereits anderweitig benutzt)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Das Gerät ist nicht für LUKS2-Wiederverschlüsselung markiert."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Fehler beim Laden des LUKS2-Wiederverschlüsselungs-Kontextes."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Fehler beim Einlesen des Wiederverschlüsselungs-Zustands."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Das Gerät befindet sich nicht in der Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Der Wiederverschlüsselungs-Vorgang läuft bereits."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Fehler beim Zugriff auf die Schreibsperre für die Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Wiederverschlüsselung kann nicht fortgesetzt werden. Führen Sie zuerst die Wiederverschlüsselungs-Wiederherstellung durch."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Aktive Gerätegröße und angeforderte Wiederverschlüsselungsgröße passen nicht zusammen."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "Ungültige Gerätegröße wurde in den Wiederverschlüsselungsparametern angefordert."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Wiederverschlüsselung läuft bereits. Wiederherstellung ist nicht möglich."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "LUKS2-Wiederverschlüsselung ist in den Metadaten bereits initialisiert."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "LUKS2-Wiederverschlüsselung konnte in den Metadaten nicht initialisiert werden."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Fehler beim Festlegen der Gerätesegmente für die nächste Wiederverschlüsselungs-Hotzone."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Fehler beim Schreiben der Metadaten für robuste Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Fehler beim Entschlüsseln."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Fehler beim Schreiben des Hotzone-Bereichs, der bei %<PRIu64> beginnt."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Fehler beim Synchronisieren von Daten."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Fehler beim Aktualisieren der Metadaten, nachdem die aktuelle Wiederverschlüsselungs-Hotzone beendet wurde."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Fehler beim Schreiben der LUKS2-Metadaten."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Fehler beim gründlichen Löschen der Backupsegmentdaten."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Fehler beim Deaktivieren der Wiederverschlüsselungsanforderung."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Token %d kann nicht dem Schlüsselfach %d zugeordnet werden."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Fehler beim Zugriff auf die Sperre zur Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Schwerwiegender Fehler beim Wiederverschlüsseln des Blocks bei %<PRIu64>, %<PRIu64> Sektoren lang."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Das Gerät nicht fortsetzen, außer es wird manuell durch das Fehlerziel ersetzt."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Wiederverschlüsselung kann nicht fortgesetzt werden. Unerwarteter Zustand der Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Fehlender oder ungültiger Wiederverschlüsselungs-Kontext."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Fehler beim Initialisieren des Gerätestapels für Wiederverschlüsselung."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Fehler beim Aktualisieren des Wiederverschlüsselungskontexts."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Schlüsselfach %d ist ungültig."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Kein freies Fach für Token."
 
 # upstream: period missing
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Fehler beim Erzeugen des eingebauten Tokens »%s«."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Passphrase-Verifikation ist nur auf Terminal-Eingaben möglich."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Verschlüsselungsparameter für Schlüsselfach wird nur für LUKS2-Geräte unterstützt."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Kein bekanntes Verschlüsselungsmuster entdeckt."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "WARNUNG: Der Parameter --hash wird im Plain-Modus ignoriert, wenn eine Schlüsseldatei angegeben ist.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "WARNUNG: Die Option --keyfile-size wird ignoriert, da die Lesegröße die gleiche ist wie die Verschlüsselungsschlüsselgröße ist.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Gerätesignaturen auf »%s« erkannt. Wenn Sie fortfahren, könnte das bestehende Daten beschädigen."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Vorgang abgebrochen.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Die Option »--key-file« muss angegeben werden."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "VeraCrypt-PIM eingeben: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Ungültiger PIM-Wert: Formatfehler."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Ungültiger PIM-Wert: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Ungültiger PIM-Wert: außerhalb des gültigen Bereichs."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Kein Geräte-Header mit dieser Passphrase gefunden."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Gerät »%s« ist kein gültiges BITLK-Gerät."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1754,56 +1791,56 @@ msgstr ""
 "daher ausschließlich an einem sicheren Ort und verschlüsselt\n"
 "aufbewahrt werden."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Gerät »%s« ist noch aktiv und zum verzögerten Entfernen eingeplant.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Um die Größe von aktiven Geräten zu öndern, muss der Laufwerksschlüssel im Schlüsselbund sein, aber die Option --disable-keyring wurde angegeben."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Benchmark unterbrochen."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     (nicht zutreffend)\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u Iterationen pro Sekunde für %zu-Bit-Schlüssel\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s (nicht zutreffend)\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u Iterationen, %5u Speicher, %1u parallele Threads (CPUs) für %zu-Bit-Schlüssel (Zieldauer %u Millisekunden)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Das Ergebnis des Benchmarks ist nicht zuverlässig."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Die Tests sind nur annähernd genau, da sie nicht auf den Datenträger zugreifen.\n"
 
 # upstream: the following line should also be translated. This is because the long word "Schlüssel" for "Key" will break the layout, as well as "Verschlüsselung" for "Encryption".
 # To help the translators, you should provide an example for what goes into the %x placeholders, since I had to make an educated guess that the second %s would be exactly 4 characters long. This is an unnecessary burden for the translators.
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s   Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Verschlüsselung »%s« (mit Schlüsselgröße %i Bits) ist nicht verfügbar."
@@ -1811,35 +1848,43 @@ msgstr "Verschlüsselung »%s« (mit Schlüsselgröße %i Bits) ist nicht verfü
 # upstream: the following line should also be translated. This is because the long word "Schlüssel" for "Key" will break the layout, as well as "Verschlüsselung" for "Encryption".
 # To help the translators, you should provide an example for what goes into the %x placeholders, since I had to make an educated guess that the second %s would be exactly 4 characters long. This is an unnecessary burden for the translators.
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#   Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/A"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Es scheint, dass das Gerät keine Wiederherstellung der Wiederverschlüsselung braucht.\n"
-"Trotzdem fortsetzen?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Geben Sie die Passphrase für die Wiederherstellung der Wiederverschlüsselung ein: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Wirklich mit der Wiederherstellung der LUKS2-Wiederverschlüsselung fortfahren?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Geben Sie die Passphrase für die Wiederherstellung der Wiederverschlüsselung ein: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Geben Sie die Passphrase für die Wiederherstellung der Wiederverschlüsselung ein: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Wirklich versuchen, den LUKS-Geräteheader wiederherzustellen?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1848,104 +1893,108 @@ msgstr ""
 "Sie können diesen Vorgang mit Strg+C unterbrechen (der nicht gesäuberte Bereich des Geräts wird dann ungültige Prüfsummen haben).\n"
 
 # upstream: it is boring that I have to translate the newline at the end of each of these messages. Translating strings without newlines is much easier and faster. Since it is redundant anyway (all calls to log_err have a trailing newline), this newline should be written implicitly.
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Fehler beim Deaktivieren des temporären Geräts »%s«."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Die Integritätsoption kann nur für das LUKS2-Format verwendet werden."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Nicht unterstützte Optionen für Größe der LUKS-Metadaten."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Die Headerdatei existiert nicht, soll sie angelegt werden?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Fehler beim Anlegen der Headerdatei »%s«."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Kein bekanntes Integritätsspezifikationsmuster entdeckt."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Das Gerät »%s« kann nicht als Datenträger-Header benutzt werden."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Hiermit werden die Daten auf »%s« unwiderruflich überschrieben."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Fehler beim Festlegen der PBKDF-Parameter."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Verringerter Datenoffset ist nur für separaten LUKS-Header erlaubt."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Die Größe des Laufwerksschlüssels erfordert Schlüsselfächer, bitte nutzen Sie dazu die Option »--key-size«."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Gerät aktiviert, aber die Schalter können nicht dauerhaft gespeichert werden."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Schlüsselfach %d zum Löschen ausgewählt."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Dies ist das letzte Schlüsselfach. Wenn Sie diesen Schlüssel löschen, wird das Gerät unbrauchbar."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Geben Sie irgendeine verbleibende Passphrase ein: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Vorgang abgebrochen, das Schlüsselfach wurde NICHT gesäubert.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Geben Sie die zu löschende Passphrase ein: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Geben Sie die neue Passphrase für das Schlüsselfach ein: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Geben Sie irgendeine bestehende Passphrase ein: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Geben Sie die zu ändernde Passphrase ein: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Geben Sie die neue Passphrase ein: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Geben Sie die Passphrase für das umzuwandelnde Schlüsselfach ein: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Die Operation »isLuks« unterstützt nur genau ein Geräte-Argument."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1957,12 +2006,12 @@ msgstr ""
 "daher ausschließlich an einem sicheren Ort und verschlüsselt\n"
 "aufbewahrt werden."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Schlüsselfach %d enthält keinen unverbundenen Schlüssel."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1971,30 +2020,40 @@ msgstr ""
 "Dieser Dump sollte daher ausschließlich an einem sicheren Ort und\n"
 "verschlüsselt aufbewahrt werden."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s ist kein aktives %s-Gerät."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s ist kein aktives LUKS-Gerät, oder der Header fehlt."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Option »--header-backup-file« muss angegeben werden."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s ist kein von cryptsetup verwaltetes Gerät."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Die Geräteart »%s« kann nicht aufgefrischt werden"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Unbekannte Art »%s« des Metadaten-Geräts."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Dieser Befehl benötigt den Gerätenamen und den zugeordneten Namen als Argumente."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2003,95 +2062,95 @@ msgstr ""
 "Diese Operation wird alle Schlüsselfächer auf Gerät »%s« löschen.\n"
 "Dadurch wird das Gerät unbrauchbar."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Vorgang abgebrochen, die Schlüsselfächer wurden NICHT gesäubert.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Invalid LUKS type, only luks1 and luks2 are supported."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Das Gerät hat bereits den Typ »%s«."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Diese Operation wird für »%s« ins Format »%s« umwandeln.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Vorgang abgebrochen, das Gerät wurde NICHT konvertiert.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Die Option --priority, --label oder --subsystem fehlt."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Token %d ist ungültig."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Token %d ist in Benutzung."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Fehler beim Hinzufügen des LUKS2-Schlüsselring-Tokens %d."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Token %d kann nicht dem Schlüsselfach %d zugeordnet werden."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Token %d wird gerade nicht verwendet."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Token konnte nicht aus der Datei importiert werden."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Auf Token %d kann nicht für den Export zugegriffen werden."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Der Parameter --key-description ist Pflicht für die Aktion »token add«."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Die Aktion erfordert ein bestimmtes Token. Verwenden Sie den Parameter --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Ungültige Token-Operation »%s«."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Automatisch erkanntes aktives dm-Gerät »%s« für Datengerät »%s«.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Gerät »%s« ist kein Blockgerät.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Fehler bei der automatischen Erkennung von Gerät »%s«."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2104,233 +2163,242 @@ msgstr ""
 "Es kann zu Datenverlust kommen, wenn das Gerät gerade aktiviert ist.\n"
 "Um die Wiederverschlüsselung im Online-Modus durchzuführen, verwenden Sie stattdessen den Parameter --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Ungültige LUKS-Geräteart."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Verschlüsselung ohne separaten Kopfbereich (--header) ist nur möglich, wenn die Größe des Hauptgeräts reduziert wird (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Der angeforderte Datenoffset darf maximal die Hälfte des Parameters --reduce-device-size betragen."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Der Wert von --reduce-device-size wird auf das Doppelte von --offset %<PRIu64> (in Sektoren) angepasst.\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Verschlüsselung wird nur für das LUKS2-Format unterstützt."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "LUKS-Gerät auf »%s« erkannt. Möchten Sie dieses LUKS-Gerät erneut verschlüsseln?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Temporäre Headerdatei »%s« existiert bereits. Wird abgebrochen."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Fehler beim Anlegen der temporären Headerdatei »%s«."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s ist jetzt aktiv und bereit für die Onlineverschlüsselung.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "LUKS2-Entschlüsselung wird nur mit losgelöstem Headergerät unterstützt."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Nicht genügend freie Schlüsselfächer für Wiederverschlüsselung."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Schlüsseldatei kann nur mit --key-slot oder mit genau einem aktiven Schlüsselfach benutzt werden."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Geben Sie die Passphrase für Schlüsselfach %d ein: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Geben Sie die Passphrase für Schlüsselfach %u ein: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Der Verschlüsselungsalgorithmus wird auf %s geändert.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Dieser Befehl benötigt den Gerätenamen als Argument."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Derzeit wird nur das LUKS2-Format unterstützt. Bitte verwenden Sie das Werkzeug cryptsetup-reencrypt für LUKS1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Veraltete Offline-Wiederverschlüsselung wird gerade durchgeführt. Verwenden Sie das Hilfsprogramm cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Wiederverschlüsselung von Geräten mit Integritätsprofil wird nicht unterstützt."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Die LUKS2-Wiederverschlüsselung wurde bereits begonnen. Die Operation wird abgebrochen."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "LUKS2-Gerät wird derzeit nicht wiederverschlüsselt."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<Gerät> [--type <Art>] [<Name>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "Gerät als <Name> öffnen"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<Name>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "Gerät schließen (Zuordnung entfernen)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "Größe des aktiven Geräts ändern"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "Gerätestatus anzeigen"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <Algorithmus>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "Verschlüsselungsalgorithmus benchmarken"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<Gerät>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "Versuchen, die Metadaten auf dem Datenträger zu reparieren"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "LUKS2-Gerät wiederverschlüsseln"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "Alle Schlüsselfächer löschen (Verschlüsselungsschlüssel entfernen)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "Zwischen den Formaten LUKS und LUKS2 umwandeln"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "Permanente Konfigurationsoptionen für LUKS2 festlegen"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<Gerät> [<neue Schlüsseldatei>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "Ein LUKS-Gerät formatieren"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "Schlüssel zu LUKS-Gerät hinzufügen"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<Gerät> [<Schlüsseldatei>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "Entfernt bereitgestellten Schlüssel oder Schlüsseldatei vom LUKS-Gerät"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "Ändert den angegebenen Schlüssel oder die Schlüsseldatei des LUKS-Geräts"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "Wandelt einen Schlüssel in neue PBKDF-Parameter um"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<Gerät> <Schlüsselfach>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "Löscht Schlüssel mit Nummer <Schlüsselfach> vom LUKS-Gerät"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "UUID des LUKS-Geräts ausgeben"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "Testet <Gerät> auf Header einer LUKS-Partition"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "LUKS-Partitionsinformationen ausgeben"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "TCRYPT-Geräteinformationen ausgeben"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "BITLK-Geräteinformationen ausgeben"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "LUKS-Gerät in Ruhezustand versetzen und alle Schlüssel auslöschen (alle IOs werden eingefroren)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "LUKS-Gerät aus dem Ruhezustand aufwecken"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Header und Schlüsselfächer eines LUKS-Geräts sichern"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Header und Schlüsselfächer eines LUKS-Geräts wiederherstellen"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <Gerät>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "LUKS2-Token manipulieren"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2338,7 +2406,7 @@ msgstr ""
 "\n"
 "<Aktion> ist eine von:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2350,7 +2418,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2365,7 +2433,7 @@ msgstr ""
 "<Schlüsselfach> ist die Nummer des zu verändernden LUKS-Schlüsselfachs\n"
 "<Schlüsseldatei> optionale Schlüsseldatei für den neuen Schlüssel der »luksAddKey«-Aktion\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2374,7 +2442,7 @@ msgstr ""
 "\n"
 "Vorgegebenes festeingebautes Metadatenformat ist %s (für luksFormat-Aktion).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2391,7 +2459,7 @@ msgstr ""
 "Vorgabe-PBKDF für LUKS2: %s\n"
 "\tIterationszeit: %d, benötigter Speicher: %d kB, parallele Threads: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2406,444 +2474,452 @@ msgstr ""
 "\tplain: %s, Schlüssel: %d Bits, Passphrase-Hashen: %s\n"
 "\tLUKS: %s, Schlüssel: %d Bits, LUKS-Header-Hashen: %s, Zufallszahlengenerator: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: Standard-Schlüsselgröße mit XTS-Modus (zwei interne Schlüssel) wird verdoppelt.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: Benötigt %s als Argumente"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Diese Hilfe anzeigen"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Kurze Aufrufsyntax anzeigen"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Paketversion ausgeben"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Hilfe-Optionen:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Zeigt detailliertere Fehlermeldungen an"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Zeigt Debugging-Meldungen an"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Debugging-Meldungen anzeigen, inclusive JSON-Metadaten"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Der Algorithmus zum Verschlüsseln des Datenträgers (siehe /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Das Hashverfahren, um den Verschlüsselungsschlüssel aus der Passphrase zu erzeugen"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifiziert die Passphrase durch doppeltes Nachfragen"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Schlüssel aus einer Datei lesen"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Laufwerks-(Master-)Schlüssel aus Datei lesen."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Laufwerks-(Master-)schlüssel anstelle der Schlüsselfach-Informationen wegschreiben"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Die Größe des Verschlüsselungsschlüssels"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Begrenzt das Lesen aus der Schlüsseldatei"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "Bytes"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Anzahl der Bytes, die in der Schlüsseldatei übersprungen werden"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Begrenzt das Lesen aus der neu erzeugten Schlüsseldatei"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Anzahl der Bytes, die in der neu erzeugten Schlüsseldatei übersprungen werden"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Fachnummer für den neuen Schlüssel (im Zweifel das nächste freie)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Die Größe des Geräts"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTOREN"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Nur die angegebene Gerätegröße benutzen (Rest des Gerätes ignorieren). GEFÄHRLICH!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Der Startoffset im Backend-Gerät"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Wieviele Sektoren der verschlüsselten Daten am Anfang übersprungen werden sollen"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Eine schreibgeschützte Zuordnung erzeugen"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Nicht nach Bestätigung fragen"
 
 # XXX
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Frist für interaktive Eingabe der Passphrase (in Sekunden)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "sek"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Aktualisierungsintervall für Fortschrittszeile (in Sekunden)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Wie oft die Eingabe der Passphrase wiederholt werden kann"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Nutzdaten an Grenzen von <n> Sektoren ausrichten - für luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Datei mit dem Backup der LUKS-Header und den Schlüsselfächern"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "/dev/random zum Generieren des Laufwerksschlüssels benutzen"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "/dev/urandom zum Generieren des Laufwerksschlüssels benutzen"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Gerät mit einem anderen nicht-überlappenden Kryptosegment teilen"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID für das zu verwendende Gerät"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Auswurf-Anfragen (»TRIM«-Befehl) für das Gerät zulassen"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Gerät oder Datei mit separatem LUKS-Header"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Gerät nicht aktivieren, nur Passphrase überprüfen"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Versteckten Header benutzen (verstecktes TCRYPT-Gerät)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Das Gerät ist das System-TCRYPT-Laufwerk (mit Bootlader)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Backup-(Zweit-)-TCRYPT-Header benutzen"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Auch nach VeryCrypt-kompatiblen Geräten suchen"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Persönlicher Interations-Multiplizierer (PIM) für VeryCrypt-kompatibles Gerät"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Bei VeraCrypt-kompatiblem Gerät nach persönlichem Iterations-Multiplizierer (PIM) fragen"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Art der Geräte-Metadaten: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Passwort-Qualitätsprüfung deaktivieren (wenn sie aktiviert ist)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Kompatibilitäts-Performance-Option »same_cpu_crypt« für dm-crypt benutzen"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Kompatibilitäts-Performance-Option »submit_from_crypt_cpus« für dm-crypt benutzen"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Arbeitswarteschlangen von dm-crypt umgehen und Leseanfragen synchron abarbeiten"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Arbeitswarteschlangen von dm-crypt umgehen und Schreibanfragen synchron abarbeiten"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Das Entfernen des Geräts wird aufgeschoben, bis der letzte Benutzer es schließt"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Globale Sperre verwenden, um speicherintensive PBKDF zu serialisieren (um Speicherprobleme zu umgehen)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "PBKDF-Iterationszeit for LUKS (in ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "msek"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "PBKDF-Algorithmus (für LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "PBKDF-Speicherkostengrenze"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "Kilobytes"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "PBKDF-Parallelitätskosten"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "Threads"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "PBKDF-Iterationskosten (erzwungen, deaktiviert Benchmark)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Schlüsselfach-Priorität: ignore (ignorieren), normal, prefer (bevorzugen)"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Dateisperrung von Metadaten auf der Platte deaktivieren"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Deaktivieren, dass Laufwerksschlüssel über den Kernel-Schlüsselbund geladen werden"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Datenintegritätsalgorithmus (nur LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Aufzeichnung für Integritätsgerät deaktivieren"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Gerät nach dem Formatieren nicht säubern"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Ineffizientes Altlasten-Padding verwenden (für alte Kernel)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Nicht nach einer Passphrase fragen, wenn die Aktivierung durch Token fehlschlägt"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Token-Nummer (Vorgabe: eine beliebige)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Schlüsselbeschreibung"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Verschlüsselungs-Sektorgröße (Vorgabe: 512 Bytes)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "IV verwenden (in Sektorgröße gezählt statt in Einheiten von 512 Bytes)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Aktivierungsschalter für Gerät permanent festlegen"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Beschriftung für das LUKS2-Gerät festlegen"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Teilsystem-Beschriftung für das LUKS2-Gerät festlegen"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Unbeschränktes LUKS2-Schlüsselfach (ohne zugeordnetem Datensegment) anlegen oder wegschreiben"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "JSON aus einer Datei lesen oder in eine Datei schreiben"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Größe des Bereichs für LUKS2-Header-Metadaten"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Größe des Bereichs für Schlüsselfächer im LUKS2-Header"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Gerät mit neuen Parametern auffrischen (reaktivieren)"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "LUKS2-Schlüsselfach: Die Größe des Verschlüsselungsschlüssels"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "LUKS2-Keyslot: Der Algorithmus, der für die Keyslot-Verschlüsselung verwendet wird"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "LUKS2-Gerät verschlüsseln (direkt am Ort)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "LUKS2-Gerät entschlüsseln (Verschlüsselung entfernen)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "LUKS2-Wiederverschlüsselung nur in Metadaten beginnen."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Nur eine begonnene LUKS2-Wiederverschlüsselung fortsetzen."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Größe des Datengeräts reduzieren (Datenoffset verschieben). GEFÄHRLICH!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Maximalgröße der Wiederverschlüsselungs-Hotzone."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Widerstandsfähigkeit der Hotzone für die Wiederverschlüsselung (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Hash für Prüfsummen der Wiederverschlüsselungs-Hotzone"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Automatische Geräteerkennung der dm-Geräte für die Wiederverschlüsselung übersteuern"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPTION...] <Aktion> <aktionsabhängig>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argument <Aktion> fehlt."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Unbekannte Aktion."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Die Optionen --refresh und --test-passphrase schließen sich gegenseitig aus."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Die Option --deferred ist nur beim »close«-Befehl erlaubt."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Die Option --shared ist nur beim beim »open«-Befehl eines Plain-Gerätes erlaubt."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Die Option --allow-discards ist nur beim »open«-Befehl erlaubt."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Die Option --persistent ist nur beim »open«-Befehl erlaubt."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Die Option --serialize-memory-hard-pbkdf ist nur beim »open«-Befehl erlaubt."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Die Option --persistent ist nicht mit --test-passphrase kombinierbar."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2852,260 +2928,259 @@ msgstr ""
 "»open« und »benchmark« erlaubt. Benutzen Sie stattdessen »--keyfile-size=(Bytes)«,\n"
 "um das Lesen aus der Schlüsseldatei zu begrenzen."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Die Option --integrity ist nur für luksFormat (LUKS2) erlaubt."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Die Option --integrity-no-wipe ist nur für die »format«-Aktion mit Integritätserweiterung erlaubt."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Die Optionen --label und --subsystem sind nur für die Aktionen »luksFormat« und »config LUKS2« erlaubt."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Die Option --test-passphrase ist nur beim Öffnen von LUKS, TCRYPT- und BITLK-Geräten erlaubt."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Schlüsselgröße muss ein Vielfaches von 8 Bit sein"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Schlüsselfach ist ungültig."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Die Option --key-file wirkt stärker als das angegebene Schlüsseldatei-Argument."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Negative Zahl für die Option nicht erlaubt."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Die Option --key-file ist nur einmal erlaubt."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Nur eine der Optionen --use-[u]random ist erlaubt."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Die Option --use-[u]random ist nur für luksFormat erlaubt."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Die Option --uuid ist nur für luksFormat und luksUUID erlaubt."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Die Option --align-payload ist nur für luksFormat erlaubt."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Die Optionen --luks2-metadata-size und --opt-luks2-keyslots-size sind nur für luksFormat mit LUKS2 erlaubt."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Ungültige Angabe für die Größe der LUKS2-Metadaten."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Ungültige Angabe für die Größe der LUKS2-Schlüsselfächer."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Die Optionen --align-payload und --offset können nicht kombiniert werden."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Die Option --skip ist nur beim Öffnen von plain- und loopaes-Geräten erlaubt."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Die Option --offset ist nur beim Öffnen von plain- und loopaes-Geräten erlaubt, sowie für luksFormat und Geräte-Wiederverschlüsselung."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Die Optionen --tcrypt-hidden, --tcrypt-system und --tcrypt-backup sind nur zusammen mit einem TCRYPT-Gerät erlaubt."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Die Option --tcrypt-hidden kann nicht mit --allow-discards kombiniert werden."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Die Option --veracrypt wird nur für TCRYPT-kompatible Geräte unterstützt."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Ungültiges Argument für Parameter --veracrypt-pim angegeben."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Die Option --veracrypt-pim wird nur für VeraCrypt-kompatible Geräte unterstützt."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Die Option --veracrypt-query-pim wird nur für VeraCrypt-kompatible Geräte unterstützt."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Die Optionen --veracrypt-pim und --veracrypt-query-pim schließen sich gegenseitig aus."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Die Option --priority kann nur »ignore/normal/prefer« sein."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Das Schlüsselfach muss angegeben werden."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Passwortbasierte Schlüsselableitungsfunktion (PBKDF) kann nur »pbkdf2« oder »argon2i/argon2id« sein."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Bei PBKDF darf nur entweder die Anzahl der Durchläufe oder die Zeitbegrenzung angegeben werden."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "Die Option Sektorgröße wird für diesen Befehl nicht unterstützt."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "Die Option für große IV-Sektoren wird nur unterstützt, wenn das geöffnete Gerät Sektoren größer als 512 Bytes hat."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "Die Option »--unbound« erfordert die Schlüsselgröße."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Die Option »--unbound« kann nur zusammen mit den Aktionen »luksAddKey« und »luksDump« benutzt werden."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Die Option --refresh kann nur zusammen mit der Aktion »open« benutzt werden."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Fehler beim Deaktivieren der Metadaten-Dateisperre."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Ungültige Angabe der Maximalgröße für die Wiederverschlüsselungs-Hotzone."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Ungültige Angabe der Gerätegröße."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Die maximale Verkleinerungsgröße ist 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Die verkleinerte Größe muss ein Vielfaches von 512-Byte-Sektoren sein."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Ungültige Angabe der Datengröße."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Überlauf bei der Verringerungsgröße."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "LUKS2-Entschlüsselung erfordert die Option --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Die Gerätegröße muss ein Vielfaches von 512-Byte-Sektoren sein."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Die Optionen --reduce-device-size und --data-size können nicht kombiniert werden."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Die Optionen --device-size und --size können nicht kombiniert werden."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Die Optionen --ignore-corruption und --restart-on-corruption können nicht zusammen benutzt werden."
+msgstr "Die Optionen --keyslot-cipher und --keyslot-keysize können nur zusammen benutzt werden."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Ungültiger Salt-String angegeben."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Fehler beim Schreiben des Hash-Abbilds »%s«."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Fehler beim Schreiben des FEC-Abbilds »%s«."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Ungültiger Root-Hash-String angegeben."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Ungültige Signaturdatei »%s«."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Fehler beim Einlesen der Signaturdatei »%s«."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<Datengerät> <Hash-Gerät>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "Gerät formatieren"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<Datengerät> <Hash-Gerät> <Root-Hash>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "Gerät verifizieren"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<Datengerät> <Name> <Hash-Gerät> <Root-Hash>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "Status der aktiven Geräte anzeigen"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<Hash-Gerät>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "Auf dem Datenträger gespeicherte Informationen anzeigen"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3120,7 +3195,7 @@ msgstr ""
 "<Hash-Gerät> ist das Gerät, das die Verifikationsdaten enthält\n"
 "<Root-Hash> ist der Hash des Rootknotens auf <Hash-Gerät>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3131,126 +3206,139 @@ msgstr ""
 "Einkompilierte Vorgabewerte für dm-verity:\n"
 "\tHash: %s, Datenblock (Bytes): %u, Hashblock (Bytes): %u, Salt-Größe: %u, Hashformat: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Verity-Superblock nicht benutzen"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Format-Art (1 - normal, 0 - originales Chrome-OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "Zahl"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Blockgröße auf dem Datengerät"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Blockgröße auf dem Hash-Gerät"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "FEC-Paritätsbytes"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Die Anzahl der Blöcke in der Datendatei"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "Blöcke"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Pfad zum Gerät mit Fehlerkorrekturdaten"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "Pfad"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Start-Offset auf dem Hash-Gerät"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Start-Offset auf dem FEC-Gerät"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Hash-Algorithmus"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "Zeichenkette"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Salt"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "Hex-Zeichenkette"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Pfad zur Signaturdatei des Stammhashes"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Kernel neustarten wenn Beschädigung festgestellt wird"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Kernel-Abbruch, wenn Beschädigung festgestellt wird"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Beschädigung ignorieren, nur mitloggen"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Ausgenullte Blöcke nicht überprüfen"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Datenblock nur beim erstmaligen Lesen verifizieren"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Die Optionen --ignore-corruption, --restart-on-corruption und --ignore-zero-blocks sind nur für die »open«-Aktion erlaubt."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Die Option --root-hash-signature kann nur zusammen mit der Aktion »open« benutzt werden."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Die Optionen --ignore-corruption und --restart-on-corruption können nicht zusammen benutzt werden."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Die Optionen --panic-on-corruption und --restart-on-corruption können nicht zusammen benutzt werden."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Ungültige Schlüsselgröße. Maximum ist %u Bytes."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Fehler beim Einlesen der Schlüsseldatei »%s«."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Fehler beim Einlesen von %d Bytes aus der Schlüsseldatei »%s«."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formatiert mit Etikettgröße %u und interner Integrität %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<Integritätsgerät>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<Integritätsgerät> <Name>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3261,403 +3349,409 @@ msgstr ""
 "<Name> ist das Gerät, das unter »%s« angelegt werden soll\n"
 "<Integritätsgerät> ist das Gerät, das die Daten mit Integritätsangaben enthält\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Einkompilierte Vorgabewerte für dm-integrity:\n"
 "\tPrüfalgorithmus: %s\n"
+"\tMaximalgröße der Schlüsseldatei: %d kB\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Pfad zum Datengerät (wenn getrennt)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Journalgröße"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Sektoren verschränken"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Jornal-Wasserzeichen"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "Prozent"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Journal-Commitzeit"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Anzahl der 512-Byte-Sektoren pro Bit (Bitmap-Modus)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Zeit für sicheres Speichern im Bitmap-Modus"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Etikettgröße pro Sektor"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Sektorengröße"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Puffergröße"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Datenintegritäts-Algorithmus"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Die Größe des Datenintegritätsschlüssels"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Integritätsschlüssel aus einer Datei lesen"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Integritätsalgorithmus für Journal"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Die Größe des Integritätsschlüssels für das Journal"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Integritätsschlüssel für das Journal aus einer Datei lesen"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algorithmus für Journalverschlüsselung"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Die Größe des Journal-Verschlüsselungsschlüssels"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Journal-Verschlüsselungsschlüssel aus einer Datei lesen"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Wiederherstellungsmodus (kein Journal, keine Etikettprüfung)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Bitmap verwenden, um Änderungen nachzuverfolgen und Journal für Integritätsgerät deaktivieren"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Initiale Integritätsangaben automatisch neu berechnen."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Superblock nicht mit HMAC schützen (alte Kernel)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Neuberechnung von Laufwerken mit HMAC-Schlüsseln erlauben (alte Kernel)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Die Option --integrity-recalculate kann nur zusammen mit der Aktion »open« benutzt werden."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Die Optionen --journal-size, --interleave-sectors, --sector-size, --tag-size und --no-wipe können nur bei der Aktion »format« verwendet werden."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Ungültige Angabe der Journalgröße."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Sowohl die Schlüsseldatei als auch die Schlüsselgröße müssen angegeben werden."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Wenn ein Integritätsschlüssel verwendet wird, muss auch der Integritätsalgorithmus angegeben werden."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Sowohl die Schlüsseldatei als auch die Schlüsselgröße müssen für die Journalintegrität angegeben werden."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Wenn ein Integritätsschlüssel für das Journal verwendet wird, muss auch der Integritätsalgorithmus angegeben werden."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Sowohl der Verschlüsselungsschlüssel als auch die Schlüsselgröße müssen für die Journalverschlüsselung angegeben werden."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Wenn ein Verschlüsselungsschlüssel für das Journal verwendet wird, muss auch der Verschlüsselungsalgorithmus angegeben werden."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Die Modi Wiederherstellung und Bitmap schließen sich gegenseitig aus."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Die Journal-Optionen können nicht im Bitmap-Modus verwendet werden."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Die Bitmapoptionen können nur im Bitmapmodus verwendet werden."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Wiederverschlüsselung läuft bereits."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Gerät »%s« kann nicht exklusiv geöffnet werden, da es bereits benutzt wird."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Belegen des ausgerichteten Speichers fehlgeschlagen."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Fehler beim Lesen von Gerät »%s«."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "LUKS1-Gerät »%s« wird als unbenutzbar markiert."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "LUKS2-Offline-Wiederverschlüsselungs-Kennzeichen wird auf Gerät »%s« festgelegt."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Fehler beim Schreiben auf Gerät »%s«."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Fehler beim Speichern der Wiederverschlüsselungs-Logdatei."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Fehler beim Einlesen der Wiederverschlüsselungs-Logdatei."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Logdatei »%s« existiert, Wiederverschlüsselung wird fortgesetzt.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Temporäres Gerät mit dem alten LUKS-Header wird aktiviert."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Temporäres Gerät mit dem neuen LUKS-Header wird aktiviert."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Fehler beim Aktivieren der temporären Geräte."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Fehler beim Festlegen des Daten-Offsets."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Fehler beim Festlegen der Metadatengröße."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Neuer LUKS-Header für Gerät »%s« angelegt."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Diese Version von cryptsetup-reencrypt kann internen Tokentyp %s nicht verarbeiten."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Fehler beim Lesen der Aktivierungsschalter aus dem Backup-Header."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Fehler beim Schreiben der Aktivierungsschalter in den neuen Header."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Fehler beim Lesen der Anforderungen aus dem Backup-Header."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "%s-Backup-Header von Gerät »%s« angelegt."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Fehler beim Anlegen des LUKS-Backup-Headers."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Fehler beim Wiederherstellen des %s-Headers auf Gerät »%s«."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "%s-Header auf Gerät »%s« wiederhergestellt."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Fehler beim Öffnen des temporären LUKS-Geräts."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Fehler beim Ermitteln der Gerätegröße."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "E/A-Fehler während der Wiederverschlüsselung."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Die angegebene UUID ist ungültig."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Fehler beim Öffnen der Wiederverschlüsselungs-Logdatei."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Derzeit ist keine Entschlüsselung im Gange, die angegebene UUID kann nur benutzt werden, um einen unterbrochenen Entschlüsselungsvorgang fortzusetzen."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "PBKDF-Parameter in Schlüsselfach %i wurden geändert."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Wiederverschlüsselungs-Blockgröße"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Schlüssel nicht ändern, Datenbereich nicht neu verschlüsseln"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Laufwerks-(Master-)Schlüssel aus Datei lesen"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "PBKDF2 Iterationszeit for LUKS (in ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Beim Zugriff auf die Geräte direct-io benutzen"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Nach jedem Block fsync aufrufen"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Logdatei nach jedem Block aktualisieren"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Nur dieses Schlüsselfach benutzen (alle anderen werden deaktiviert)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Neuen Header auf unverschlüsseltem Gerät anlegen"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Gerät dauerhaft entschlüsseln (Verschlüsselung entfernen)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Die UUID, um das Entschlüsseln fortzusetzen"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Art der LUKS-Metadaten: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPTION...] <Gerät>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Wiederverschlüsselung ändert: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "Laufwerksschlüssel"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr ", Hash auf "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", Verschlüsselung auf "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argument muss angegeben werden."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Für die Wiederverschlüsselungs-Blockgröße sind nur Werte zwischen 1 MiB und 64 MiB erlaubt."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Die maximale Verkleinerungsgröße ist 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Die Option »--new« muss zusammen mit »--reduce-device-size« oder »--header« benutzt werden."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Die Option »--keep-new« kann nur zusammen mit »--hash«, »--iter-time« oder »--pbkdf-force-iterations« benutzt werden."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Die Option »--new« kann nicht zusammen mit »--decrypt« benutzt werden."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Die Option --decrypt verträgt sich nicht mit den angegebenen Parametern."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Die Option »--uuid« kann nur zusammen mit »--decrypt« benutzt werden."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Ungültiger LUKS-Typ. Verwenden Sie einen von diesen: luks, luks1, luks2."
 
@@ -3698,32 +3792,32 @@ msgstr "Unbekannter Fehler"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Fehler %i beim Ausführen eines Befehls »%s«.\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Schlüsselfach %i erstellt."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Schlüsselfach %i entsperrt."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Schlüsselfach %i entfernt."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i erstellt."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i entfernt."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3731,55 +3825,55 @@ msgstr ""
 "\n"
 "Gründlich löschen unterbrochen."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "WARNUNG: Gerät %s enthält bereits eine '%s'-Partitionssignatur.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "WARNUNG: Gerät %s enthält bereits eine '%s'-Superblock-Signatur.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Fehler beim Initialisieren der Gerätesignatursonden."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Gerät %s konnte nicht gefunden werden."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Gerät %s wird gerade benutzt. Das Formatieren ist gerade nicht möglich."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Datei %s konnte nicht im Lese-/Schreibmodus geöffnet werden."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Die bestehende Partitionssignatur »%s« (Offset: %<PRIi64> Bytes) auf Gerät %s wird dadurch gelöscht."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Die bestehende Superblocksignatur »%s« (Offset: %<PRIi64> Bytes) auf Gerät %s wird dadurch gelöscht."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Fehler beim Löschen der Gerätesignatur."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Gerät %s konnte nicht auf eine Signatur geprüft werden."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3787,7 +3881,7 @@ msgstr ""
 "\n"
 "Wiederverschlüsselung unterbrochen."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Fehler beim Prüfen der Passwortqualität: %s"
@@ -3806,46 +3900,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Passwort-Qualitätsüberprüfung fehlgeschlagen: Falsche Passphrase (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Fehler beim Lesen der Passphrase vom Terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Passphrase bestätigen: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Passphrasen stimmen nicht überein."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Offset kann nicht zusammen mit Terminaleingabe benutzt werden."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Passphrase eingeben: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Geben Sie die Passphrase für »%s« ein: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Kein Schlüssel mit dieser Passphrase verfügbar."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Es ist kein nutzbares Schlüsselfach verfügbar."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Fehler beim Schreiben der Schlüsseldatei »%s«."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Fehler beim Schreiben der Schlüsseldatei »%s«."
@@ -3888,6 +3982,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "JSON-Datei konnte nicht geschrieben werden."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Fehler beim Deaktivieren der Wiederverschlüsselungsanforderung."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Es scheint, dass das Gerät keine Wiederherstellung der Wiederverschlüsselung braucht.\n"
+#~ "Trotzdem fortsetzen?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "WARNUNG: Zugriffssperren-Verzeichnis %s/%s ist nicht vorhanden!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Ungültige Größenparameter für Verity-Gerät."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Wenn ein Integritätsschlüssel verwendet wird, muss auch der Integritätsalgorithmus angegeben werden."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Falsche Schlüsselgröße."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "Die Option --refresh ist nur beim »open«- oder »refresh«-Befehl erlaubt."
 
index 1c8f11f..3a420f3 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index 5cf861e..05b0fcd 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,8 +1,8 @@
 # Spanish translations for cryptsetup package
 # Traducciones al español para el paquete cryptsetup.
-# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
+# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Free Software Foundation, Inc.
 # This file is put in the public domain.
-# Antonio Ceballos <aceballos@gmail.com>, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020
+# Antonio Ceballos <aceballos@gmail.com>, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021
 #
 # ######################################################################
 # Traducciones dudosas:
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.5-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-16 08:46+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-03-20 20:00+0100\n"
 "Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
 "Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
@@ -86,61 +86,62 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "No se puede inicializar el «device mapper», ejecutando como usuario no administrador."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "No se puede inicializar el «device-mapper». ¿Está cargado el módulo del núcleo dm_mod?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "El indicador diferido solicitado no está disponible."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "El DM-UUID del dispositivo %s ha sido truncado."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Tipo de objetivo dm desconocido."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Las opciones de rendimiento de dm-crypt solicitadas no están disponibles."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Las opciones de manejo de corrupción de datos de dm-verity solicitadas no están disponibles."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Las opciones FEC de dm-verity solicitadas no están disponibles."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Las opciones de integridad de datos solicitadas no están disponibles."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "La opción sector_size solicitada no está disponible."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "El recómputo automático de las etiquetas de integridad solicitado no está disponible."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Descartar/TRIM no disponible."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "El modo de mapa de bits de dm-integrity solicitado no está disponible."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "No se ha podido consultar el segmento de dm-%s."
@@ -182,7 +183,7 @@ msgstr "No se puede inicializar el «backend» del generador de números aleator
 msgid "Cannot initialize crypto backend."
 msgstr "No se puede inicializar el «backend» de cifrado."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Algoritmo «hash» %s no disponible."
@@ -196,7 +197,7 @@ msgstr "Error de procesamiento de la clave (usando «hash» %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "No se puede determinar el tipo de dispositivo. ¿Es incompatible la activación del dispositivo?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Esta operación solamente está disponible para dispositivos LUKS."
 
@@ -204,7 +205,7 @@ msgstr "Esta operación solamente está disponible para dispositivos LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Esta operación solamente está disponible para dispositivos LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Todas las ranuras de claves están llenas."
 
@@ -218,7 +219,7 @@ msgstr "La ranura de claves %d no es válida; seleccione un número entre 0 y %d
 msgid "Key slot %d is full, please select another one."
 msgstr "La ranura de claves %d está llena; seleccione otra."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "El tamaño del dispositivo no está alineado con el tamaño de bloque lógico del dispositivo."
 
@@ -227,7 +228,8 @@ msgstr "El tamaño del dispositivo no está alineado con el tamaño de bloque l
 msgid "Header detected but device %s is too small."
 msgstr "Cabecera detectada pero el dispositivo %s es demasiado pequeño."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Esta operación no está disponible para este tipo de dispositivo."
 
@@ -235,17 +237,13 @@ msgstr "Esta operación no está disponible para este tipo de dispositivo."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Operación con recifrado en curso no válida."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Versión LUKS no disponible %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "El dispositivo de metadatos separado no está disponible para este tipo de cifrado."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "El dispositivo %s no está activo."
@@ -259,7 +257,7 @@ msgstr "El dispositivo subyacente asociado al dispositivo cifrado %s ha desapare
 msgid "Invalid plain crypt parameters."
 msgstr "Parámetros de cifrado para modo claro no válidos."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Tamaño de clave no válido."
 
@@ -267,12 +265,16 @@ msgstr "Tamaño de clave no válido."
 msgid "UUID is not supported for this crypt type."
 msgstr "El UUID no está disponible para este tipo de cifrado."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "El dispositivo de metadatos separado no está disponible para este tipo de cifrado."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Tamaño de sector de cifrado no admitido."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "El tamaño del dispositivo no está alineado con el tamaño del sector solicitado."
 
@@ -316,8 +318,8 @@ msgstr "ATENCIÓN: el tamaño de los metadatos LUKS2 ha cambiado a %<PRIu64> byt
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "ATENCIÓN: el tamaño de la zona de ranuras de claves LUKS2 ha cambiado a %<PRIu64> bytes.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "El dispositivo %s es demasiado pequeño."
@@ -350,16 +352,16 @@ msgstr "Imposible dar formato LOOPAES sin dispositivo."
 msgid "Can't format VERITY without device."
 msgstr "Imposible dar formato VERITY sin dispositivo."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Tipo de «hash» VERITY %d no disponible."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Tamaño de bloque VERITY no disponible."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Desplazamiento «hash» VERITY no disponible."
 
@@ -389,236 +391,236 @@ msgstr "ATENCIÓN: El tamaño de etiqueta de %d bytes solicitado difiere del tam
 msgid "Unknown crypt device type %s requested."
 msgstr "El tipo de dispositivo cifrado % solicitado es desconocido."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Parámetros no admitidos para el dispositivo %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Parámetros discordantes en el dispositivo %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Los dispositivos de cifrado no concuerdan."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "No se ha podido recargar el dispositivo %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "No se ha podido suspender el dispositivo %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "No se ha podido reanudar el dispositivo %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Error grave durante la recarga del dispositivo %s (por encima del dispositivo %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "No se ha podido conmutar el dispositivo %s a dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "No se ha podido cambiar el tamaño del dispositivo de bucle."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "¿Está seguro de que quiere cambiar el UUID del dispositivo?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "El fichero de copia de seguridad de la cabecera no contiene una cabecera LUKS compatible."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "El volumen %s no está activo."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "El volumen %s ya está suspendido."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "La suspensión no está disponible para el dispositivo %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Error durante la suspensión del dispositivo %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "EL volumen %s no está suspendido."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "La reanudación no está disponible para el dispositivo %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Error durante la reanudación del dispositivo %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "EL volumen %s no está suspendido."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "La clave de volumen no corresponde a este volumen."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "No se puede añadir ranura de claves; todas las ranuras están desactivadas y no se ha proporcionado una clave para el volumen."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "No se ha logrado intercambiar la nueva ranura de claves."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "La ranura de claves %d no es válida."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "La ranura de claves %d no está activa."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "La cabecera del dispositivo se solapa con la zona de datos."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Recifrado en curso. No se puede activar el dispositivo."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "No se ha podido conseguir el bloqueo de recifrado."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "La recuperación del recifrado LUKS2 ha fallado."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Este tipo de dispositivo no se ha inicializado adecuadamente."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "No se puede utilizar el dispositivo %s; el nombre no es válido o todavía está en uso."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "El dispositivo %s ya existe."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "No se puede utilizar el dispositivo %s; el nombre no es válido o todavía está en uso."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Clave de volumen incorrecta para dispositivo no cifrado."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "«Hash» raíz incorrecta para dispositivo «verity»."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Se requiere la firma «hash» raíz."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "El llavero de núcleo está ausente: se necesita para pasar la firma al núcleo."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "No se ha podido cargar la clave en el llavero del núcleo."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "El dispositivo %s todavía se está utilizando."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Dispositivo inválido %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "El «buffer» de la clave del volumen es demasiado pequeño."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "No se puede recuperar la clave para el dispositivo no cifrado."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "No se puede recuperar el «hash» raíz para dispositivo «verity»."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Esta operación no está disponible para el dispositivo cifrado %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Operación de volcado no deisponible para este tipo de dispositivo."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "El desplazamiento de datos no es múltiplo de %u bytes."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "No se puede convertir el dispositivo %s que todavía está en uso."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "No se ha logrado asignar la ranura de claves %u como nueva clave del volumen."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "No se han podido inicializar los parámetros predefinidos de la ranura de claves LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "No se ha logrado asignar la ranura de claves %d al resumen."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "El llavero de núcleo no está admitido en el núcleo."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "No se ha podido leer la frase contraseña desde el llavero (error %d)"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "No se ha podido adquirir el bloqueo de la serialización de acceso duro de memoria global."
 
@@ -646,8 +648,8 @@ msgstr "No se ha podido efectuar «stat» sobre el fichero de claves."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "No es posible situarse en la posición solicitada del fichero de claves."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Memoria agotada mientras se estaba leyendo la frase contraseña."
 
@@ -667,51 +669,56 @@ msgstr "Se ha excedido el tamaño máximo de fichero de claves."
 msgid "Cannot read requested amount of data."
 msgstr "No se puede leer la cantidad de datos solicitada."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "El dispositivo %s no existe o el acceso al mismo ha sido denegado."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "El dispositivo %s no es compatible."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Se ignorará por falso el tamaño de optimal-io para el dispositivo de datos (%u bytes)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "El dispositivo %s es demasiado pequeño. Se necesitan %<PRIu64> bytes como mínimo."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "No se puede usar el dispositivo %s porque ya está en uso (asignado o montado)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "No se puede utilizar el dispositivo %s; permiso denegado."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "No se puede obtener información del dispositivo %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "No se puede utilizar un dispositivo de bucle invertido como usuario no administrador."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "No se ha logrado asociar el dispositivo de bucle invertido (hace falta un dispositivo de bucle con marcador de auto-limpieza)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "El «offset» solicitado está más allá del tamaño real del dispositivo %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "El dispositivo %s tiene tamaño cero."
@@ -785,16 +792,16 @@ msgstr "Bloqueo abortado. La ruta del bloqueo %s/%s no puede utilizarse (o no es
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "ATENCIÓN: ¡Falta el directorio de bloqueo %s/%s!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "El directorio de bloqueo %s/%s se creará con los permisos predeterminados al compilar."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Bloqueo abortado. La ruta del bloqueo %s/%s no puede utilizarse (%s no es un directorio)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "No es posible situarse en la posición del dispositivo."
 
@@ -822,8 +829,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "La especificación de cifrado debería estar en formato [cipher]-[mode]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "No se puede escribir en el dispositivo %s; permiso denegado."
@@ -842,12 +849,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Error de entrada/salida mientras se cifraba una ranura de claves."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "No se puede abrir el dispositivo %s."
@@ -868,43 +875,43 @@ msgstr "El dispositivo %s es demasiado pequeño. (LUKS1 necesita %<PRIu64> btyes
 msgid "LUKS keyslot %u is invalid."
 msgstr "La ranura de claves LUKS %u no es válida."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "El dispositivo %s no es un dispositivo LUKS válido."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "El fichero de copia de seguridad de cabecera solicitado %s ya existe."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "No se puede crear el fichero de copia de seguridad %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "No se puede escribir en el fichero de copia de seguridad %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "El fichero de copia de seguridad no contiene una cabecera LUKS válida."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "No se puede abrir el fichero de copia de seguridad de cabecerda %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "No se puede leer el fichero de copia de seguridad de cabecerda %s."
@@ -926,7 +933,7 @@ msgstr "no contiene cabecera LUKS. Reemplazar la cabecera puede destruir los dat
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "ya contiene cabecera LUKS. Reemplazar la cabecera destruirá las ranuras de claves existentes."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -938,101 +945,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "El tamaño de la clave no es estándar; se requiere una reparación manual."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "El alineamiento de las ranuras de claves no es estándar; se requiere una reparación manual."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Reparando ranuras de claves."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Ranura de claves %i: posición reparada (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Ranura de claves %i: bandas reparadas (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Ranura de claves %i: la firma de la partición es falsa."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Ranura de claves %i: «salt wiped»."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Escribiendo cabecera LUKS en el disco."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "La reparación ha fallado."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "La «hash» LUKS solicitada %s no está disponible."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "No se ha detectado ningún problema en la cabecera LUKS."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Error al actualizar la cabecera LUKS en el dispositivo %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Error al leer la cabecera LUKS después de actualizarla en el dispositivo %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "La posición de los datos de una cabecera LUKS debe ser 0 o superior al tamaño de la cabecera."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "El formato de UUID LUKS proporcionado es incorrecto."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "No se puede crear la cabecera LUKS: fallo en la lectura «random salt»."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "No se puede crear la cabecera LUKS: fallo en la cabecera (usando «hash» %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "La ranura de claves %d está activa; primero hay que purgar."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "El material de la ranura de claves %d no tiene suficientes bandas. Quizá se haya manipulado la cabecera."
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "No se puede abrir la ranura de claves (usando «hash» %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "La ranura %d no es válida; seleccione una ranura de claves entre 0 y %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "No se puede limpiar el dispositivo %s."
@@ -1068,11 +1075,11 @@ msgstr "Se ha excedido la longitud máxima (%zu) de la frase contraseña TCRYPT.
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "El algoritmo «hash» %s no está disponible, por lo que se ha ignorado."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "La interfaz de cifrado del núcleo requerida no está disponible."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Asegúrese de que el módulo del núcleo algof_skcipher está cargado."
 
@@ -1085,159 +1092,173 @@ msgstr "No es posible la activación para el tamaño de sector %d."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "El núcleo no dispone de activación para este modo antiguo TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Activando el sistema de cifrado TCRYPT para la partición %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "El núcleo no admite asignación compatible con TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Esta función no está disponible sin carga de cabecera TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "El tipo de entrada de metadatos '%u' no esperado se ha encontrado mientras se analizaba la clave maestra del volumen soportado."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Se ha encontrado una cadena no válida mientras se analizaba la clave maestra del volumen."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Se ha encontrado una cadena no esperada ('%s') mientras se analizaba la clave maestra del volumen soportado."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "El valor de entrada de metadatos '%u' no esperado se ha encontrado mientras se analizaba la clave maestra del volumen soportado."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "No se ha podido leer la firma BITLK de %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Firma no válida o desconocida para el dispositivo BITLK"
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK versión 1 no está admitido actualmente."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Firma de arranque no válida o desconocida para el dispositivo BITLK"
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Firma no válida o desconocida para el dispositivo BITLK"
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Tamaño de sector no admitido %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "No se ha podido leer la cabecera BITLK de %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "No se han podido leer los metadatos BITLK FVE de %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Tipo de cifrado desconocido o no admitido."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "No se han podido leer las entradas de los metadatos BITLK de %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Tipo de entrada de metadatos '%u' encontrado inesperadamente mientras se analizaba clave externa."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Valor de entrada de metadatos '%u' encontrado inesperadamente mientras se analizaba clave externa."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Entrada de metadatos encontrada inesperadamente mientras se analizaba clave de inicio."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Esta operación no está disponible."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Tamaño de clave incorrecto."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Tamaño de datos de la clave no esperado."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Este dispositivo BITLK se encuentra en un estado en el que no puede activarse."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Los dispositivos BITLK con tipo '%s' no puede activarse."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "La activación de un dispositivo BITLK parcialmente descifrado no puede hacerse."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "No se puede activar el dispositivo; el dm-crypt del núcleo no sirve para BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "No se puede activar el dispositivo; el dm-crypt del núcleo no sirve para difusor BITLK «Elephant»."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "El dispositivo «verity» %s no utiliza cabecera en disco."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "El dispositivo %s no es un dispositivo VERITY válido."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Versión VERITY %d no disponible."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Cabecera VERITY corrupta."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "El formato UUID VERITY proporcionado en el dispositivo %s es incorrecto."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Error al actualizar la cabecera «verity» en el dispositivo %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "La verificación de firma «hash» raíz solicitada no está disponible."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Los errores no pueden repararse con dispositivo FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Se han encontrado %u errores reparables con dispositivo FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "El núcleo no dispone de asignación «dm-verity»."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "El núcleo no dispone de opción de firma «dm-verity»."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "El dispositivo «verity» ha detectado algo corrupto después de la activación."
 
@@ -1246,41 +1267,37 @@ msgstr "El dispositivo «verity» ha detectado algo corrupto después de la acti
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "El área de reserva no tiene ceros en la posición %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Desbordamiento de la posición del dispositivo."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "La verificación ha fallado en la posición %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Parámetros de tamaño inválido para un dispositivo «verity»."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Desbordamiento del área «hash»."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Fallo en la verificación del área de datos."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Fallo en la verificación de la «hash» raíz."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Error de entrada/salida al crear el área «hash»."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "La creación del área «hash» ha fallado."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "ATENCIÓN: el núcleo no puede activar un dispositivo si el tamaño del bloque de datos excede el tamaño de página (%u)."
@@ -1289,53 +1306,61 @@ msgstr "ATENCIÓN: el núcleo no puede activar un dispositivo si el tamaño del
 msgid "Failed to allocate RS context."
 msgstr "No se ha podido asignar contexto RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "No se ha podido asignar «buffer»."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "No se ha podido leer el bloque RS %<PRIu64> byte %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "No se ha podido leer la paridad para el bloque RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "No se ha podido reparar la paridad para el bloque %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "No se ha podido escribir la paridad para el bloque RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Los tamaños de bloque deben coincidir para FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Número no válido de bytes de paridad."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Longitud de segmento FEC no válida."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "No se ha podido determinar el tamaño para el dispositivo %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "El núcleo no dispone de asociación «dm-integrity»."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "El núcleo no dispone de alineamiento de metadatos fijo «dm-integrity»."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "El núcleo rehúsa activar la opción de recálculo inseguro (véanse las opciones de activación antiguas para cambiar ese funcionamiento)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "No se ha podido adquirir el bloqueo de escritura del dispositivo %s."
@@ -1356,45 +1381,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "El desplazamiento de datos solicitado es demasiado pequeño."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "ATENCIÓN: la zona de ranuras de claves (%<PRIu64> bytes) es muy pequeña; el número de ranuras de claves LUKS2 disponibles es muy limitado.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "No se ha podido adquirir el bloqueo de lectura para el dispositivo %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Se han detectado requisitos prohibidos para LUKS2 en la copia de seguridad %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "La posición de los datos no coinciden en el dispositivo y en la copia de seguridad; ha fallado la restauración."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "La cabecera binaria con el tamaño de las áreas de ranuras de claves no coinciden en el dispositivo y en la copia de seguridad; la restauración ha fallado."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Dispositivo %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "no contiene cabecera LUKS2. Reemplazar la cabecera puede destruir los datos en ese dispositivo."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "ya contiene cabecera LUKS2. Reemplazar la cabecera destruirá las ranuras de claves existentes."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1405,7 +1430,7 @@ msgstr ""
 "dispositivo real! Reemplazar la cabecera con la copia de seguridad puede\n"
 "corromper los datos en ese dispositivo!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1415,58 +1440,58 @@ msgstr ""
 "AVISO: ¡Se ha detectado recifrado «offline» no terminado en el dispositivo!\n"
 "¡Reemplazar la cabecera con la copia de seguridad puede corromper los datos!"
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Se hará caso omiso del indicador desconocido %s."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Falta la clave para el segmento dm-crypt %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "No se ha podido establecer el segmento de dm-crypt."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "No se ha podido establecer el segmento de dm-linear."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Configuración de integridad de dispositivo no admitida."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Recifrado en curso. No se puede desactivar el dispositivo."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "No se ha podido reemplazar el dispositivo suspendido %s con el objetivo dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "No se ha podido leer los requisitos LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Se han detectado requisitos LUKS2 no satisfechos."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Operación incompatible con dispositivo marcado para recifrado obsoleto. Se aborta."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Operación incompatible con dispositivo marcado para recifrado LUKS2. Se aborta."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "No hay memoria disponible suficiente para abrir una ranura de claves."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Fallo al abrir la ranura de claves."
 
@@ -1496,7 +1521,7 @@ msgstr "Imposible mover el área de la ranura de claves. No hay suficiente espac
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Imposible mover el área de la ranura de claves. Área de ranuras de clave LUKS2 demasiado pequeña."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Imposible mover el área de la ranura de claves."
 
@@ -1533,282 +1558,294 @@ msgstr "No se puede convertir a formato LUKS1 - la ranura %u (sobre las ranuras
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "No se puede convertir a formato LUKS1 - la ranura de claves %u no es compatible con LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "El tamaño de la zona activa debe ser múltiplo del alineamiento de zona calculado (%zu bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "El tamaño del dispositivo debe ser múltiplo del alineamiento de zona calculado (%zu bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Modo de resiliencia %s no admitido."
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "No se ha podido inicializar la envoltura antigua de almacenamiento del segmento."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "No se ha podido inicializar la envoltura nueva de almacenamiento del segmento."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "No se han podido leer las sumas de comprobación para la zona activa actual."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "No se ha podido leer la zona activa que comienza en %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "No se ha podido descifrar el sector %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "No se ha podido recuperar el sector %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Los tamaños de los dispositivos origen y destino no coinciden. Origen %<PRIu64>, destino: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "No se ha podido activar el dispositivo con zona activa %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "No se ha podido activar el dispositivo de superposición %s con la tabla de orígenes actual."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "No se ha podido cargar el nuevo mapa para el dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "No se ha podido refrescar la pila del dispositivo de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "No se ha logrado establecer el tamaño de las nuevas ranuras de claves."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "El desplazamiento de datos no está alineado con el tamaño del sector de cifrado solicitado (%<PRIu32> bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "El dispositivo de datos no está alineado con el tamaño del sector de cifrado solicitado (%<PRIu32> bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "El desplazamiento de datos (%<PRIu64> sectores) es menor que el desplazamiento de datos futuros (%<PRIu64> sectores)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "No se ha podido abrir %s en modo exclusivo (ya está asignado o montado)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "El dispositivo no está marcado para recifrado LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "No se ha podido cargar el contexto del recifrado LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "No se ha podido obtener el estado del recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "El dispositivo no está en recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "El proceso de recifrado ya está en marcha."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "No se ha podido adquirir el bloqueo de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "No se puede proceder con el recifrado. Ejecute primero la recuperación de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "El tamaño del dispositivo activo y el tamaño de recifrado solicitado no coinciden."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "El tamaño de dispositivo solicitado en los parámetros de recifrado no es válido."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Recifrado en proceso. No se puede llevar a cabo una recuperación."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "Recifrado LUKS2 ya inicializado en los metadatos."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "No se ha podido inicializar el recifrado LUKS2 en los metadatos."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "No se han podido establecer los segmentos del dispositivo para la siguiente zona activa de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "No se han podido escribir los metadatos de resiliencia de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "El descifrado ha fallado."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "No se ha podido escribir la zona activa que comienza en %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "No se han podido sincronizar los datos."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "No se han podido actualizar los metadatos tras completar la zona activa de recifrado actual."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "No se han podido escribir los metadatos de LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "No se han podido limpiar los datos de segmentos de respaldo."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "No se ha podido desactivar el indicador del requisito de descifrado."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "No se ha logrado asignar el «token» %d a la ranura de claves %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "No se ha podido conseguir el bloqueo de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Error fatal mientras se recifraba una porción que comienza en %<PRIu64>, de %<PRIu64> sectores de longitud."
 
 # No sé cómo traducir 'error target'.
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "No reanudar el dispositivo a menos que se reemplace con «error target» manualmente."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "No se puede proceder con el recifrado. Estado de recifrado inesperado."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Contexto de recifrado ausente o no válido."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "No se ha podido inicializar la pila del dispositivo de recifrado."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "No se ha podido actualizar el contexto de recifrado."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "La ranura de claves %d no es válida."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "No hay ninguna ranura de «token» libre."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "No se ha podido crear el «token» interno %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "No se puede hacer verificación de frase contraseña en entradas no tty."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Los parámetros de cifrado de ranura de claves solo pueden configurarse para dispositivos LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "No se ha detectado ningún patrón conocido de especificación de cifrado."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "ATENCIÓN: No se va a hacer caso del parámetro --hash en modo no cifrado con el fichero de claves especificado.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "ATENCIÓN: No se va a hacer caso de la opción --keyfile-size; el tamaño de lectura es igual al tamaño de la clave de cifrado.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Se ha(n) detectado firma(s) de dispositivo en %s. Si se prosigue, pueden dañarse los datos existentes."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operación abortada.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Es necesaria la opción --key-file."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Introduzca PIM de VeraCrypt: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Valor de PIM no válido: error de análisis."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Valor de PIM no válido: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Valor de PIM no válido: fuera de rango."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "No se ha detectado ninguna cabecera de dispositivo con esa frase contraseña."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "El dispositivo %s no es un dispositivo BITLK válido."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1818,88 +1855,96 @@ msgstr ""
 "sensible que permite el acceso a una partición cifrada sin frase contraseña.\n"
 "Este volcado debería almacenarse siempre cifrado en un lugar seguro."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "El dispositivo %s todavía está activo y programado para borrado diferido.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "El cambio de tamaño del dispositivo activo requiere clave de volumen en el llavero pero la opción --disable-keyring está puesta."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Comparativa interrumpida."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/A\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iteraciones por segundo para clave de %zu bits\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/A\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iteraciones, %5u memora, %1u hilos paralelos (CPUs) para clave de %zu bits (tiempo solicitado %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "El resultado de la comparativa no es fiable."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Las pruebas son solo aproximadas usando memoria (no hay entrada/salida de almacenadmiento).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algoritmo |     Clave |         Cifrado |      Descifrado\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "El algoritmo de cifrado %s (con clave de %i bits) no está disponible."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#     Algoritmo |     Clave |         Cifrado |      Descifrado\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "/N/A"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Parece que el dispositivo no necesita recuperación del recifrado.\n"
-"¿Desea continuar de todos modos?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Introduzca la frase contraseña para la recuperación del recifrado: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "¿Está seguro de proceder con la recuperación del recifrado LUKS2?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Introduzca la frase contraseña para la recuperación del recifrado: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Introduzca la frase contraseña para la recuperación del recifrado: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "¿Está seguro de que quiere intentar reparar la cabecera del dispositivo LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1907,104 +1952,108 @@ msgstr ""
 "Limpieza de dispositivo para inicializar la suma de comprobación de integridad.\n"
 "Puede interrumpirse pulsando CTRL+c (el resto de dispositivo no limpiado contendrá sumas de comprobación no válidas.\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "No se puede desactivar el dispositivo temporal %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "La opción de integridad solo puede utilizarse para formato LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Opciones de tamaño de metadatos LUKS2 no admitidas."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "No existe el fichero de cabecera; ¿desea crearlo?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "No se puede crear el fichero de cabecera %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "No se ha detectado ningún patrón conocido de especificación de integridad."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "No se puede utilizar %s como cabecera en disco."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Esto sobreescribirá los datos en %s de forma irrevocable."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "No se han podido establecer los parámetros pbkdf."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "La posición de datos reducida está permitida solamente para cabecera LUKS separada."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "No se puede determinar el tamaño de la clave del volumen para LUKS2 sin ranuras de claves; utilice la opción --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Dispositivo activado pero los indicadores no pueden hacerse persistentes."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "La ranura de claves %d se va a borrar."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Esta es la última ranura de claves. El dispositivo quedará inutilizado después de purgar esta clave."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Introduzca cualquier frase contraseña que quede: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operación abortada; la ranura de claves NO estaba limpia.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Introduzca la frase contraseña que hay que borrar: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Introduzca una nueva frase contraseña para la ranura de claves: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Introduzca cualquier frase contraseña que exista: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Introduzca la frase contraseña que hay que cambiar: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Introduzca una nueva frase contraseña: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Introduzca la frase contraseña para la ranura de claves que se va a convertir: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "La operación isLuks solo admite un argumento de dispositivo."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -2014,12 +2063,12 @@ msgstr ""
 "sensible que permite el acceso a una partición cifrada sin frase contraseña.\n"
 "Este volcado debería almacenarse cifrado en un lugar seguro."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "La ranura de claves %d no contiene clave independiente."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -2027,30 +2076,40 @@ msgstr ""
 "El volcado de la cabecera con clave independiente del volumen es información\n"
 "sensible. Este volcado debería almacenarse cifrado en un lugar seguro."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s no es un nombre de dispositivo %s activo."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s no es un nombre de dispositivo LUKS activo o falta la cabecera."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Es necesaria la opción --header-backup-file."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s no es un dispositivo gestionable por cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "El refresco no está disponible para el tipo de dispositivo %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Tipo de dispositivo de metadatos %s no reconocido."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Esta orden necesita como argumentos el dispositivo y el nombre asociado."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2059,95 +2118,95 @@ msgstr ""
 "Esta operación borrará todas las ranuras de claves en el dispositivo %s.\n"
 "El dispositivo quedará inutilizable después de esta operación."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operación abortada; las ranuras de claves NO estaban limpias.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Tipo LUKS no válido; solo se admiten luks1 y luks2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "El dispositivo ya es de tipo %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Esta operación convertirá el formato %s a %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operación abortada; el dispositivo NO estaba convertido.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Falta la opción --priority, --label o --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "El «token» %d no es válido."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "El «token» %d está en uso."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "No se ha podido añadir el «token» %d al llavero luks."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "No se ha logrado asignar el «token» %d a la ranura de claves %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "El «token» %d no está en uso."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "No se ha podido importar el «token» del fichero."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "No se ha logrado obtener el «token» %d para exportar."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "El parámetro --key-description es obligatorio para la acción de añadir «token»."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "La acción requiere un «token» específico. Utilice el parámetro --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Operación de «token» no válida %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Se ha detectado automáticamente el dispositivo dm activo '%s' para el dispositivo de datos %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "El dispositivo %s no es un dispositivo de bloques.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "No se han podido detectar automáticamente los propietarios del dispositivo %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2161,233 +2220,242 @@ msgstr ""
 "activado. Para realizar recifrado en modo «online», utilice en su lugar\n"
 "el parámetro --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Tipo de dispositivo LUKS no válido."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "El cifrado sin cabecera separada (--header) no es posible sin reducción del tamaño del dispositivo de datos (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "El desplazamiento de datos solicitado debe ser menor o igual que la mitad del parámetro --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Ajustando el valor de --reduce-device-size al doble de --offset %<PRIu64> (sectores).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "El cifrado solo puede hacerse con formato LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Se ha detectado un dispositivo LUKS en %s. ¿Desea cifrar de nuevo ese dispositivo LUKS?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "El fichero de cabecera temporal %s ya existe. Se aborta."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "No se puede crear el fichero de cabecera temporal %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s ahora está activo y preparado para cifrado «online».\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "No hay suficientes ranuras de claves para el recifrado."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "El fichero de claves solo puede usarse con --key-slot o con una sola ranura de claves activa exactamente."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Introduzca la frase contraseña para la ranura de claves %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Introduzca la frase contraseña para la ranura de claves %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Cambiando el algoritmo de cifrado de datos a %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Esta orden necesita un dispositivo como argumento."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Actualmente solo se admite el formato LUKS2. Utilice la herramienta cryptsetup-reencrypt para LUKS1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Ya hay un recifrado «offline» heredado en proceso. Utilice la utilidad cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "El recifrado de dispositivo con perfil de integridad no está admitido."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "El recifrado LUKS2 ya está inicializado. Se aborta la operación."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "El dispositivo LUKS2 no está en recifrado."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<dispositivo> [--type <tipo> [<nombre>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "abrir el dispositivo como <nombre>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nombre>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "cerrar dispositivo (eliminar asociación)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "cambiar el tamaño del dispositivo activo"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "mostrar el estado del dispositivo"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cypher <algoritmo_de_cifrador>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "algoritmo de cifrado para pruebas"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<dispositivo>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "intentar reparar metadatos en disco"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "recifrar dispositivo LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "borrar todas las ranuras de claves (eliminar clave de cifrado)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "convertir formato LUKS de/en LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "establecer opciones de configuración permanentes para LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<dispositivo> [<nuevo fichero de claves>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "da formato a un dispositivo LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "añadir clave a un dispositivo LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<dispositivo> [<fichero de claves>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "elimina la clave suministrada o el fichero de claves del dispositivo LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "cambia la clave suministrada o el fichero de claves del dispositivo LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "convierte una clave a los nuevos parámetros pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<dispositivo> <ranura de claves>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "borra la clave con el número <ranura de clave> del dispositivo LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "imprimir el UUID del dispositivo LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "comprueba si <dispositivo> tiene cabecera de partición LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "volcar información sobre la partición LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "volcar información sobre el dispositivo TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "volcar información sobre el dispositivo BITLK"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Suspender el dispositivo LUKS y limpiar la clave (todas las entradas/salidas congeladas)."
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Reanudar el dispositivo LUKS suspendido."
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Hacer copia de seguridad de la cabecera y de las ranuras de claves del dispositivo LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Restaurar la cabecera y las ranuras de claves del dispositivo LUKS"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<añade|elimina|importa|exporta> <dispositivo>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Manipular «tokens» LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2395,7 +2463,7 @@ msgstr ""
 "\n"
 "<acción> es una de:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2407,7 +2475,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2422,7 +2490,7 @@ msgstr ""
 "<ranura de claves> es el número de la ranura de claves que se va a modificar\n"
 "<fichero de claves> fichero de claves opcional para la nueva clave para la acción 'luksAddKey'\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2431,7 +2499,7 @@ msgstr ""
 "\n"
 "El formato de metadatos predefinido de fábrica es %s (para la acción luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2448,7 +2516,7 @@ msgstr ""
 "PBKDF predefinido para LUKS2: %s\n"
 "\tTiempo de iteración: %d, Memoria requerida: %dkB, hilos en paralelo: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2463,443 +2531,451 @@ msgstr ""
 "\tsin cifrado: %s, Clave: %d bits, Contraseña «hashing»: %s\n"
 "\tLUKS: %s, Clave: %d bits, «hashing» de la cabecera LUKS: %s, Generador de números aleatorios: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: El tamaño de clave predefinido con modo XTS (dos claves internas) va a ser duplicado.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: necesita %s como argumentos"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Mostrar este mensaje de ayuda"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Mostrar brevemente cómo se usa"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Imprimir versión del paquete"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Opciones de ayuda:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Muestra mensajes de error más detallados"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Mostrar mensajes de depuración"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Mostrar mensajes de depuración incluidos los metadatos JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Algoritmo de cifrado utilizado para cifrar el disco (ver /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Algoritmo «hash» utilizado para crear la clave de cifrado a partir de la frase contraseña"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifica la frase contraseña preguntándola dos veces"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Leer la clave de un fichero."
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Leer la clave (maestra) del volumen desde fichero."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Volcar la clave (maestra) del volumen en lugar de la información de las ranuras de claves."
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Tamaño de la clave de cifrado"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Limita la lectura desde fichero de claves"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "bytes"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Número de bytes que hay que saltar en el fichero de claves"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Limita la lectura desde un fichero de claves recién añadido"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Número de bytes que hay que saltar en el fichero de claves recién añadido"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Número de ranura para la nueva clave (el primero libre es lo predefinido)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Tamaño del dispositivo"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SECTORES"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Utilizar solamente el tamaño especificado de dispositivo (ignorar el resto del dispositivo). ¡PELIGROSO!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "iPosición de comienzo en el dispositivo «backend»"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Cuántos sectores de los datos cifrados hay que saltar al principio"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Crear una asignación alatoria"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "No pedir confirmación"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Tiempo de espera máximo para petición interactiva de frase contraseña (en segundos)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "s"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Actualización de la línea de progreso (en segundos)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Con qué frecuencia se puede volver a intentar introducir la frase contraseña"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Alinear los datos a <n> bordes de sector - para luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Fichero con copia de seguridad de cabecera LUKS y de ranuras de clave."
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Usar /dev/random para generar la clave del volumen."
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Usar /dev/urandom para generar la clave del volumen."
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Compartir dispositivo con otro segmento cifrado no solapado."
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID del dispositivo que se va a usar"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Permitir solicitudes de descarte (también llamadas TRIM) para el dispositivo"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Dispositivo o fichero con cabecera LUKS separada"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "No activar dispositivo; comprobar frase contraseña solamente"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Utilizar cabecera oculta (dispositivo TCRYPT oculto)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "El dispositivo es una unidad con sistema TCRYPT (con cargador de arranque)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Utilizar la cabecera TCRYPT de respaldo (secundaria)"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Explorar también si es un dispositivo compatible con VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Multiplicador de iteración personal para dispositivo compatible con VeraCrypt"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Consulta el multiplicador de iteración personal para dispositivo compatible con VeraCrypt"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Tipo de metadatos del dispositivo: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Desactivar la comprobación de la calidad de la contraseña (si estaba activada)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Utilizar la opción de compatibilidad de rendimiento same_cpu_crypt de dm-crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Utilizar la opción de compatibilidad de rendimiento submit_from_crypt_cpus de dm-crypt"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Obviar la cola de trabajo de dm-crypt y procesar las peticiones de lectura de forma síncrona"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Obviar la cola de trabajo de dm-crypt y procesar las peticiones de escritura de forma síncrona"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "La eliminación del dispositivo está diferida hasta que el último usuario lo cierre"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Utilizar un bloqueo global para serializar PBKDF estricto en memoria (solución OOM)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Tiempo de iteración PBKDF para LUKS (en ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algoritmo PBKDF (para LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Límite del coste de memoria PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobytes"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Coste del paralelismo PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "hilos"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Coste de las iteraciones PBKDF (forzado, desactiva el banco de pruebas)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Prioridad de la ranura de claves: ignorada, normal, preferente"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Desactiva el bloqueo de metadatos en disco"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Desactiva la carga de las claves del volumen mediante el llavero del núcleo"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algoritmo de integridad de datos (solo LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Desactiva el diario para dispositivo de integridad"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "No limpiar dispositivo después de dar formato"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Utilizar relleno obsoleto ineficiente (núcleos antiguos)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "No pedir frase de paso si falla la activación por «token»"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Número de «token» (predefinido: cualquiera)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Descripción de la clave"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Tamaño de sector de cifrado (predeterminado: 512 bytes)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Utiliza IV contado en tamaño de sector (no en unidades de 512 bytes)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Establecer indicadores de activación persistentes para el dispositivo"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Poner etiqueta al dispositivo LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Poner etiqueta de subsistema al dispositivo LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Crear o volcar ranura de claves LUKS2 independiente (sin segmento de datos asignado)"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Leer o escribir el json de o en un fichero"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Tamaño de la zona de metadatos de la cabecera LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Tamaño de la zona de ranuras de clave de la cabecera LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Refrescar (reactivar) el dispositivo con los nuevos parámetros"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Ranura de clave de LUKS2: Tamaño de la clave de cifrado"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Ranura de clave de LUKS2: El algoritmo de cifrado utilizado para el cifrado de ranuras de clave"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Crifrar el dispositivo LUKS2 (cifrado in situ)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Descifrar el dispositivo LUKS2 (elimina cifrado)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Inicializar solamente recifrado LUKS2 de los metadatos."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Reanudar solamente recifrado LUKS2 inicializado."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Reducir el tamaño del dispositivo de datos (mover la posición de los datos). ¡PELIGROSO!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Tamaño de zona activa de recifrado máximo."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Tipo de resiliencia de zona activa de recifrado (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "«Hash» de suma de comprobación de zona activa de recifrado"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Anular la autodetección de dispositivos del dispositivo dm que se va a recifrar"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPCIÓN...] <acción> <acción-específica>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "El argumento <acción> no se ha proporcionado."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Acción desconocida."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Las opciones --refresh y --test-passphrase son mutuamente excluyentes."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "La opción --deferred solo se permite con la orden de cerrar."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "La opción --shared solo se permite para abrir dispositivos no cifrados."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "La opción --allow-discards solo se permite para la operación de abrir."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "La opción --persistent solo se permite para la operación de abrir."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "La opción --serialize-memory-hard-pbkdf solo se permite para la operación de abrir."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "La opción --persistent no se permite con --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2907,260 +2983,259 @@ msgstr ""
 "La opción --key-size solo se permite con las acciones luksFormat, luksAddKey,\n"
 "open y benchmark. Para limitar la lectura del fichero de claves, utilizar --keyfile-size=(bytes)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "La opción --integrity solo se permite con luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "La opción --integrity-no-wipe solo puede usarse para la acción de formato con extensión de integridad."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Las opciones --label y --subsystem solo se permiten con las operaciones luksFormat y config LUKS2."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "La opción --test-passphrase solo se permite para abrir dispositivos LUKS, TCRYPT y BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "El tamaño de clave debe ser un múltiplo de 8 bits"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "La ranura de claves no es válida."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "La opción --key-file tiene precedencia sobre el argumento de fichero de claves especificado."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "No se permiten números negativos para esta opción."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Solo se permite un argumento --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Solo se permite una de las opciones --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "La opción --use-[u]random solo se permite con luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "La opción --uuid solo se permite con luksFormat luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "La opción --align-payload solo se permite con luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Las opciones --luks2-metadata-size y --opt-luks2-keyslots-size solo se permiten para luksFormat con LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "La especificación del tamaño de los metadatos LUKS2 no es válida."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "La especificación del tamaño de las ranuras de claves LUKS2 no es válida."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Las opciones --align-payload y --offset no pueden combinarse."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "La opción --skip solo está disponible para abrir dispositivos no cifrados y «loopaes»."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "La opción --offset solo está disponible para abrir dispositivos no cifrados y «loopaes», «luksFormat» y recifrado de dispositivo."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "La opción --tcrypt-hidden o --tcrypt-system o --tcrypt-backup solo está disponible para dispositivos TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "La opción --tcrypt-hidden no puede combinarse con --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "La opción --veracrypt solo está disponible para dispositivos TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Argumento no válido para el parámetro --veracrypt-pim supplied."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "La opción --veracrypt-pim solo está disponible para dispositivos compatibles con VeraCrypt."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "La opción --veracrypt-query-pim  solo está disponible para dispositivos compatibles con VeraCrypt."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Las opciones --veracrypt-pim y --veracrypt-query-pim son mutuamente excluyentes."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "La opción --priority solo puede ser ignore/normal/prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Se requiere especificación de ranura de claves."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "La función de derivación de clave basada en contraseña (PBKDF) solo puede ser pbkdf2 o argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Las iteraciones forzadas de PBKDF no pueden combinarse con la opción de tiempo de iteración."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "La opción de tamaño de sector no está disponible para esta orden."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "La opción de sectores IV grandes solo se admite para abrir dispositivo de tipo plano con tamaño de sector mayor de 512 bytes."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "El tamaño de la clave es requerido con la opción --unbound."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "La opción --unbound solo puede utilizarse con las acciones luksAddKey y luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "La opción --refresh solo puede utilizarse con la acción de abrir."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "No se puede desactivar el bloqueo de metadatos."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "La especificación del tamaño máximo de zona activa del dispositivo no es válida."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "La especificación del tamaño del dispositivo no es válida."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "El tamaño máximo de reducción del dispositivo es de 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "El tamaño de reducción debe ser múltiplo de sectores de 512 bytes."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "La especificación del tamaño de los datos no es válida."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Desbordamiento del tamaño de la reducción."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "El descifrado LUKS2 requiere la opción --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "El tamaño del dispositivo debe ser múltiplo de sectores de 512 bytes."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Las opciones --reduce-device-size y --data-size no pueden combinarse."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Las opciones --device-size y --size no pueden combinarse."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Las opciones --ignore-corruption y --restart-on-corruption no pueden utilizarse juntas."
+msgstr "Las opciones --keyslot-cipher y --keyslot-key-size deben utilizarse juntas."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "La cadena «salt» especificada no es válida."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "No se puede crear la imagen «hash» %s para escribir."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "No se puede crear la imagen FEC %s para escribir."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "La cadena «hash» raíz especificada no es válida."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Fichero de firmas inválido %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "No se puede leer el fichero de firmas %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<dispositivo_de_datos> <dispositivo_«hash»>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "dar formato al dispositivo"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<dispositivo_de_datos> <dispositivo_«hash»> <«hash»_raíz>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "verificar dispositivo"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<dispositivo_de_datos> <nombre> <dispositivo_«hash»> <«hash»_raíz>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "mostrar el estado del dispositivo activo"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<dispositivo_«hash»>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "mostrar información sobre el disco"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3175,7 +3250,7 @@ msgstr ""
 "<dispositivo_«hash»> es el dispositivo que contiene los datos de verificación\n"
 "<«hash»_raíz> «hash» del nodo raíz en «dispositivo—«hash»>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3186,126 +3261,139 @@ msgstr ""
 "Parámetros dm-verity predefinidos de fábrica:\n"
 "\tAlgoritmo «hash»: %s, Bloque de datos (bytes): %u, Bloque «hash» (bytes): %u, Tamaño de «salt»: %u, Formato «hash»: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "No utilizar superbloque «verity»"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Tipo de formato (1 - normal, 0 - Chrome OS original)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "número"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Tamaño de bloque en el dispositivo de datos"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Tamaño de bloque en el dispositivo «hash»"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Bytes de paridad FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Número de bloques en el fichero de datos"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "bloques"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Ruta a dispositivo con datos de corrección de errores"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "ruta"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Posición inicial en el dispositivo «hash»"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Posición inicial en el dispositivo FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Algoritmo «hash»"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "cadena"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "«Salt»"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "cadena hexadecimal"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Ruta al fichero de firmas «hash» raíz"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Reiniciar el núcleo si se detecta corrupción"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Poner en pánico al núcleo si se detecta corrupción"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignorar corrupción, tomar nota únicamente"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "No verificar bloques con zeros"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Verificar el bloque de datos solo en la primera lectura"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Las opciones --ignore-corruption, --restart-on-corruption y --ignore-zero-blocks solo están permitidas para la operación de abrir."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "La opción --root-hash-signature solo puede usarse para la acción de abrir."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Las opciones --ignore-corruption y --restart-on-corruption no pueden utilizarse juntas."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Las opciones --panic-on-corruption y --restart-on-corruption no pueden utilizarse juntas."
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Tamaño de clave no válido."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "No se puede leer el fichero de claves %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "No se pueden leer %d «bytes» en el fichero de claves %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formato dado con tamaño de etiqueta %u, integridad interna %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<dispositivo_de_integridad>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<dispositivo_de_integridad> <nombre>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3316,403 +3404,408 @@ msgstr ""
 "<nombre> es el dispositivo que se va a crear bajo %s\n"
 "<dispositivo_de_integridad> es el dispositivo que contiene datos con etiquetas de integridad\n"
 
-#: src/integritysetup.c:507
-#, c-format
+#: src/integritysetup.c:520
+#, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Parámetros dm-integrity predefinidos de fábrica:\n"
 "\tAlgoritmo de la suma de comprobación: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Ruta al dispositivo de datos (si está separado)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Tamaño del diario"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Sectores de entrelazado"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Marca de agua del diario"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "por ciento"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Tiempo de escritura en el diario"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Número de sectores de 512 bytes por bit (modo mapa de bits)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Tiempo de «flush» del modo mapa de bits"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Tamaño de etiqueta (por sector)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Tamaño de sector"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Tamaño de los «buffers»"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algoritmo para la integridad de datos"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Tamaño de la clave de integridad de datos"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Leer la clave de integridad de un fichero"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algoritmo de integridad del diario"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Tamaño de la clave de integridad del diario"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Leer la clave de integridad del diario de un fichero"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algoritmo de cifrado del diario"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Tamaño de la clave de cifrado del diario"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Leer la clave de cifrado del diario de un fichero"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Modo de recuperación (sin diario, sin comprobación de etiqueta)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Utilice bitmap para seguir los cambios y desactive el diario para el dispositivo de integridad"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Recalcular las etiquetas iniciales automáticamente."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "No proteger superbloque con HMAC (núcleos antiguos)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Permitir recalcular volúmenes con claves HMAC (núcleos antiguos)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "La opción --integrity-recalculate solo puede usarse para la acción de abrir."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Las opciones --journal-size, --interleave-sectors, --sector-size, --tag-size y --no-wipe solo pueden utilizarse para la acción de dar formato."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "La especificación del tamaño del diario no es válida."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Deben especificarse las opciones tanto de fichero de claves como tamaño de clave."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "El algoritmo para la integridad debe especificarse si se va a utilizar clave de integridad."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Deben especificarse la opción del fichero de clave de integridad del diario y la del tamaño de la clave."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Debe especificarse el algoritmo de integridad del diario si va a utilizarse la clave de integridad del diario."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Deben especificarse la opción del fichero de la clave de cifrado del diario y la del tamaño de la clave."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Debe especificarse el algoritmo de cifrado del diario si va a utilizarse la clave de cifrado del diario."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Las opciones de recuperación y de modo mapa de bits son mutuamente excluyentes."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Las opciones de diario no pueden utilizarse en modo mapa de bits."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Las opciones de mapa de bits solo pueden utilizarse en el modo mapa de bits."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Recifrado ya en curso."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "No se puede abrir %s en exclusividad; el dispositivo está en uso."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "La reserva de memoria alineada ha fallado."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "No se puede leer el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Marcando el dispositivo LUKS1 %s como inutilizable."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Estableciendo el indicador de recifrado fuera de línea LUKS2 en el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "No se puede escribir en el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "No se puede escribir en el fichero de registro de recifrado."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "No se puede leer el fichero de registro de recifrado."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "El fichero de registro %s ya existe; reanudando el recifrado.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Activando dispositivo temporal utilizando cabecera LUKS antigua."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Activando dispositivo temporal utilizando cabecera LUKS nueva."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Fallo en la activación de los dispositivos temporales."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "No se ha podido establecer el desplazamiento de los datos."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "No se ha podido establecer el tamaño de los metadatos."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Se ha creado una nueva cabecera LUKS para el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Esta versión de cryptsetup-reencrypt no sabe manejar el nuevo tipo de «token» interno %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "No se ha podido leer los indicadores de activación en la cabecera de respaldo."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "No se ha podido escribir los indicadores de activación en la nueva cabecera."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "No se ha podido leer los requisitos en la cabecera de respaldo."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Se ha creado una copia de seguridad de la cabecera %s del dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "No se ha podido crear la copia de seguridad de las cabeceras LUKS."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "No se puede restaurar la cabecera %s en el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Se ha restaurado la cabecera %s en el dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "No se puede abrir el dispositivo LUKS temporal."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "No se puede obtener el tamaño del dispositivo."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Error de entrada/salida durante el recifrado."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "El UUID proporcionado no es válido."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "No se puede abrir el fichero de registro de recifrado."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "No hay ningún proceso de descifrado en marcha; el UUID proporcionado solo puede utilizarse para reanudar un proceso de descifrado suspendido."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Se han cambiado los parámetros pbkdf en la ranura de claves %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Tamaño de bloque de recifrado"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "No cambie la clave; no hay recifrado en la zona de datos"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Leer la clave (maestra) del volumen desde fichero"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Tiempo de iteración PBKDF2 para LUKS (en ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Utilizar entrada/salida directa para acceder a los dispositivos"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Utilizar fsync después de cada bloque"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Actualizar el fichero de registro después de cada bloque"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Utilizar solamente esta ranura (se desactivarán las demás)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Crear nueva cabecera en dispositivo no cifrado"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Descifrar el dispositivo de forma permanente (eliminar cifrado)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "El UUID utilizado para reanudar el descifrado"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Tipo de metadato LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPCIÓN...] <dispositivo>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "El recifrado va a cambiar: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "clave del volumen"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "nuevo algoritmo «hash» "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", nuevo algoritmo de cifrado: "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Hace falta argumento."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Solo se permiten valores entre 1 MiB y 64 MiB para el tamaño de bloque de recifrado."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "El tamaño máximo de reducción del dispositivo es de 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "La opción --new debe utilizarse conjuntamente con --reduce-device-size o --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "La opción --keep-key solamente puede utilizarse con --hash, --iter-time o --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "La opción --new no puede utilizarse conjuntamente con --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "La opción --decrypt es incompatible con los parámetros especificados."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "La opción --uuid solo está permitida conjuntamente con --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Tipo de luks no válido. Utilice uno de estos: 'luks', 'luks1' o 'luks2'."
 
@@ -3753,32 +3846,32 @@ msgstr "error desconocido"
 msgid "Command failed with code %i (%s).\n"
 msgstr "La orden ha fallado con código %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Ranura de claves %i creada."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Ranura de claves %i desbloqueada."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Ranura de claves %i eliminada."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "«Token» %i creado."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "«Token» %i eliminado."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3786,55 +3879,55 @@ msgstr ""
 "\n"
 "Limpieza interrumpida."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "AVISO: El dispositivo %s ya contiene una firma de partición '%s'.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
-msgstr "AVISO: El dispositivo %s ya contiene uan firma de superbloque '%s'.\n"
+msgstr "AVISO: El dispositivo %s ya contiene una firma de superbloque '%s'.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "No se han podido inicializar los sondeos de firma del dispositivo."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "No se ha podido efectuar «stat» sobre el dispositivo %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "El dispositivo %s está en uso. No se puede proceder con la operación de dar formato."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "No se ha podido abrir el fichero %s para lectura y escritura."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "La firma de la partición '%s' existente (desplazamiento: %<PRIi64> bytes) en el dispositivo %s va a limpiarse."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "La firma del superbloque '%s' existente (desplazamiento: %<PRIi64> bytes) en el dispositivo %s va a limpiarse."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "No se ha podido limpiar la firma del dispositivo."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "No se ha podido sondear el dispositivo %s para una firma."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3842,7 +3935,7 @@ msgstr ""
 "\n"
 "Recifrado interrumpido."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "No se puede comprobar la calidad de la contraseña: %s"
@@ -3861,46 +3954,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Fallo en la comprobación de la calidad de la contraseña: frase contraseña incorrecta (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Error al leer la frase contraseña desde el terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Verifique la frase contraseña: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "La frase contraseña no coincide."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "No se puede usar «offset» con entrada desde terminal."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Introduzca la frase contraseña: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Introduzca la frase contraseña de %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "No hay ninguna clave disponible con esa frase contraseña."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "No hay niguna ranura de claves utilizable disponible."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "No se puede abrir el fichero de claves %s para escritura."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "No se puede escribir en el fichero de claves %s."
@@ -3943,6 +4036,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "No se ha podido escribir el fichero JSON."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "No se ha podido desactivar el indicador del requisito de descifrado."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Parece que el dispositivo no necesita recuperación del recifrado.\n"
+#~ "¿Desea continuar de todos modos?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "ATENCIÓN: ¡Falta el directorio de bloqueo %s/%s!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Parámetros de tamaño inválido para un dispositivo «verity»."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "El algoritmo para la integridad debe especificarse si se va a utilizar clave de integridad."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Tamaño de clave incorrecto."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "El parámetro --refresh solo se permite con las órdenes de abrir y de refrescar."
 
index 63cd31e..19ce6a4 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup 1.7.0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2015-11-08 12:48+0200\n"
 "Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -19,71 +19,72 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 #, fuzzy
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Laitekuvaimen alustus epäonnistui, suoritetaan ei-root-käyttäjänä.\n"
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 #, fuzzy
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Laitekuvaimen alustus epäonnistui. Onko dm_mod-käyttöjärjestelmäydinmoduuli ladattu?\n"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 #, fuzzy
 msgid "Requested deferred flag is not supported."
 msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, fuzzy, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID laitteelle %s typistettiin.\n"
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr ""
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 #, fuzzy
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n"
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 #, fuzzy
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n"
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 #, fuzzy
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 #, fuzzy
 msgid "Requested data integrity options are not supported."
 msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 #, fuzzy
 msgid "Requested sector_size option is not supported."
 msgstr "Pyydetyt dmcrypt-suorituskykyvalitsimet eivät ole tuettuja.\n"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 #, fuzzy
 msgid "Discard/TRIM is not supported."
 msgstr "Tiivistealgoritmia %s ei tueta.\n"
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -132,7 +133,7 @@ msgstr "RNG-salaustaustaohjelman alustus epäonnistui.\n"
 msgid "Cannot initialize crypto backend."
 msgstr "Salaustaustaohjelman alustus epäonnistui.\n"
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, fuzzy, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Tiivistealgoritmia %s ei tueta.\n"
@@ -147,7 +148,7 @@ msgstr "Avainkäsittelyvirhe (käytetään tiivistealgoritmia %s).\n"
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Laitetyypin määritteleminen epäonnistui. Laitteen yhteensopimaton aktivointi?\n"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 #, fuzzy
 msgid "This operation is supported only for LUKS device."
 msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n"
@@ -157,7 +158,7 @@ msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n"
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n"
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 #, fuzzy
 msgid "All key slots full."
 msgstr "Kaikki avainvälit ovat täynnä.\n"
@@ -172,7 +173,7 @@ msgstr "Avainväli %d on virheellinen, valitse väliltä 0 ... %d.\n"
 msgid "Key slot %d is full, please select another one."
 msgstr "Avainväli %d on täynnä, valitse joku toinen.\n"
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
@@ -182,7 +183,8 @@ msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
 msgid "Header detected but device %s is too small."
 msgstr "Otsake havaittu, mutta laite %s on liian pieni.\n"
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 #, fuzzy
 msgid "This operation is not supported for this device type."
 msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n"
@@ -191,18 +193,13 @@ msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n"
 msgid "Illegal operation with reencryption in-progress."
 msgstr ""
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, fuzzy, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Tukematon LUKS-versio %d.\n"
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-#, fuzzy
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "UUID ei ole tuettu tälle laitetyypille.\n"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, fuzzy, c-format
 msgid "Device %s is not active."
 msgstr "Laite %s ei ole aktiivinen.\n"
@@ -217,7 +214,7 @@ msgstr "Salauslaitteen %s perustana oleva laite hävisi.\n"
 msgid "Invalid plain crypt parameters."
 msgstr "Virheelliset tavalliset salausparametrit.\n"
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 #, fuzzy
 msgid "Invalid key size."
 msgstr "Virheellinen avainkoko.\n"
@@ -227,13 +224,18 @@ msgstr "Virheellinen avainkoko.\n"
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID ei ole tuettu tälle laitetyypille.\n"
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+#, fuzzy
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "UUID ei ole tuettu tälle laitetyypille.\n"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 #, fuzzy
 msgid "Unsupported encryption sector size."
 msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n"
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 #, fuzzy
 msgid "Device size is not aligned to requested sector size."
 msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
@@ -279,8 +281,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, fuzzy, c-format
 msgid "Device %s is too small."
 msgstr "Laite %s on liian pieni.\n"
@@ -315,17 +317,17 @@ msgstr "Kohteen LOOPAES pohjustus ilman laitetta epäonnistui.\n"
 msgid "Can't format VERITY without device."
 msgstr "Kohteen VERITY pohjustus ilman laitetta epäonnistui.\n"
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, fuzzy, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Tukematon VERITY-tiivistetyyppi %d.\n"
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 #, fuzzy
 msgid "Unsupported VERITY block size."
 msgstr "Tukematon VERITY-lohkokoko.\n"
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 #, fuzzy
 msgid "Unsupported VERITY hash offset."
 msgstr "Tukematon VERITY-tiivistesiirros.\n"
@@ -357,254 +359,254 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Tuntematon salauslaitetyyppi %s pyydetty.\n"
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, fuzzy, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Otsakkeen pyyhkiminen pois laitteesta %s epäonnistui.\n"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, fuzzy, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Otsakkeen pyyhkiminen pois laitteesta %s epäonnistui.\n"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Laitteen %s lukeminen epäonnistui.\n"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Avaintiedoston avaus epäonnistui.\n"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Laitteen %s lukeminen epäonnistui.\n"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 #, fuzzy
 msgid "Cannot resize loop device."
 msgstr "Silmukkalaitteen koon muuttaminen epäonnistui.\n"
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Haluatko todella vaihtaa laitteen UUID-tunnistetta?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 #, fuzzy
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Varmuuskopiotiedosto ei sisällä kelvollista LUKS-otsaketta.\n"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, fuzzy, c-format
 msgid "Volume %s is not active."
 msgstr "Taltio %s ei ole käytössä.\n"
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, fuzzy, c-format
 msgid "Volume %s is already suspended."
 msgstr "Taltio %s on jo keskeytetty.\n"
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, fuzzy, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Keskeyttämistä ei tueta laitetyypille %s.\n"
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, fuzzy, c-format
 msgid "Error during suspending device %s."
 msgstr "Virhe keskeytettäessä laitetta %s.\n"
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, fuzzy, c-format
-msgid "Volume %s is not suspended."
-msgstr "Taltiota %s ei ole keskeytetty.\n"
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, fuzzy, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Jatkamista ei tueta laiteelle %s.\n"
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, fuzzy, c-format
 msgid "Error during resuming device %s."
 msgstr "Virhe jatkettaessa laitteella %s.\n"
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, fuzzy, c-format
+msgid "Volume %s is not suspended."
+msgstr "Taltiota %s ei ole keskeytetty.\n"
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 #, fuzzy
 msgid "Volume key does not match the volume."
 msgstr "Taltioavain ei täsmää taltion kanssa.\n"
 
 #  Volume key tarkoittaa yleensä äänenvoimakkuussäädintä, ei välttämättä tässä.
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 #, fuzzy
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Avainvälin lisäys epäonnistui, kaikki välit on otettu pois käytöstä ja yhtään taltioavainta ei ole tarjottu.\n"
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 #, fuzzy
 msgid "Failed to swap new key slot."
 msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n"
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, fuzzy, c-format
 msgid "Key slot %d is invalid."
 msgstr "Avainväli %d on virheellinen.\n"
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, fuzzy, c-format
 msgid "Keyslot %d is not active."
 msgstr "Avainväli %d ei ole käytössä.\n"
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 #, fuzzy
 msgid "Device header overlaps with data area."
 msgstr "Tälle salasanalauseelle ei ole saatavissa laiteotsaketta.\n"
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr ""
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n"
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 #, fuzzy
 msgid "Device type is not properly initialized."
 msgstr "Laitetyyppi ei ole alustettu oikein.\n"
 
-#: lib/setup.c:4171
-#, fuzzy, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n"
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, fuzzy, c-format
 msgid "Device %s already exists."
 msgstr "Laite %s on jo olemassa.\n"
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, fuzzy, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n"
+
+#: lib/setup.c:4350
 #, fuzzy
 msgid "Incorrect volume key specified for plain device."
 msgstr "Virheellinen taltioavain määritelty tavalliselle laitteelle.\n"
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 #, fuzzy
 msgid "Incorrect root hash specified for verity device."
 msgstr "Virheellinen root-tiiviste määritelty verity-laitteelle.\n"
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr ""
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 #, fuzzy
 msgid "Failed to load key in kernel keyring."
 msgstr "Avaintiedoston avaus epäonnistui.\n"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, fuzzy, c-format
 msgid "Device %s is still in use."
 msgstr "Laite %s on yhä käytössä.\n"
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, fuzzy, c-format
 msgid "Invalid device %s."
 msgstr "Virheellinen laite %s.\n"
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 #, fuzzy
 msgid "Volume key buffer too small."
 msgstr "Taltioavainpuskuri on liian pieni.\n"
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 #, fuzzy
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Taltioavaimen nouto tavalliselle laitteelle epäonnistui.\n"
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Virheellinen root-tiiviste määritelty verity-laitteelle.\n"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, fuzzy, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Tätä toimintoa ei tueta %s-salauslaitteelle.\n"
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 #, fuzzy
 msgid "Dump operation is not supported for this device type."
 msgstr "Dump-toimintoa ei tueta tälle laitetyypille.\n"
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, fuzzy, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Laitteen %s pohjustus epäonnistui, koska se on yhä käytössä.\n"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr ""
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr ""
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, fuzzy, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 #, fuzzy
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n"
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, fuzzy, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -638,8 +640,8 @@ msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Pyydetyn avaintiedostosiirrososoitteen etsintä epäonnistui.\n"
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 #, fuzzy
 msgid "Out of memory while reading passphrase."
 msgstr "Muisti loppui luettaessa salasanalausetta.\n"
@@ -663,53 +665,58 @@ msgstr "Avaintiedoston enimmäiskoko ylitettiin.\n"
 msgid "Cannot read requested amount of data."
 msgstr "Pyydetyn tietomäärän lukeminen epäonnistui.\n"
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Laite %s ei ole olemassa tai pääsy siihen on kielletty.\n"
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, fuzzy, c-format
 msgid "Device %s is not compatible."
 msgstr "Laite %s ei ole aktiivinen.\n"
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, fuzzy, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Laite %s on liian pieni. (LUKS vaatii vähintään %<PRIu64> tavua.)\n"
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, fuzzy, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Laitteen %s käyttö epäonnistui, koska se on jo käytössä (jo kuvattu tai liitetty).\n"
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, fuzzy, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Laitteeseen %s kirjoittaminen epäonnistui, pääsy kielletty.\n"
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, fuzzy, c-format
 msgid "Cannot get info about device %s."
 msgstr "Tietojen hakeminen laitteesta %s epäonnistui.\n"
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 #, fuzzy
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Silmukkalaitteen käyttö epäonnistui, suoritetaan ei-root-käyttäjänä.\n"
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 #, fuzzy
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Silmukkalaitteeseen liittyminen epäonnistui (vaaditaan silmukkalaite autoclear-lipulla).\n"
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, fuzzy, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Pyydetty siirrososoite on laitteen %s todellisen koon ulkopuolella.\n"
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, fuzzy, c-format
 msgid "Device %s has zero size."
 msgstr "Laitteen %s koko on nolla.\n"
@@ -785,7 +792,7 @@ msgstr ""
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
 msgstr ""
 
 #: lib/utils_device_locking.c:119
@@ -793,8 +800,8 @@ msgstr ""
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr ""
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 #, fuzzy
 msgid "Cannot seek to device offset."
 msgstr "Laitteen siirrososoitteen etsintä epäonnistui.\n"
@@ -823,8 +830,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, fuzzy, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Laitteeseen %s kirjoittaminen epäonnistui, pääsy kielletty.\n"
@@ -846,12 +853,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Siirräntävirhe salattaessa avainväliä.\n"
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, fuzzy, c-format
 msgid "Cannot open device %s."
 msgstr "Laitteen %s avaus epäonnistui.\n"
@@ -873,44 +880,44 @@ msgstr "Laite %s on liian pieni. (LUKS vaatii vähintään %<PRIu64> tavua.)\n"
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS-avainväli %u on virheellinen.\n"
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, fuzzy, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, fuzzy, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Pyydetty otsakevarmuuskopiotiedosto %s on jo olemassa.\n"
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, fuzzy, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n"
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, fuzzy, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s kirjoittaminen epäonnistui.\n"
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Varmuuskopiotiedosto ei sisällä kelvollista LUKS-otsaketta.\n"
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, fuzzy, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s avaus epäonnistui.\n"
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, fuzzy, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s lukeminen epäonnistui.\n"
@@ -933,7 +940,7 @@ msgstr "ei sisällä LUKS-otsaketta. Otsakkeen korvaaminen voi tuhota tietoja tu
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "sisältää jo LUKS-otsakkeen. Otsakkeen korvaaminen tuhoaa olemassaolevat avainvälit."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -946,108 +953,108 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Ei-vakio avainkoko, manuaalinen korjaus pyydetty.\n"
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 #, fuzzy
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Ei-vakiot avainvälitasaukset, manuaalinen korjaus pyydetty.\n"
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 #, fuzzy
 msgid "Repairing keyslots."
 msgstr "Korjataan avainvälit.\n"
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, fuzzy, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Avainväli %i: siirrososoite korjattu (%u -> %u).\n"
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, fuzzy, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Avainväli %i: raidat korjattu (%u -> %u).\n"
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, fuzzy, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Avainväli %i: valeosiotunniste.\n"
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, fuzzy, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Avainväli %i: satunnaisarvosiemen tuhottu.\n"
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 #, fuzzy
 msgid "Writing LUKS header to disk."
 msgstr "Kirjoitetaan LUKS-otsake levylle.\n"
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Korjaus epäonnistui."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, fuzzy, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Pyydetty LUKS-tiiviste %s ei ole tuettu.\n"
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 #, fuzzy
 msgid "No known problems detected for LUKS header."
 msgstr "Tuntemattomat pulmat havaittu LUKS-otsakkeelle.\n"
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, fuzzy, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Virhe LUKS-otsakkeen päivityksen aikana laitteessa %s.\n"
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, fuzzy, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Virhe luettaessa uudelleen LUKS-otsaketta päivityksen jälkeen laitteessa %s.\n"
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 #, fuzzy
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Tietosiirrososoitteen irrotetulle LUKS-otsakkeelle on oltava joko 0 tai suurempi kuin otsakekoko (%d sektoria).\n"
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 #, fuzzy
 msgid "Wrong LUKS UUID format provided."
 msgstr "Väärä LUKS UUID-muoto tarjottu.\n"
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 #, fuzzy
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "LUKS-otsakkeen luominen epäonnistui: satunnaisarvosiemenen lukeminen epäonnistui.\n"
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, fuzzy, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "LUKS-otsakkeen luominen epäonnistui: otsaketiiviste epäonnistui (käytettäen tiivistettä %s).\n"
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, fuzzy, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Avainväli %d aktiivinen, puhdista ensimmäinen.\n"
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, fuzzy, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Avainvälin %d materiaali sisältää liian vähän raitoja. Otsaketta on käsitelty?\n"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Avainkäsittelyvirhe (käytetään tiivistealgoritmia %s).\n"
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, fuzzy, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Avainväli %d on virheellinen, valitse avainväli välillä 0 ... %d.\n"
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, fuzzy, c-format
 msgid "Cannot wipe device %s."
 msgstr "Laitteen %s pyyhkiminen tyhjäksi epäonnistui.\n"
@@ -1086,12 +1093,12 @@ msgstr "TCRYPT-salasanalauseen enimmäispituus (%d) ylitettiin.\n"
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2-tiivistealgoritmi %s ei ole käytettävissä, ohitetaan.\n"
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 #, fuzzy
 msgid "Required kernel crypto interface not available."
 msgstr "Pyydetty ydinsalauskäyttöliittymä ei ole käytettävissä.\n"
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 #, fuzzy
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Varmista, että algif_skcipher-käyttöjärjestelmäydinmoduuli on ladattu.\n"
@@ -1106,167 +1113,180 @@ msgstr "Aktivointia ei tueta sektorikoolle %d.\n"
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Käyttöjärjestelmäydin ei tue aktivointia tälle TCRYPT-perinnetilassa.\n"
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, fuzzy, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Aktivoidaan TCRYPT-järjestelmäsalaus osiolle %s.\n"
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 #, fuzzy
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Käyttöjärjestelmäydin ei tue TCRYPT -yhteensopivaa kuvausta.\n"
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Tätä toimintoa ei tueta ilman TCRYPT-otsakelatausta."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Tukematon LUKS-versio %d.\n"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "UUID ei ole tuettu tälle laitetyypille.\n"
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Tätä toimintoa ei tueta %s-salauslaitteelle.\n"
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Virheellinen avainkoko.\n"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Verity-laite %s ei käytä paikallista levyotsaketta.\n"
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, fuzzy, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Laite %s ei ole kelvollinen VERITY-laite.\n"
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, fuzzy, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Tukematon VERITY-versio %d.\n"
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 #, fuzzy
 msgid "VERITY header corrupted."
 msgstr "VERITY-otsake rikkinäinen.\n"
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, fuzzy, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Väärä VERITY UUID-muoto tarjottu laitteessa %s.\n"
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, fuzzy, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Virhe verity-otsakkeen päivityksen aikana laitteessa %s.\n"
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "Tiivistealgoritmia %s ei tueta.\n"
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n"
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n"
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 #, fuzzy
 msgid "Verity device detected corruption after activation."
 msgstr "Verity-laite havaitsi rikkoutumisen aktivoinnin jälkeen.\n"
@@ -1276,47 +1296,42 @@ msgstr "Verity-laite havaitsi rikkoutumisen aktivoinnin jälkeen.\n"
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Vapaa-aluetta ei ole nollattu sijainnissa %<PRIu64>.\n"
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 #, fuzzy
 msgid "Device offset overflow."
 msgstr "Laitesiirrososoitteen ylivuoto.\n"
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, fuzzy, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Todennus epäonnistui sijainnissa %<PRIu64>.\n"
 
-#: lib/verity/verity_hash.c:276
-#, fuzzy
-msgid "Invalid size parameters for verity device."
-msgstr "Virheelliset kokoparametrit verity-laitteelle.\n"
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 #, fuzzy
 msgid "Verification of data area failed."
 msgstr "Data-alueen todentaminen epäonnistui.\n"
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 #, fuzzy
 msgid "Verification of root hash failed."
 msgstr "Root-tiivisteen todentaminen epäonnistui.\n"
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 #, fuzzy
 msgid "Input/output error while creating hash area."
 msgstr "Syöte/tulostevirhe luotaessa tiivistealuetta.\n"
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 #, fuzzy
 msgid "Creation of hash area failed."
 msgstr "Tiivistealueen luominen epäonnistui.\n"
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, fuzzy, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "VAROITUS: Käyttöjärjestelmäydin ei voi aktivoida laitetta, jos lohkokoko ylittää sivukoon (%u).\n"
@@ -1325,56 +1340,64 @@ msgstr "VAROITUS: Käyttöjärjestelmäydin ei voi aktivoida laitetta, jos lohko
 msgid "Failed to allocate RS context."
 msgstr ""
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 #, fuzzy
 msgid "Failed to allocate buffer."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr ""
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, fuzzy, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Tilapäisen avainsäiliön avaaminen epäonnistui.\n"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n"
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Käyttöjärjestelmäydin ei tule dm-verity -yhteensopivaa kuvausta.\n"
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, fuzzy, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n"
@@ -1394,115 +1417,115 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Laite %s on liian pieni.\n"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, fuzzy, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 #, fuzzy
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Tietosiirrososoite tai avainkoko eroaa laitteessa ja varmuuskopiossa, palautus epäonnistui.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 #, fuzzy
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Tietosiirrososoite tai avainkoko eroaa laitteessa ja varmuuskopiossa, palautus epäonnistui.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, fuzzy, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Laite %s %s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 #, fuzzy
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "ei sisällä LUKS-otsaketta. Otsakkeen korvaaminen voi tuhota tietoja tuossa laitteessa."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 #, fuzzy
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "sisältää jo LUKS-otsakkeen. Otsakkeen korvaaminen tuhoaa olemassaolevat avainvälit."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Avainväli %d on todennettu.\n"
@@ -1534,7 +1557,7 @@ msgstr ""
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr ""
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 #, fuzzy
 msgid "Unable to move keyslot area."
 msgstr "Avaintiedoston avaus epäonnistui.\n"
@@ -1572,301 +1595,313 @@ msgstr ""
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Tukematon LUKS-versio %d.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Vapaa-aluetta ei ole nollattu sijainnissa %<PRIu64>.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Pääsy tilapäiseen avainsäiliölaitteeseen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Tilapäisen avainsäiliön avaaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Uuden avainvälin vaihtaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Laitteen %s käyttö epäonnistui, koska se on jo käytössä (jo kuvattu tai liitetty).\n"
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 #, fuzzy
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Älä vaihda avainta, yhtään data-aluetta ei ole salattu uudelleen."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "Laite %s ei ole aktiivinen.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Uudelleensalauslokitiedoston kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "Korjaus epäonnistui."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "poista kaikki avainvälit (poista salausavain)"
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Salaustaustaohjelman alustus epäonnistui.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n"
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Avainväli on virheellinen."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, fuzzy, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 #, fuzzy
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Salasanalauseiden todennus epäonnistui ei-tty-syötteissä.\n"
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 #, fuzzy
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 #, fuzzy
 msgid "No known cipher specification pattern detected."
 msgstr "Havaittu tuntematon salakirjoitusmenetelmämäärittelymalli.\n"
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "VAROITUS: Parametri --hash ohitetaan tavallisessa tilassa kun avaintiedosto on määritelty.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "VAROITUS: Valitsin --keyfile-size ohitetaan , lukukoko on sama kuin salausavaimen koko.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 #, fuzzy
 msgid "Option --key-file is required."
 msgstr "Vaaditaan valitsin --key-file.\n"
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr ""
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr ""
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 #, fuzzy
 msgid "Invalid PIM value: 0."
 msgstr "Virheellinen laite %s.\n"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr ""
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 #, fuzzy
 msgid "No device header detected with this passphrase."
 msgstr "Tälle salasanalauseelle ei ole saatavissa laiteotsaketta.\n"
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1876,199 +1911,213 @@ msgstr ""
 "joka sallii pääsyn salatulle osiolle ilman salasanaa.\n"
 "Tämä vedos pitäisi aina tallentaa salattuna turvallisessa paikasssa."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 #, fuzzy
 msgid "Benchmark interrupted."
 msgstr "koestussalaus"
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 #, fuzzy
 msgid "Result of benchmark is not reliable."
 msgstr "Suorituskykytestin tulos ei ole luotettava.\n"
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Testit käyttävät vain muistia ylimalkaan (ei tallennussiirtos).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, fuzzy, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Algoritmi | Avain |  Salaus |  Salauksen purku\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Salaus %s ei ole käytettävissä.\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 #, fuzzy
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Algoritmi | Avain |  Salaus |  Salauksen purku\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "Ei käytössä"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Kirjoita poistettava salasanalause: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Kirjoita poistettava salasanalause: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Kirjoita salasanalause avainvälille %u: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Yritetäänkö todella korjata LUKS-laiteotsake?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, fuzzy, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Tilapäisen LUKS-laitteen avaaminen epäonnistui.\n"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 #, fuzzy
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Tukematon LUKS-versio %d.\n"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, fuzzy, c-format
 msgid "Cannot create header file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 #, fuzzy
 msgid "No known integrity specification pattern detected."
 msgstr "Havaittu tuntematon salakirjoitusmenetelmämäärittelymalli.\n"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, fuzzy, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Kohteen %s käyttö paikallisena levyotsakkeena epäonnistui.\n"
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Tämä korvaa tiedot kohteella %s peruuttamattomasti."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 #, fuzzy
 msgid "Failed to set pbkdf parameters."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 #, fuzzy
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Pienennetty tietosiirrososoite sallitaan vain irrotetulle LUKS-otsakkeelle.\n"
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, fuzzy, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Avainväli %d valittu poistoa varten.\n"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Tämä on viimeinen avainväli. Laite tulee käyttökelvottomaksi tämän avaimen poistamisen jälkeen."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Kirjoita mikä tahansa jäljellä oleva salasanalause: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Kirjoita poistettava salasanalause: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Kirjoita uusi salasanalause avainvälille: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Kirjoita mikä tahansa olemassa oleva salasanalause: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Kirjoita vaihdettava salasanalause: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Kirjoita uusi salasanalause: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 #, fuzzy
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Kirjoita salasanalause avainvälille %u: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 #, fuzzy
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Tuetaan vain yhtä laiteargumenttia isLuks-toiminnolle.\n"
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -2079,12 +2128,12 @@ msgstr ""
 "joka sallii pääsyn salatulle osiolle ilman salasanaa.\n"
 "Tämä vedos pitäisi aina tallentaa salattuna turvallisessa paikasssa."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Avainväli %d ei ole käytössä.\n"
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -2094,32 +2143,42 @@ msgstr ""
 "joka sallii pääsyn salatulle osiolle ilman salasanaa.\n"
 "Tämä vedos pitäisi aina tallentaa salattuna turvallisessa paikasssa."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s ei ole LUKS-laite."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 #, fuzzy
 msgid "Option --header-backup-file is required."
 msgstr "Vaaditaan valitsin --header-backup-file.\n"
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, fuzzy, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s ei ole LUKS-laite."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, fuzzy, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Jatkamista ei tueta laiteelle %s.\n"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, fuzzy, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Tunnistamaton metatietolaitetyyppi %s.\n"
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 #, fuzzy
 msgid "Command requires device and mapped name as arguments."
 msgstr "Komento vaatii laitteen ja kuvausnimen argumenttina.\n"
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2128,96 +2187,96 @@ msgstr ""
 "Tämä toiminto poistaa kaikki avainvälit laitteesta %s.\n"
 "Laite tulee käyttökelvottomaksi tämän toiminnon jälkeen."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, fuzzy, c-format
 msgid "Device is already %s type."
 msgstr "Laite %s on jo olemassa.\n"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, fuzzy, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Tätä toimintoa ei tueta %s-salauslaitteelle.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr ""
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, fuzzy, c-format
 msgid "Token %d is invalid."
 msgstr "Avainväli %d on virheellinen.\n"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr ""
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, fuzzy, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, fuzzy, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, fuzzy, c-format
 msgid "Token %d is not in use."
 msgstr "Avainväli %d ei ole käytössä.\n"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 #, fuzzy
 msgid "Failed to import token from file."
 msgstr "Avaintiedoston avaus epäonnistui.\n"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, fuzzy, c-format
 msgid "Failed to get token %d for export."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, fuzzy, c-format
 msgid "Invalid token operation %s."
 msgstr "Virheellinen avainkoko %d.\n"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Laite %s ei ole kelvollinen LUKS-laite.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2226,244 +2285,253 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Virheellinen laite %s.\n"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Tätä toimintoa tuetaan vain LUKS-laitteelle.\n"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Pyydetty otsakevarmuuskopiotiedosto %s on jo olemassa.\n"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Otsakevarmuuskopiotiedoston %s luominen epäonnistui.\n"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "Älä vaihda avainta, yhtään data-aluetta ei ole salattu uudelleen."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 #, fuzzy
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Avaintiedostoa voidaan käyttää vain valitsimen --key-slot kanssa tai täsmälleen yhden avainvälin ollessa aktiivisena.\n"
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Kirjoita salasanalause avainvälille %u: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Kirjoita salasanalause avainvälille %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "Komento vaatii laitteen ja kuvausnimen argumenttina.\n"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr ""
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "Lokitiedosto %s on olemassa, aloitetaan salaus uudelleen.\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<laite> [--type <tyyppi>] [<nimi>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 #, fuzzy
 msgid "open device as <name>"
 msgstr "avaa laite kuvauksena <nimi>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nimi>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "sulje laite (poista kuvaus)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "muuta käytössä olevan laitteen kokoa"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "näytä laitetila"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr ""
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "koestussalaus"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<laite>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "yritä korjata levyn sisäiset metatiedot"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "lisää avain LUKS-laitteeseen"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "poista kaikki avainvälit (poista salausavain)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr ""
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<laite> [<uusi avaintiedosto>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "pohjustaa LUKS-laitteen"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "lisää avain LUKS-laitteeseen"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<laite> [<avaintiedosto>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "poistaa tarjotun avaimen tai avaintiedoston LUKS-laitteesta"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "vaihtaa LUKS-laitteen tarjotun avaimen tai avaintiedoston"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<laite> <avainväli>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "pyyhkäisee pois avaimen numerolla <avainväli> LUKS-laitteesta"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "tulostaa LUKS-laitteen UUID-tunnuksen"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "testaa <laite> LUKS-osio-otsakkeesta"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "vedosta LUKS-osiotiedot"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "vedosta TCRYPT-laitetiedot"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "vedosta TCRYPT-laitetiedot"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 #, fuzzy
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Keskeytä LUKS-laite ja pyyhi pois avain (kaikki siirräntäliitännät jäädytetään)."
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 #, fuzzy
 msgid "Resume suspended LUKS device"
 msgstr "Aloita uudelleen pysäytetty LUKS-laite."
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Varmuuskopioi LUKS-laiteotsake ja avainvälit"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Palauta LUKS-laiteotsake ja avainvälit"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2471,7 +2539,7 @@ msgstr ""
 "\n"
 "<toiminto> on yksi seuraavista:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2484,7 +2552,7 @@ msgstr ""
 "\topen: luo (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
 "\tclose: poista (plainClose), luksClose, loopaesClose, tcryptClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2499,14 +2567,14 @@ msgstr ""
 "<avainväli> on LUKS-avainväli muokattavaksi\n"
 "<avaintiedosto> valinnainen avaintiedosto uudelle avaimelle luksAddKey-toimintoa varten\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2522,7 +2590,7 @@ msgstr ""
 "\tsalasanalauseen enimmäispituus %d (merkkiä)\n"
 "PBKDF2-iteroinnin enimmäisaika LUKS-avainvälille: %d (millisekuntia)\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2537,480 +2605,488 @@ msgstr ""
 "\tplain-tyyppi: %s, Avain: %d bittiä, Salasanatiivistys: %s\n"
 "\tLUKS1: %s, Avain: %d bittiä, LUKS-otsaketiivistys: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: vaatii %s argumentteina"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Näytä tämä opastesanoma"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Näytä lyhyt käyttöopaste"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Tulosta pakkausversio"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Opastevalitsimet:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Näyttää yksityiskohtaisemmat virheilmoitukset"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Näytä vianjäljityssanomat"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 #, fuzzy
 msgid "Show debug messages including JSON metadata"
 msgstr "Näytä vianjäljityssanomat"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Salakirjoitusmenetelmä, jota käytetään salaamaan levy (katso /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Tiivisteavain, jota käytetään salausavaimen luomiseen salasanalauseesta"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Todentaa salasanalauseen kysymällä kahdesti"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 #, fuzzy
 msgid "Read the key from a file"
 msgstr "Lue avain tiedostosta."
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Lue taltion (pää)avain tiedostosta."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 #, fuzzy
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Vedosta taltion (pää)avain eikä avainvälien tiedot."
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Salausavaimen koko"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITTIÄ"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Avaintiedostosta luettavat rajat"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "tavua"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Avaintiedostossa ohitettavien tavujen määrä"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Äskettäin lisätystä avaintiedostosta luetut rajat"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Ohitettu tavumäärä äskettäin lisätyssä avaintiedostossa"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Välinumero uudelle avaimelle (oletus on ensimmäinen vapaa)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Laitteen koko"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTORIA"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Käytä vain määriteltyä laitekokoa (ohita laitteen loppu). VAARALLINEN!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Alkusiirrososoite taustalaitteessa"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Kuinka monta salaustietojen sektoria ohitetaan alussa"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Luo kirjoitussuojattu kuvaus"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Älä pyydä vahvistusta"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Aikakatkaisu vuorovaikutteiselle salasanalausekyselylle (sekunteina)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "s"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Kuinka usein salasanasyötettä voidaan yrittää uudelleen"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Tasaa tietosisältö osoitteessa <n> sektorirajoihin - kohdetta luksFormat varten"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 #, fuzzy
 msgid "File with LUKS header and keyslots backup"
 msgstr "Tiedosto LUKS-otsakkeella ja avainvälien varmuuskopiolla."
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 #, fuzzy
 msgid "Use /dev/random for generating volume key"
 msgstr "Käytä /dev/random taltioavaimen synnyttämiseen."
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 #, fuzzy
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Käytä /dev/urandom taltioavaimen synnyttämiseen."
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 #, fuzzy
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Jaa laite toisen ei-päällekkäisen salaussegmentin kanssa."
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 #, fuzzy
 msgid "UUID for device to use"
 msgstr "UUID laitteelle käytettäväksi."
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 #, fuzzy
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Salli hylkäys(lempinimeltään TRIM)-pyynnöt laitteelle."
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 #, fuzzy
 msgid "Device or file with separated LUKS header"
 msgstr "Laite tai tiedosto erillisellä LUKS-otsakkeella."
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 #, fuzzy
 msgid "Do not activate device, just check passphrase"
 msgstr "Älä aktivoi laitetta, tarkista vain salasanalauseke."
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 #, fuzzy
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Käytä piilotettua otsaketta (piilotettu TCRYPT-laite)."
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 #, fuzzy
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Laite on järjestelmä-TCRYPT-levyasema (alkulatausohjelmalla)."
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 #, fuzzy
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Käytä (toissijaista) TCRYPT-varmuuskopio-otsaketta."
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 #, fuzzy
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle."
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 #, fuzzy
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle."
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 #, fuzzy
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Tutkinta myös VeraCrypt-yhteensopivalle laitteelle."
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Laitemetatietojen tyyppi: luks, plain, loopaes, tcrypt."
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 #, fuzzy
 msgid "Disable password quality check (if enabled)"
 msgstr "Ota pois käytöstä salasanan laatutarkistus (jos käytössä)."
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 #, fuzzy
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Käytä dm-crypt same_cpu_crypt-suorituskyky-yhteensopivuusvalitsinta."
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 #, fuzzy
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Käytä dm-crypt submit_from_crypt_cpus-suorituskyky-yhteensopivuusvalitsinta."
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 #, fuzzy
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "PBKDF2-iterointiaika kohteelle LUKS (millisekunneissa)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 #, fuzzy
 msgid "kilobytes"
 msgstr "tavua"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr ""
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 #, fuzzy
 msgid "Disable locking of on-disk metadata"
 msgstr "yritä korjata levyn sisäiset metatiedot"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr ""
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 #, fuzzy
 msgid "Set label for the LUKS2 device"
 msgstr "pohjustaa LUKS-laitteen"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 #, fuzzy
 msgid "Read or write the json from or to a file"
 msgstr "Lue avain tiedostosta."
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 #, fuzzy
 msgid "LUKS2 header keyslots area size"
 msgstr "Tiedosto LUKS-otsakkeella ja avainvälien varmuuskopiolla."
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 #, fuzzy
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Salausavaimen koko"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Poista laitteen salaus pysyvästi (poista salaus)"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Poista laitteen salaus pysyvästi (poista salaus)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Pienennä datalaitekokoa (siirrä datasiirrososoitetta). VAARALLINEN!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "Uudelleensalauslohkon koko"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "Uudelleensalauslohkon koko"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[VALITSIN...] <toiminto> <toimintokohtainen>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argumentti <toiminto> puuttuu."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Tuntematon toiminto."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "Valitsin --shared sallitaan vain pelkän laitteen avaukseen.\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Valitsin --shared sallitaan vain pelkän laitteen avaukseen.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr ""
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -3019,284 +3095,284 @@ msgstr ""
 "Valitsin --key-size sallitaan vain muodoille luksFormat, open ja benchmark.\n"
 "Käytä avaintiedostosta lukemisen rajoittamiseksi valitsinta --keyfile-size=(tavua)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr ""
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Valitsin --uuid sallitaan vain luksFormat-muodolle ja luksUUID-muodolle."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Valitsin --test-passphrase sallitaan vain LUKS- ja TCRYPT-laitteiden avaamiseen.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Avainkoon on oltava 8-bitin monikerta"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Avainväli on virheellinen."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 #, fuzzy
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Valitsin --key-file on ensisijainen määritellylle avaintiedostoargumentille.\n"
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Valitsimelle ei sallita negatiivista numeroa."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 #, fuzzy
 msgid "Only one --key-file argument is allowed."
 msgstr "Vain yksi --use-[u]random -valitsin on sallittu."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Vain yksi --use-[u]random -valitsin on sallittu."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Valitsin --use-[u]random sallitaan vain luksFormat-muodolle."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Valitsin --uuid sallitaan vain luksFormat-muodolle ja luksUUID-muodolle."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr ""
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 #, fuzzy
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 #, fuzzy
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Valitsin --align-payload sallitaan vain luksFormat-muodolle."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Valitsinta --skip tuetaan vain plain- ja loopaes-laitteiden avaamiseen.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Valitsinta --offset tuetaan vain plain- ja loopaes-laitteiden avaamiseen.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Valitsinta --tcrypt-hidden, --tcrypt-system tai --tcrypt-backup tuetaan vain TCRYPT-laiteeelle.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Valitsinta --tcrypt-hidden ei voida yhdistää valitsimeen --allow-discards.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Valitsinta --veracrypt tuetaan vain TCRYPT-laiteeelle.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Tätä toimintoa ei tueta tälle laitetyypille.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr ""
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "Valitsinta --keep-key voidaan käyttää vain valitsimen --hash tai --iter-time kanssa."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr ""
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Maksimi laitepienennyskoko on 64 mebitavua."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "Laitesiirrososoitteen ylivuoto.\n"
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Pienennyskoon on oltava 512-tavuisen sektorin monikerta."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr ""
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 #, fuzzy
 msgid "Invalid salt string specified."
 msgstr "Määritelty virheellinen satunnaisarvosiemenmerkkijono.\n"
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, fuzzy, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Tiivistevedoksen %s luominen kirjoittamista varten epäonnistui.\n"
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, fuzzy, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Tiivistevedoksen %s luominen kirjoittamista varten epäonnistui.\n"
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 #, fuzzy
 msgid "Invalid root hash string specified."
 msgstr "Virheellinen root-tiivistemerkkijono määritelty.\n"
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Virheellinen laite %s.\n"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Avaintiedoston %s lukeminen epäonnistui.\n"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<data_laite> <tiiviste_laite>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "pohjusta laite"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<data_laite> <tiiviste_laite> <root_tiiviste>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "todenna laite"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 #, fuzzy
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<data_laite> <tiiviste_laite> <root_tiiviste>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "näytä aktiivilaitteen tila"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<tiiviste_laite>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "näytä paikallisen levyn tiedot"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3311,7 +3387,7 @@ msgstr ""
 "<tiiviste_laite> on todennusdataa sisältävä laite\n"
 "<root_tiiviste> root-solmun tiiviste kohteella <tiiviste_laite>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3322,132 +3398,145 @@ msgstr ""
 "Käännetyt dm-verity oletusparametrit:\n"
 "\tTiiviste: %s, Data-lohko (tavua): %u, Tiivistelohko (tavua): %u, Satunnaislukuarvosiemenen koko: %u, Tiivistemuoto: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Älä käytä verity-superlohkoa"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Muototyyppi (1 - normaali, 0 - alkuperäinen Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "numero"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Data-laitteen lohkokoko"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Tiivistelaitteen lohkokoko"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Data-tiedoston lohkojen määrä"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "lohkoa"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Tiivistelaitteen alkusiirrososoite"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 #, fuzzy
 msgid "Starting offset on the FEC device"
 msgstr "Tiivistelaitteen alkusiirrososoite"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Tiivistealgoritmi"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "merkkijono"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Satunnaisarvosiemenluku"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "heksadesimaalimerkkijono"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "Tiivistealueen luominen epäonnistui.\n"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr ""
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr ""
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr ""
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 #, fuzzy
 msgid "Do not verify zeroed blocks"
 msgstr "Älä käytä verity-superlohkoa"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr ""
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr ""
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Virheellinen avainkoko %d.\n"
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, fuzzy, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Avaintiedoston %s lukeminen epäonnistui.\n"
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, fuzzy, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Ei voida lukea %d tavua avaintiedostosta %s.\n"
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 #, fuzzy
 msgid "<integrity_device>"
 msgstr "todenna laite"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr ""
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3460,439 +3549,444 @@ msgstr ""
 "<tiiviste_laite> on todennusdataa sisältävä laite\n"
 "<root_tiiviste> root-solmun tiiviste kohteella <tiiviste_laite>\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr ""
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr ""
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr ""
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr ""
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 #, fuzzy
 msgid "The size of the data integrity key"
 msgstr "Salausavaimen koko"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 #, fuzzy
 msgid "Read the integrity key from a file"
 msgstr "Lue avain tiedostosta."
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 #, fuzzy
 msgid "The size of the journal integrity key"
 msgstr "Salausavaimen koko"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 #, fuzzy
 msgid "Read the journal integrity key from a file"
 msgstr "Lue avain tiedostosta."
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr ""
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 #, fuzzy
 msgid "The size of the journal encryption key"
 msgstr "Salausavaimen koko"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 #, fuzzy
 msgid "Read the journal encryption key from a file"
 msgstr "Lue avain tiedostosta."
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr ""
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 #, fuzzy
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Valitsin --allow-discards sallitaan vain open-toiminnolle.\n"
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 #, fuzzy
 msgid "Invalid journal size specification."
 msgstr "Virheellinen laitekokomäärittely."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr ""
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr ""
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 #, fuzzy
 msgid "Reencryption already in-progress."
 msgstr "Uudelleensalauslohkon koko"
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, fuzzy, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Kohteen %s avaaminen eksklusiivisesti epäonnistui, laite on käytössä.\n"
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 #, fuzzy
 msgid "Allocation of aligned memory failed."
 msgstr "Tasatun muistin varaaminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, fuzzy, c-format
 msgid "Cannot read device %s."
 msgstr "Laitteen %s lukeminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, fuzzy, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Merkitään LUKS-laite %s käyttökelvottomaksi.\n"
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, fuzzy, c-format
 msgid "Cannot write device %s."
 msgstr "Laitteelle %s kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 #, fuzzy
 msgid "Cannot write reencryption log file."
 msgstr "Uudelleensalauslokitiedoston kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 #, fuzzy
 msgid "Cannot read reencryption log file."
 msgstr "Uudelleensalauslokitiedoston lukeminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Lokitiedosto %s on olemassa, aloitetaan salaus uudelleen.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 #, fuzzy
 msgid "Activating temporary device using old LUKS header."
 msgstr "Aktivoidaan tilapäinen laite käyttäen vanhaa LUKS-otsaketta.\n"
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 #, fuzzy
 msgid "Activating temporary device using new LUKS header."
 msgstr "Aktivoidaan tilapäinen laite käyttäen uutta LUKS-otsaketta.\n"
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 #, fuzzy
 msgid "Activation of temporary devices failed."
 msgstr "Tilapäisten laitteiden aktivoiminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 #, fuzzy
 msgid "Failed to set data offset."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, fuzzy, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Luotiin uusi LUKS-otsake laitteelle %s.\n"
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 #, fuzzy
 msgid "Failed to write activation flags to new header."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 #, fuzzy
 msgid "Failed to read requirements from backup header."
 msgstr "Avainsäiliöstä lukeminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, fuzzy, c-format
 msgid "%s header backup of device %s created."
 msgstr "Laitteen %s LUKS-otsakkeen varmuuskopio luotu.\n"
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 #, fuzzy
 msgid "Creation of LUKS backup headers failed."
 msgstr "LUKS-varmuuskopio-otsakkeiden luominen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, fuzzy, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "LUKS-otsakkeen palautus laitteeseen %s epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, fuzzy, c-format
 msgid "%s header on device %s restored."
 msgstr "LUKS-otsake palautettu laitteessa %s.\n"
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 #, fuzzy
 msgid "Cannot open temporary LUKS device."
 msgstr "Tilapäisen LUKS-laitteen avaaminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 #, fuzzy
 msgid "Cannot get device size."
 msgstr "Laitekoon hakeminen epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 #, fuzzy
 msgid "IO error during reencryption."
 msgstr "Siirräntävirhe uudelleensalauksen aikana.\n"
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 #, fuzzy
 msgid "Provided UUID is invalid."
 msgstr "Avainväli on virheellinen."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 #, fuzzy
 msgid "Cannot open reencryption log file."
 msgstr "Uudelleensalauslokitiedoston avaus epäonnistui.\n"
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Uudelleensalauslohkon koko"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "Mebitavua"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 #, fuzzy
 msgid "Do not change key, no data area reencryption"
 msgstr "Älä vaihda avainta, yhtään data-aluetta ei ole salattu uudelleen."
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 #, fuzzy
 msgid "Read new volume (master) key from file"
 msgstr "Lue taltion (pää)avain tiedostosta."
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "PBKDF2-iterointiaika kohteelle LUKS (millisekunneissa)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 #, fuzzy
 msgid "Use direct-io when accessing devices"
 msgstr "Käytä direct-io -siirräntää laitteisiin yhdistettäessä."
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 #, fuzzy
 msgid "Use fsync after each block"
 msgstr "Käytä fsync-komentoa jokaisen lohkon jälkeen."
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 #, fuzzy
 msgid "Update log file after every block"
 msgstr "Päivitä lokitiedosto jokaisen lohkon jälkeen."
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 #, fuzzy
 msgid "Use only this slot (others will be disabled)"
 msgstr "Käytä vain tätä väliä (muut ovat pois käytöstä)."
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 #, fuzzy
 msgid "Create new header on not encrypted device"
 msgstr "Luo uusi otsake ei-salattuun laitteeseen."
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 #, fuzzy
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Poista laitteen salaus pysyvästi (poista salaus)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 #, fuzzy
 msgid "The UUID used to resume decryption"
 msgstr "Salausavaimen koko"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 #, fuzzy
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Laitemetatietojen tyyppi: luks, plain, loopaes, tcrypt."
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[VALITSIN...] <laite>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, fuzzy, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Uudelleensalauas muuttuu: taltio key%s%s%s%s.\n"
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 #, fuzzy
 msgid "set hash to "
 msgstr ", aseta tiivisteeksi "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", aseta salaukseksi "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argumentti vaadittu."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Vain arvot välillä 1 mebitavua ja 64 mebitavua ovat sallittuja uudelleensalauslohkokokoja."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Maksimi laitepienennyskoko on 64 mebitavua."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 #, fuzzy
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Valitsinta --new on käytettävä yhdessä valitsimen --reduce-device-size kanssa."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 #, fuzzy
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Valitsinta --keep-key voidaan käyttää vain valitsimen --hash tai --iter-time kanssa."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Valitsinta --new ei voi käytttää yhdessä valitsimen --decrypt kanssa."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Valitsin --decrypt on yhteensopimaton määriteltyjen parametrien kanssa."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 #, fuzzy
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Valitsinta --new ei voi käytttää yhdessä valitsimen --decrypt kanssa."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr ""
 
@@ -3937,95 +4031,95 @@ msgstr ""
 msgid "Command failed with code %i (%s).\n"
 msgstr "Komento epäonnistui koodilla %i"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, fuzzy, c-format
 msgid "Key slot %i created."
 msgstr "Avaivälin %d vaihtui.\n"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, fuzzy, c-format
 msgid "Key slot %i unlocked."
 msgstr "Avaivälin %d lukitus avattu.\n"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, fuzzy, c-format
 msgid "Key slot %i removed."
 msgstr "Avaivälin %d lukitus avattu.\n"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr ""
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr ""
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr ""
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 #, fuzzy
 msgid "Failed to initialize device signature probes."
 msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, fuzzy, c-format
 msgid "Failed to stat device %s."
 msgstr "Avaintiedoston kutsuminen stat-funktiolla epäonnistui.\n"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr ""
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 #, fuzzy
 msgid "Failed to wipe device signature."
 msgstr "Avainsäiliöön kirjoittaminen epäonnistui.\n"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, fuzzy, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Laitekuvaajahakemiston hankkiminen epäonnistui."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr "Uudelleensalauslohkon koko"
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, fuzzy, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Salasanan laatutarkistus epäonnistui: %s\n"
@@ -4044,50 +4138,50 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Salasanan laatutarkistus epäonnistui: Virheellinen salasana (%s)\n"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 #, fuzzy
 msgid "Error reading passphrase from terminal."
 msgstr "Virhe luettaessa salasanalausetta pääteikkunasta.\n"
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Todenna salasanalause: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 #, fuzzy
 msgid "Passphrases do not match."
 msgstr "Salasanalauseet eivät täsmää.\n"
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 #, fuzzy
 msgid "Cannot use offset with terminal input."
 msgstr "Siirrososoitteen käyttö pääteikkunasyötteellä epäonnistui.\n"
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Kirjoita salasanalause: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Kirjoita salasanalause kohteelle %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 #, fuzzy
 msgid "No key available with this passphrase."
 msgstr "Tälle salasanalauseelle ei ole saatavissa avainta.\n"
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, fuzzy, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Tiedoston %s avaus epäonnistui.\n"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, fuzzy, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Avaintiedoston %s lukeminen epäonnistui.\n"
@@ -4129,6 +4223,7 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Avaintiedoston avaus epäonnistui.\n"
 
+#, c-format
 #~ msgid "Replaced with key slot %d.\n"
 #~ msgstr "Korvattiin avainvälillä %d.\n"
 
@@ -4138,12 +4233,16 @@ msgstr "Avaintiedoston avaus epäonnistui.\n"
 #~ msgid "Cannot find a free loopback device.\n"
 #~ msgstr "Vapaan silmukkalaiteen löytäminen epäonnistui.\n"
 
+#~ msgid "Invalid size parameters for verity device.\n"
+#~ msgstr "Virheelliset kokoparametrit verity-laitteelle.\n"
+
 #~ msgid "Too many tree levels for verity volume.\n"
 #~ msgstr "Verity-taltiolla liian monta puutasoa.\n"
 
 #~ msgid "memory allocation error in action_luksFormat"
 #~ msgstr "muistivarausvirhe kohteessa action_luksFormat"
 
+#, c-format
 #~ msgid "Key %d not active. Can't wipe.\n"
 #~ msgstr "Avain %d ei ole käytössä. Ei voida pyyhkiä pois.\n"
 
@@ -4156,15 +4255,19 @@ msgstr "Avaintiedoston avaus epäonnistui.\n"
 #~ msgid "remove (deactivate) device"
 #~ msgstr "poista (deaktivoi) laite"
 
+#, c-format
 #~ msgid "Cannot open device %s\n"
 #~ msgstr "Laitteen %s avaus epäonnistui.\n"
 
+#, c-format
 #~ msgid "Marking LUKS device %s usable.\n"
 #~ msgstr "Merkitään LUKS-laite %s käyttökelpoiseksi.\n"
 
+#, c-format
 #~ msgid "Activated keyslot %i.\n"
 #~ msgstr "Aktivoitiin avainväli %i.\n"
 
+#, c-format
 #~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s"
 #~ msgstr "Eteneminen: %5.1f%%, ETA %02llu:%02llu, %4llu Mebitavua kirjoitettu, nopeus %5.1f Mebitavua/s%s"
 
index 7797e6a..1a9a638 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 8bb2297..2037450 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,16 +1,16 @@
 # Messages français pour cryptsetup.
-# Copyright (C) 2020 Free Software Foundation, Inc.
+# Copyright (C) 2021 Free Software Foundation, Inc.
 # This file is put in the public domain.
 #
 # Solveig <perso@solveig.org>, 2009.
 # Nicolas Provost <nprovost@quadriv.com>, 2011.
-# Frédéric Marchal <fmarchal@perso.be>, 2020.
+# Frédéric Marchal <fmarchal@perso.be>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-19 11:00+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-22 18:30+0200\n"
 "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -20,61 +20,62 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n >= 2);\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Impossible d'initialiser le gestionnaire « device-mapper ». Exécution comme un utilisateur non-root."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Impossible d'initialiser le gestionnaire « device-mapper ». Le module noyau dm_mod est-il chargé ?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Le fanion différé demandé n'est pas supporté."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "Le DM-UUID du périphérique %s a été tronqué."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Type de cible dm inconnu."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Les options de performance dm-crypt demandées ne sont pas supportées."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Les options demandées de gestion de corruption des données dm-verity ne sont pas supportées."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Les options dm-verity FEC demandées ne sont pas supportées."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Les options d'intégrité de données demandées ne sont pas supportées."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "L'option sector_size demandée n'est pas supportée."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Le recalcule automatique des balises de sécurité demandés n'est pas supporté."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM n'est pas supporté."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Le mode de carte de bits d'intégrité dm demandé n'est pas supporté."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Échec lors de l'interrogation du segment dm-%s."
@@ -116,7 +117,7 @@ msgstr "Impossible d'initialiser le moteur aléatoire RNG pour le chiffrement."
 msgid "Cannot initialize crypto backend."
 msgstr "Impossible d'initialiser le moteur de chiffrement."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "L'algorithme de hachage %s n'est pas supporté."
@@ -130,7 +131,7 @@ msgstr "Erreur de traitement de clé (valeur hachage %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Impossible de déterminer le type de périphérique. Activation du périphérique incompatible ?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Cette opération n'est possible que pour les périphériques LUKS."
 
@@ -138,7 +139,7 @@ msgstr "Cette opération n'est possible que pour les périphériques LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Cette opération n'est possible que pour les périphériques LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Tous les emplacements de clés sont utilisés."
 
@@ -152,7 +153,7 @@ msgstr "L'emplacement de clé %d n'est pas valide, merci d'en choisir un entre 0
 msgid "Key slot %d is full, please select another one."
 msgstr "L'emplacement de clé %d est utilisé, merci d'en sélectionner un autre."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "La taille du périphérique n'est pas alignée avec la taille d'un bloc logique du périphérique."
 
@@ -161,7 +162,8 @@ msgstr "La taille du périphérique n'est pas alignée avec la taille d'un bloc
 msgid "Header detected but device %s is too small."
 msgstr "En-tête détecté mais le périphérique %s est trop petit."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Cette opération n'est pas supportée pour ce type de périphérique."
 
@@ -169,17 +171,13 @@ msgstr "Cette opération n'est pas supportée pour ce type de périphérique."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Opération illégale avec une re-chiffrement en cours."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "La version %d de LUKS n'est pas supportée."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Un périphérique avec des métadonnées détachées n'est pas supporté avec ce type de chiffrement."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Le périphérique %s n'est pas activé."
@@ -193,7 +191,7 @@ msgstr "Le périphérique sous-jacent pour le périphérique chiffré %s a dispa
 msgid "Invalid plain crypt parameters."
 msgstr "Paramètres de chiffrement non valides."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "La taille de la clé n'est pas valide."
 
@@ -201,12 +199,16 @@ msgstr "La taille de la clé n'est pas valide."
 msgid "UUID is not supported for this crypt type."
 msgstr "le UUID n'est pas supporté avec ce type de chiffrement."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Un périphérique avec des métadonnées détachées n'est pas supporté avec ce type de chiffrement."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Taille de secteur de chiffrement non supportée."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "La taille du périphérique n'est pas alignée avec la taille de secteur demandée."
 
@@ -250,8 +252,8 @@ msgstr "ATTENTION: La taille des métadonnées LUKS2 est devenue %<PRIu64> octet
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "ATTENTION: La taille de la zone des emplacements de clés LUKS2 est devenue %<PRIu64> octets.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Le périphérique %s est trop petit."
@@ -284,16 +286,16 @@ msgstr "Impossible de formater LOOPAES sans périphérique."
 msgid "Can't format VERITY without device."
 msgstr "Impossible de formater VERITY sans périphérique."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Type de hachage VERITY %d non supporté."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Taille de bloc VERITY non supportée."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Décalage de hachage VERITY non supporté."
 
@@ -323,236 +325,236 @@ msgstr "ATTENTION : La taille %d demandée pour l'étiquette est différente de
 msgid "Unknown crypt device type %s requested."
 msgstr "Type de chiffrement de périphérique demandé (%s) inconnu."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Paramètres non supportés sur le périphérique %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Paramètres non concordants sur le périphérique %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Désaccord entre les périphériques crypt."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Impossible de recharger le périphérique %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Impossible de suspendre le périphérique %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Impossible de redémarrer le périphérique %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Erreur fatale en rechargeant le périphérique %s (au dessus du périphérique %s)"
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Impossible de basculer le périphérique %s en dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Impossible de redimensionner le périphérique loopback."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Voulez vous réellement changer l'UUID du périphérique ?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Le fichier de sauvegarde de l'en-tête ne contient pas d'en-tête compatible LUKS."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Le volume %s n'est pas actif."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Le volume %s est déjà suspendu."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Le périphérique %s ne supporte pas la suspension."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Erreur lors de la suspension du périphérique %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Le volume %s n'est pas suspendu."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Le périphérique %s ne supporte pas la remise en service."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Erreur lors de la remise en service du périphérique %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Le volume %s n'est pas suspendu."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Ceci n'est pas la clé du volume."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Impossible d'ajouter un emplacement de clé, tous les emplacements sont désactivés et aucune clé n'a été fournie pour ce volume."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Nouvel emplacement de clé impossible à échanger."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "L'emplacement de clé %d n'est pas valide."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "L'emplacement de clé %d n'est pas actif."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "L'en-tête du périphérique recouvre la zone de données."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Re-chiffrement en cours. Impossible d'activer le périphérique."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Impossible d'obtenir le verrou de re-chiffrement."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "La récupération du rechiffrement LUKS2 a échoué."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Type de périphérique improprement initialisé."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Impossible d'utiliser le périphérique %s, le nom est invalide ou est toujours utilisé."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Le périphérique %s existe déjà."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Impossible d'utiliser le périphérique %s, le nom est invalide ou est toujours utilisé."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Clé de volume incorrecte pour le périphérique en clair."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Hachage racine incorrect spécifié pour le périphérique verity."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Signature de hachage racine requise."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Le porte-clé du noyau est manquant : il est requis pour passer une signature au noyau."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Impossible de charger la clé dans le porte-clé du noyau."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Le périphérique %s est toujours occupé."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Le périphérique %s n'est pas valide."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Le tampon de la clé du volume est trop petit."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Impossible de récupérer la clé du volume pour ce périphérique de type « plain »."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Impossible de récupérer le hachage racine pour le périphérique verity."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Cette opération n'est pas possible pour le périphérique chiffré %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "L'opération de vidage n'est pas supportée pour ce type de périphérique."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Le décalage des données n'est pas un multiple de %u octets."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Impossible de convertir le périphérique %s qui est toujours en cours d'utilisation."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Échec de l'affectation de l'emplacement de clé %u pour la nouvelle clé de volume."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Échec de l'initialisation des paramètres par défaut des emplacement de clé LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Échec de l'affectation de l'emplacement de clé %d aux résumé."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Le porte-clé du noyau n'est pas supporté par ce noyau."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Échec lors de la lecture du mot de passe depuis le porte-clé (erreur %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Erreur lors de l'acquisition du verrou global de sérialisation des accès strictes à la mémoire"
 
@@ -580,8 +582,8 @@ msgstr "Impossible d'exécuter « stat » sur le fichier de clef."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Impossible de sauter au décalage demandé dans le fichier de clé."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Plus assez de mémoire lors de la lecture de la phrase secrète."
 
@@ -601,51 +603,56 @@ msgstr "Taille max. de fichier de clé dépassée."
 msgid "Cannot read requested amount of data."
 msgstr "Impossible de lire la quantité de données demandée."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Le périphérique %s n'existe pas ou l'accès y est interdit."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Le périphérique %s n'est pas compatible."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "La mauvaise taille de optimal-io est ignorée pour le périphérique de données (%u octets)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Le périphérique %s est trop petit. Il a besoin d'au moins %<PRIu64> octets."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Impossible d'utiliser le périphérique %s actuellement utilisé (déjà mappé ou monté)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Impossible d'utiliser le périphérique %s, permission refusée."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Impossible d'obtenir des informations au sujet du périphérique %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Impossible d'utiliser un périphérique loopback. Fonctionne comme un utilisateur non-root."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Impossible d'associer le périphérique loopback (le drapeau « autoclear » est requis)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Le décalage demandé est au delà de la taille réelle du périphérique %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Le périphérique %s a une taille nulle."
@@ -719,16 +726,16 @@ msgstr "Verrouillage interrompu. Le chemin de verrouillage %s/%s est inutilisabl
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "ATTENTION: Le répertoire verrou %s/%s est manquant !\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Le répertoire de verrouillage %s/%s sera créé avec les permissions par défaut fournies durant la compilation."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Verrouillage interrompu. Le chemin de verrouillage %s/%s est inutilisable (%s n'est pas un répertoire)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Impossible de se déplacer au décalage du périphérique."
 
@@ -756,8 +763,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "La spécification du chiffrement devrait être au format [chiffrement]-[mode]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Impossible d'écrire sur le périphérique %s. Permission refusée."
@@ -776,12 +783,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Erreur E/S pendant le chiffrement de l'emplacement de clé."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Impossible d'ouvrir le périphérique %s."
@@ -802,43 +809,43 @@ msgstr "Le périphérique %s est trop petit (LUKS1 a besoin d'au moins %<PRIu64>
 msgid "LUKS keyslot %u is invalid."
 msgstr "L'emplacement de clé LUKS %u n'est pas valide."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "%s n'est pas un périphérique LUKS valide."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Le fichier de sauvegarde d'en-tête demandé %s existe déjà."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Impossible de créer le fichier de sauvegarde d'en-tête %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Impossible d'écrire le fichier de sauvegarde d'en-tête %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Le fichier de sauvegarde ne contient pas d'en-tête LUKS valide."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Impossible d'ouvrir le fichier de sauvegarde d'en-tête %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Impossible de lire le fichier de sauvegarde d'en-tête %s."
@@ -860,7 +867,7 @@ msgstr "ne contient pas d'en-tête LUKS. Remplacer l'en-tête peut détruire les
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "contient déjà un en-tête LUKS. Remplacer l'en-tête détruira les emplacements de clés actuels."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -872,101 +879,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Taille de clé non standard. Réparation manuelle requise."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Alignement non standard des emplacements de clé. Réparation manuelle requise."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Réparation des emplacements de clé."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Emplacement de clé %i : décalage réparé (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Emplacement de clé %i : bandes réparées (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Emplacement de clé %i : signature de partition contrefaite."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Emplacement de clé %i : aléa effacé."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Écriture de l'en-tête LUKS sur le disque."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Échec de la réparation."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "L'algorithme de hachage LUKS demandé (%s) n'est pas supporté."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Aucun problème connu détecté pour l'en-tête LUKS."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Erreur lors de la mise à jour de l'en-tête LUKS sur le périphérique %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Erreur lors de la relecture de l'en-tête LUKS après la mise à jour sur le périphérique %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "L'offset des données d'un en-tête LUKS doit être soit 0 ou soit plus grand que la taille de l'en-tête."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Mauvais format fourni pour le UUID LUKS."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Impossible de créer un en-tête LUKS : échec lors de la lecture de l'aléa."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Impossible de créer un en-tête LUKS : le résumé (« digest ») de l'en-tête a échoué (en utilisant l'algorithme de hachage %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "L'emplacement de clé %d est activé, effacez le d'abord."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Le matériel de l'emplacement de clé %d a trop peu de bandes. L'en-tête a-t-il été modifié ?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Impossible d'ouvrir l'emplacement de clé (en utilisant le hachage %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "L'emplacement de clé %d n'est pas valide, merci de sélectionner un emplacement entre 0 et %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Impossible d'effacer de façon sécurisée le périphérique %s."
@@ -1002,11 +1009,11 @@ msgstr "Longueur maximum de la phrase secrète TCRYPT (%zu) dépassée."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "L'algorithme de hachage PBKDF2 %s n'est pas supporté, ignoré."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "L'interface du noyau requise pour le chiffrement n'est pas disponible."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Vérifiez que le module du noyau algif_skcipher est chargé."
 
@@ -1019,159 +1026,173 @@ msgstr "L'activation n'est pas supportée pour des secteurs de taille %d."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Le noyau ne supporte pas l'activation pour ce mode TCRYPT historique."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Activation du chiffrement du système TCRYPT sur la partition %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Le noyau ne supporte pas les associations de type TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Cette fonction n'est pas supportée sans le chargement de l'en-tête TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Un type d'entrée « %u » inattendu a été trouvé dans la méta-donnée en analysant la Clé Maître du Volume supportée."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Chaîne texte invalide rencontrée en analysant la Clé Maître du Volume."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Chaîne texte (« %s ») inattendue rencontrée en analysant la Clé Maître du Volume supportée."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "La valeur « %u » pour l'entrée de la méta-donnée est inattendue en analysant la Clé Maître du Volume supportée."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Impossible de lire la signature BITLK depuis %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Signature invalide ou inconnue pour le périphérique BITLK."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "La version 1 de BITLK n'est actuellement pas supportée."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Signature d'amorce invalide ou inconnue pour le périphérique BITLK."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Signature invalide ou inconnue pour le périphérique BITLK."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Taille de secteur %<PRIu16> non supportée."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Impossible de lire l'en-tête BITLK depuis %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Impossible de lire les méta-données BITLK FVE depuis %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Type de chiffrement inconnu ou non supporté."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Impossible de lire les entrées des méta-données de BITLK depuis %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Un type d'entrée « %u » inattendu a été trouvé dans la méta-donnée en analysant la clé externe."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "La valeur « %u » pour l'entrée de la méta-donnée est inattendue en analysant la clé externe."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Une entrée de méta-donnée inattendue a été trouvée en analysant la clé de démarrage."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Cette opération n'est pas supportée."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Mauvaise taille de clé."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Taille inattendue pour les données de la clé."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Ce périphérique BITLK est dans un état non supporté et ne peut pas être activé."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Les périphériques BITLK avec le type « %s » ne peuvent pas être activés."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "L'activation d'un périphérique BITLK partiellement déchiffré n'est pas supporté."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Impossible d'activer le périphérique car dm-crypt dans le noyau ne supporte pas BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Impossible d'activer le périphérique car dm-crypt dans le noyau ne supporte pas le diffuseur BITLK Elephant."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Le périphérique verity %s n'utilise pas l'en-tête sur le disque."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Le périphérique %s n'est pas un périphérique VERITY valable."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "La version VERITY %d n'est pas supportée."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "En-tête VERITY corrompu."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Mauvais format d'UUID VERITY fourni sur le périphérique %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Erreur lors de la mise à jour de l'en-tête verity sur le périphérique %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "La vérification de la signature du hachage racine n'est pas supportée."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Les erreurs ne savent pas être réparées avec un périphérique FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "%u erreurs réparables ont été trouvées avec le périphérique FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Le noyau ne supporte pas les associations de type dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Le noyau ne supporte pas les options de signature dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Le périphérique verity a détecté une corruption après l'activation."
 
@@ -1180,41 +1201,37 @@ msgstr "Le périphérique verity a détecté une corruption après l'activation.
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "La zone de réserve n'a pas été mise à zéro à la positon %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Débordement du décalage du périphérique."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "La vérification a échoué à la position %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Mauvais paramètres de taille pour le périphérique verity."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Débordement de la zone de hachage."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "La vérification de la zone de données a échoué."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "La vérification du hachage de la racine a échoué."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Erreur d'entrée/sortie lors de la création de la zone de hachage."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "La création de la zone de hachage a échoué."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "ATTENTION : Le kernel ne peut pas activer le périphérique si la taille des blocs de données dépasse la taille d'une page (%u)."
@@ -1223,53 +1240,61 @@ msgstr "ATTENTION : Le kernel ne peut pas activer le périphérique si la taill
 msgid "Failed to allocate RS context."
 msgstr "Échec de l'allocation du contexte RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Échec de l'allocation du tampon."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Échec de lecture du bloc RS %<PRIu64> octet %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Échec de la lecture de la parité du bloc RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Échec de la réparation de la parité du bloc %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Échec de l'écriture de la parité du bloc RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Les tailles des blocs doivent concorder pour FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Nombre d'octets de parité invalide."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Longueur de segment FEC invalide."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Impossible de déterminer la taille du périphérique %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Le noyau ne supporte pas les associations de type dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Le noyau ne supporte pas les alignements de méta-données fixés de dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Le noyau refuse d'activer l'option de recalcul non sûre (voyez les options d'activation historique pour outrepasser)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Impossible d'acquérir un verrou en écriture sur le périphérique %s."
@@ -1290,45 +1315,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Le décalage de données demandé est trop petit."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "ATTENTION: la zone des emplacements de clés (%<PRIu64> octets) est très petite, le nombre d'emplacements de clés LUKS2 est très limité.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Impossible d'acquérir le verrou de lecture sur le périphérique %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Des exigences LUKS2 interdites ont été détectées dans la sauvegarde %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Les décalages des données ne sont pas identiques sur le périphérique et la sauvegarde, la restauration a échoué."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Les en-têtes binaires avec des tailles de zones d'emplacements de clés sont différents sur le périphérique et la sauvegarde, la restauration a échouée."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Périphérique %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "ne contient pas d'en-tête LUKS2. Remplacer l'en-tête peut détruire les données de ce périphérique."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "contient déjà un en-tête LUKS2. Remplacer l'en-tête détruira les emplacements de clés actuels."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1338,7 +1363,7 @@ msgstr ""
 "ATTENTION: des exigences LUKS2 inconnues ont été détectées sur l'en-tête du périphérique réel !\n"
 "Remplacer l'en-tête par la sauvegarde peut corrompre les données sur ce périphérique !"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1348,58 +1373,58 @@ msgstr ""
 "ATTENTION: Un rechiffrement hors-ligne non terminé a été détecté sur le périphérique !\n"
 "Remplacer l'en-tête par la sauvegarde peut corrompre les données."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Fanion inconnu %s ignoré."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Clé manquante pour le segment %u de dm-crypt"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Impossible de définir le segment dm-crypt."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Impossible de définir le segment dm-linear."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Configuration d'intégrité du périphérique non supportée."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Re-chiffrement en cours. Le périphérique ne peut être désactivé."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Échec du remplacement du périphérique suspendu %s avec la cible dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Échec lors de la lecture des exigences LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Des exigences LUKS2 non rencontrées ont été détectées."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Opération incompatible avec un périphérique marqué pour le rechiffrement historique. Abandon."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Opération incompatible avec un périphérique marqué pour le rechiffrement LUKS2. Abandon."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Pas assez de mémoire disponible pour ouvrir l'emplacement de clé."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Échec de l'ouverture de l'emplacement de clé."
 
@@ -1429,7 +1454,7 @@ msgstr "Impossible de déplacer la zone des emplacements de clés. Pas assez d'e
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Impossible de déplacer la zone des emplacements de clés. Les emplacements de clés LULS2 sont trop petits."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Impossible de déplacer la zone des emplacements de clés."
 
@@ -1466,282 +1491,294 @@ msgstr "Impossible de convertir au format LUKS1 – l'emplacement %u (sur les em
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Impossible de convertir au format LUKS1 – l'emplacement de clé %u n'est pas compatible avec LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "La taille de la zone chaude doit être un multiple de l'alignement de zone calculé (%zu octets)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "La taille du périphérique doit être un multiple de l'alignement de zone calculé (%zu octets)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Mode de résilience %s non supporté"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Impossible d'initialiser l'encapsulation pour le stockage de l'ancien segment."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Impossible d'initialiser l'encapsulation pour le stockage du nouveau segment."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Impossible de lire les sommes de contrôle pour la zone chaude actuelle."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Échec de la lecture de la zone chaude démarrant à %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Échec lors du déchiffrement du secteur %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Échec lors de la récupération du secteur %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Les tailles des périphériques source et cible ne correspondent pas. Source %<PRIu64>, cible: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Échec de l'activation du périphérique de zone chaude %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Impossible d'activer le périphérique de surcouche %s avec la table d'origine actuelle."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Impossible de charger la nouvelle cartographie du périphérique %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Impossible de rafraîchir la pile des périphériques de rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Impossible de définir la taille de la nouvelle zone des emplacements de clés."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Le décalage de données n'est pas aligné sur la taille de secteur de chiffrement demandée (%<PRIu32> octets)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Le périphérique de données n'est pas aligné sur la taille de secteur de chiffrement demandée (%<PRIu32> octets)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Le décalage de données (%<PRIu64> secteurs) est plus petit que le décalage de données future (%<PRIu64> secteurs)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Erreur lors de l'ouverture de %s en mode exclusif (déjà mappé ou monté)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Le périphérique n'est pas marqué pour le rechiffrement LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Échec du chargement du contexte de rechiffrement LUKS2"
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Impossible d'obtenir l'état de rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Le périphérique n'est pas en rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Le rechiffrement est déjà en cours."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Impossible d'acquérir le verrou de rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Impossible de réaliser le rechiffrement. Exécutez d'abord la récupération du rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "La taille du périphérique actif et la taille de rechiffrement demandée ne correspondent pas."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "Taille de périphérique illégale demandée dans les paramètres de rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Rechiffrement en cours. La récupération ne peut pas être réalisée."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "Rechiffrement LUKS2 déjà initialisé dans les métadonnées."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Échec de l'initialisation du rechiffrement LUKS2 dans les métadonnées."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Impossible de définir les segments du périphérique pour le rechiffrement suivant de la zone chaude."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Échec lors de l'écriture des métadonnées de la résilience du rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Échec du déchiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Échec de l'écriture de la zone chaude démarrant à %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Erreur lors de la synchronisation des données."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Échec de la mise à jour des métadonnées après la fin du rechiffrement de la zone chaude courante."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Échec lors de l'écriture des métadonnées LUKS2"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Échec lors de l'effacement des données du segment de sauvegarde."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Impossible de désactiver le fanion de demande de rechiffrement."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Échec lors de l'affectation du jeton %d à l'emplacement de clé %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Impossible d'obtenir le verrou de re-chiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Erreur fatale en rechiffrant le morceau commençant à %<PRIu64> d'une longueur de %<PRIu64> secteurs."
 
 # Frédéric: Je n'ai pas la moindre idée de ce que le développeur a voulu écrire. Qu'est-ce que "error target" dans ce contexte ?
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Ne pas redémarrer le périphérique à moins qu'il ait été remplacé manuellement par la cible en erreur."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Impossible de réaliser le rechiffrement. Statut de rechiffrement inattendu."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Contexte de rechiffrement manquant ou invalide."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Impossible d'initialiser la pile du périphérique de rechiffrement."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Échec de la mise à jour du contexte de rechiffrement."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "L'emplacement de clé %d n'est pas valide."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Aucun emplacement de jeton libre"
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Échec lors de la création du jeton intégré %s"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Impossible de vérifier une phrase secrète non saisie sur une console."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Les paramètres de chiffrement des emplacement de clés peuvent uniquement être définis pour un périphérique LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Aucun motif connu d'algorithme de chiffrement n'a été détecté."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "ATTENTION: Le paramètre --hash est ignoré en mode non chiffré quand le fichier de clé est spécifié.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "ATTENTION: L'option --keyfile-size est ignorée. La taille de lecture est la même que la taille de la clé de chiffrement.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Signature(s) de périphérique détectée(s) sur %s. Continuer risque d'endommager les données existantes."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Opération interrompue.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "L'option --key-file est requise."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Entrez le PIN VeraCrypt : "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Valeur PIN invalide : erreur d'analyse"
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Valeur PIN invalide: 0"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Valeur PIN invalide: hors des limites."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Aucun en-tête détecté avec cette phrase secrète sur le périphérique."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Le périphérique %s n'est pas un périphérique BITLK valide."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1751,88 +1788,96 @@ msgstr ""
 "sensible qui permet d'accéder à la partition chiffrée sans mot de passe.\n"
 "Ce contenu devrait toujours être stocké, chiffré, en lieu sûr."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Le périphérique %s est toujours actif et prévu pour une suppression différée.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Le redimensionnement d'un périphérique actif requiert que la clé du volume soit dans le porte-clé mais l'option --disable-keyring est définie."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Test de performance interrompu."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/A\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u itérations par seconde pour une clé de %zu bits\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/A\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u itérations, %5u mémoire, %1u threads parallèles (CPUs) pour une clé de %zu bits (temps de %u ms demandé)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Le résultat de l'évaluation de performance n'est pas fiable."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Tests approximatifs en utilisant uniquement la mémoire (pas de stockage E/S).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algorithme |       Clé |     Chiffrement |    Déchiffrement\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Le chiffrement %s (avec une clé de %i bits) n'est pas disponible."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#    Algorithme |       Clé |     Chiffrement |    Déchiffrement\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/D"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Le périphérique seems ne requière pas de récupération de rechiffrement.\n"
-"Voulez-vous quand-même continuer ?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Entrez la phrase secrète pour la récupération du rechiffrement : "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Réellement procéder à la récupération du rechiffrement LUKS2 ?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Entrez la phrase secrète pour la récupération du rechiffrement : "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Entrez la phrase secrète pour la récupération du rechiffrement : "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Réellement essayer de réparer l'en-tête du périphérique LUKS ?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1840,104 +1885,108 @@ msgstr ""
 "Effacement du périphérique pour initialiser les sommes de contrôle d'intégrité.\n"
 "Vous pouvez interrompre ceci en appuyant sur CTRL+c (le reste du périphérique effacé contiendra toujours des sommes de contrôle invalides).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Impossible de désactiver le périphérique temporaire %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "L'option d'intégrité peut uniquement être utilisée avec le format LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Options de taille des métadonnées LUKS2 non supportées."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Le fichier d'en-tête n'existe pas, voulez-vous le créer ?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Impossible de créer le fichier d'en-tête %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Aucun motif connu de spécification d'intégrité n'a été détecté."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Ne peut utiliser %s comme en-tête sur disque."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Cette action écrasera définitivement les données sur %s."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Impossible de définir les paramètres pbkdf."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Décalage réduit de données est uniquement permis dans un en-tête LUKS détaché."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Impossible de déterminer la taille de la clé de volume pour LUKS sans emplacement de clé, veuillez utiliser l'option --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Le périphérique a été activé mais les fanions ne peuvent pas être rendus permanents."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Emplacement de clé %d sélectionné pour suppression."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Ceci est le dernier emplacement de clé. Le périphérique sera inutilisable après la suppression de cette clé."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Entrez toute phrase secrète restante : "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Opération interrompue, l'emplacement de clé n'a PAS été effacé.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Entrez la phrase secrète à effacer : "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Entrez une nouvelle phrase secrète pour l'emplacement de clé : "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Entrez une phrase secrète existante : "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Entrez la phrase secrète à changer : "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Entrez la nouvelle phrase secrète : "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Entrez la phrase secrète pour l'emplacement de clé à convertir: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "L'opération isLuks supporte seulement un périphérique en argument."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1947,12 +1996,12 @@ msgstr ""
 "sensible qui permet d'accéder à la partition chiffrée sans mot de passe.\n"
 "Ce contenu devrait être stocké, chiffré, en lieu sûr."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "L'emplacement de clé %d ne contient pas de clé non liée."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1960,30 +2009,40 @@ msgstr ""
 "Le contenu de l'en-tête avec une clé non liée est une information sensible.\n"
 "Ce contenu devrait être stocké, chiffré, en lieu sûr."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s n'est pas un nom de périphérique %s actif."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s n'est pas un nom de périphérique LUKS actif ou l'en-tête est manquant."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "L'option --header-backup-file est requise."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s n'est pas un périphérique géré par cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Le rafraîchissement n'est pas supporté pour un périphérique de type %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Type de métadonnée du périphérique %s non reconnu."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "La commande exige un périphérique et un nom de correspondance comme arguments."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1992,95 +2051,95 @@ msgstr ""
 "Cette opération va supprimer tous les emplacements de clés du périphérique %s.\n"
 "Le périphérique sera inutilisable après cette opération."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Opération interrompue, les emplacements de clés n'ont PAS été effacés.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Type LUKS invalide, seuls luks1 et luks2 sont supportés."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Le périphérique est déjà du type %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Cette opération va convertir %s au format %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Opération interrompue, le périphérique n'a PAS été converti.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "L'option --priority, --label ou --subsystem est manquante."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Le jeton %d est invalide."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Le jeton %d est utilisé."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Échec lors de l'ajout du jeton %d au porte-clé luks2."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Échec lors de l'affectation du jeton %d à l'emplacement de clé %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Le jeton %d n'est pas utilisé."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Impossible d'importer le jeton depuis le fichier."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Impossible d'obtenir le jeton %d pour l'export."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Le paramètre --key-description est requis pour l'action d'ajout d'un jeton."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "L'action requiert un jeton spécifique. Utilisez le paramètre --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "L'opération de jeton %s est invalide."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Périphérique dm actif auto-détecté « %s » pour le périphérique de données %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Le périphérique %s n'est pas un périphérique blocs.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Échec de l'auto-détection des containers du périphérique %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2093,233 +2152,242 @@ msgstr ""
 "Les données pourraient être corrompues si le périphérique est réellement activé.\n"
 "Pour exécuter le rechiffrement en mode en ligne, utilisez le paramètre --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Type de périphérique LUKS invalide."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Le chiffrement sans en-tête détaché (--header) n'est pas possible sans une réduction de la taille du périphérique de données (--reduce-device-size)"
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Le décalage de données demandé doit être inférieur ou égal à la moitié du paramètre --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Ajustement de la valeur de --reduce-device-size à deux fois --offset %<PRIu64> (secteurs).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Le chiffrement est uniquement supporté avec le format LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Périphérique LUKS détecté sur %s. Voulez-vous chiffrer à nouveau ce périphérique LUKS ?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Le fichier temporaire d'en-tête %s existe déjà. Abandon."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Impossible de créer le fichier temporaire d'en-tête %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s est maintenant actif et prêt pour un chiffrement en ligne.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "Le déchiffrement LUKS2 est uniquement supporté avec un périphérique à l'en-tête détaché."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Pas assez d'emplacements de clés libres pour le rechiffrement."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Le fichier de clé peut uniquement être utilisé avec --key-slot ou avec exactement un seul emplacement de clé actif."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Entrez la phrase secrète pour l'emplacement de clé %d : "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Entrez la phrase secrète pour l'emplacement de clé %u : "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Basculement de l'algorithme de chiffrement de données vers %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "La commande exige un périphérique comme argument."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Seul le format LUKS2 est actuellement supporté. Veuillez utiliser l'outil cryptsetup-reencrypt pour LUKS1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Un rechiffrement hors-ligne historique est déjà en cours. Utilisez l'utilitaire cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Le rechiffrement d'un périphérique avec un profil d'intégrité n'est pas supporté."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Rechiffrement LUKS2 déjà initialisé. Abandon de l'opération."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "Le périphérique LUKS2 n'est pas en rechiffrement."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<périphérique> [--type <type>] [<nom>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "ouvrir le périphérique comme <nom>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nom>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "fermeture du périphérique (supprime le « mapping »)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "redimensionner le périphérique actif"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "afficher le statut du périphérique"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <chiffrement>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "chiffrement pour test de performance"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<périphérique>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "essayer de réparer les métadonnées sur le disque"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "rechiffrer le périphérique LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "supprimer tous les emplacements de clés (supprime la clé de chiffrement)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "convertir LUKS depuis/vers le format LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "définir les options de configuration permanentes pour LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<périphérique> [<fichier de la nouvelle clé>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "formater un périphérique LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "ajouter une clé au périphérique LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<périphérique> [<fichier de clé>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "retire du périphérique LUKS la clé ou le fichier de clé fourni"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "modifie la clé ou le fichier de clé fourni pour le périphérique LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "converti une clé vers les nouveaux paramètres pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<périphérique> <emplacement de clé>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "efface de façon sécurisée la clé avec le numéro <emplacement de clé> du périphérique LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "afficher l'UUID du périphérique LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "teste si <périphérique> a un en-tête de partition LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "affiche les informations LUKS de la partition"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "affiche les informations du périphérique TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "affiche les informations du périphérique BITLK"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Suspendre le périphérique LUKS et effacer de façon sécurisée la clé (toutes les entrées/sorties sont suspendues)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Remettre en service le périphérique LUKS suspendu"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Sauvegarder l'en-tête et les emplacements de clés du périphérique LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Restaurer l'en-tête et les emplacements de clés du périphérique LUKS"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <périphérique>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Manipuler les jetons LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2327,7 +2395,7 @@ msgstr ""
 "\n"
 "<action> est l'une de :\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2339,7 +2407,7 @@ msgstr ""
 "\touvrir : create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tfermer : remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2354,7 +2422,7 @@ msgstr ""
 "<emplacement> est le numéro de l'emplacement de clé LUKS à modifier\n"
 "<fichier de clé> est un fichier optionnel contenant la nouvelle clé pour l'action luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2363,7 +2431,7 @@ msgstr ""
 "\n"
 "Le format de métadonnées compilé par défaut est %s (pour l'action luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2380,7 +2448,7 @@ msgstr ""
 "PBKDF par défaut pour LUKS2 : %s\n"
 "\tTemps d'itération: %d, Mémoire requise: %d ko, Threads parallèles: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2395,443 +2463,451 @@ msgstr ""
 "\tplain: %s, Clé: %d bits, Hachage mot de passe: %s\n"
 "\tLUKS: %s, Clé: %d bits, Hachage en-tête LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: La taille de clé par défaut en mode XTS (deux clés internes) sera doublée.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s : exige %s comme arguments."
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Afficher ce message d'aide"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Afficher, en résumé, la syntaxe d'invocation"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Afficher la version du paquet"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Options d'aide :"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Afficher des messages d'erreur plus détaillés"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Afficher les messages de débogage"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Montrer les messages de débogage incluant les métadonnées JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "L'algorithme de chiffrement utilisé pour chiffrer le disque (voir /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "L'algorithme de hachage utilisé pour créer la clé de chiffrement à partir de la phrase secrète"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Vérifier la phrase secrète en la demandant deux fois"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Lire la clef depuis un fichier"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Lire la clé (maîtresse) du volume depuis un fichier."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Lister les informations de la clé (maîtresse) de volume au lieu des autres emplacements de clefs"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "La taille de la clé de chiffrement"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Limite la lecture d'un fichier de clé"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "octets"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Nombre d'octets à ignorer dans le fichier de clé"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Limite la lecture d'un nouveau fichier de clé ajouté"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Nombre d'octets à ignorer dans le fichier de clé nouvellement ajouté"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Numéro de l'emplacement pour la nouvelle clé (par défaut, le premier disponible)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "La taille du périphérique"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SECTEURS"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Utiliser uniquement la taille demandée du périphérique (ignore le reste du périphérique). DANGEREUX !"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Le décalage de départ dans le périphérique sous-jacent"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Combien de secteurs de données chiffrées à ignorer au début"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Crée une association en lecture seule"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Ne pas demander confirmation"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Délai d'expiration de la demande interactive de phrase secrète (en secondes)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "s"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Mise à jour de la ligne de progression (en secondes)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Nombre de tentatives possibles pour entrer la phrase secrète"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Utiliser une limite de <n> secteurs pour aligner les données – pour luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Fichier contenant une sauvegarde de l'en-tête LUKS et des emplacements de clés"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Utiliser /dev/random pour générer la clé de volume"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Utiliser /dev/urandom pour générer la clé de volume"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Partager le périphérique avec un autre segment chiffré sans recouvrement"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID du périphérique à utiliser"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Autoriser les demandes d'abandon (TRIM) pour le périphérique"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Périphérique ou fichier avec un en-tête LUKS séparé"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Ne pas activer le périphérique. Vérifie simplement le phrase secrète"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Utilise l'en-tête caché (périphérique TCRYPT caché)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Le périphérique est un lecteur TCRYPT système (avec secteur d'amorçage)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Utiliser l'en-tête TCRYPT de secours (secondaire)"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Recherche aussi des périphériques compatibles avec VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Multiplicateur d'Itération Personnel pour le périphérique compatible avec VeraCrypt"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Interroger le Multiplicateur d'Itération Personnel pour le périphérique compatible avec VeraCrypt"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Type de métadonnées du périphérique : luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Désactive la vérification de la qualité du mot de passe (si activé)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Utilise l'option de compatibilité de performance dm-crypt same_cpu_crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Utilise l'option de compatibilité de performance dm-crypt submit_from_crypt_cpus"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Passer outre la queue de travail de dm-crypt et traiter les requêtes en lecture de manière synchrone"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Passer outre la queue de travail de dm-crypt et traiter les requêtes en écriture de manière synchrone"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "La suppression du périphérique est différée jusqu'à ce que le dernier utilisateur le ferme"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Utiliser un verrou global pour sérialiser PBKDF qui utilise beaucoup de mémoire (évite le OOM)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Temps d'itération de PBKDF pour LUKS (en ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algorithme PBKDF (pour LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Limite de coût mémoire PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilooctets"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Coût parallèle PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "threads"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Coût d'itération PBKDF (forcé, désactive l'étalon)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Priorité de l'emplacement de clé: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Désactiver le verrouillage des métadonnées sur le disque"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Désactiver le chargement des clés de volume via le porte-clé du noyau"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algorithme d'intégrité des données (uniquement LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Désactiver le journal pour le périphérique d'intégrité"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Ne pas effacer le périphérique après le formatage"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Utiliser le rembourrage historique inefficace (vieux noyaux)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Ne pas demander le mot de passe si l'activation par jeton échoue"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Numéro de jeton (défaut: n'importe lequel)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Description de clé"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Taille du secteur de chiffrement (défaut: 512 octets)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Utiliser le IV (vecteur d'initialisation) compté en taille de secteurs (pas en multiple de 512 octets)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Définir les fanions d'activation comme permanents pour le périphérique"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Définir l'étiquette pour le périphérique LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Définir l'étiquette de sous-système pour le périphérique LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Créer ou déverser un emplacement de clé LUKS2 non lié (aucun segment de donnée assigné)"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Lire ou écrire le json depuis ou vers un fichier"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Taille de la zone de métadonnées de l'en-tête LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Taille de la zone des emplacements de clés de l'en-tête LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Rafraîchir (réactiver) le périphérique avec de nouveaux paramètres"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Emplacement de clé LUKS2: La taille de la clé de chiffrement"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Emplacement de clé LUKS2: Le chiffrement utilisé pour le chiffrement de l'emplacement de clé"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Chiffrer le périphérique LUKS2 (chiffrement sur place)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Déchiffrer le périphérique LUKS2 (supprime le chiffrement)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Initialiser le rechiffrement LUKS2 uniquement dans les métadonnées."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Redémarrer uniquement le rechiffrement LUKS2 initialisé."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Réduire la taille des données du périphérique (déplace le décalage des données). DANGEREUX !"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Taille maximale de la zone chaude de rechiffrement."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Rechiffre le type de résilience de la zone chaude (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Rechiffrer le hachage des sommes de contrôle de la zone chaude"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Outrepasser l'auto-détection du périphérique pour le périphérique dm à rechiffrer"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPTION...] <action> <paramètres de l'action>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Il manque l'argument <action>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Action inconnue."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Les options --refresh et --test-passphrase sont mutuellement exclusives."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "L'option --deferred est permise uniquement avec la commande close."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "L'option --shared est permise uniquement pour ouvrir un périphérique ordinaire."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "L'option --allow-discards est permise uniquement pour une opération d'ouverture."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "L'option --persistent est permise uniquement pour une opération d'ouverture."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "L'option --serialize-memory-hard-pbkdf est permise uniquement pour une opération d'ouverture."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "L'option --persistent n'est pas permise avec --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2839,260 +2915,259 @@ msgstr ""
 "L'option --key-size est permise seulement avec les actions luksFormat, luksAddKey,\n"
 "open et benchmark. Pour limiter la lecture depuis un fichier de clé, utilisez --keyfile-size=(octets)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "L'option --integrity est autorisée uniquement avec luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "L'option --integrity-no-wipe peut uniquement être utilisée pour une action de formatage avec l'extension d'intégrité."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Les options --label et --subsystem sont permises uniquement pour les opérations luksFormat et config LUKS2."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "L'option --test-passphrase est autorisée uniquement pour ouvrir des périphériques LUKS, TCRYPT et BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "La taille de la clé doit être un multiple de 8 bits"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Emplacement de clé non valide."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "L'option --key-file est prioritaire par rapport à un fichier de clé spécifié en argument."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Nombre négatif non autorisé pour l'option."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Un seul argument --key-file est autorisé."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Seule une des deux possibilités --use-[u]random est autorisée."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "L'option --use-[u]random est autorisée seulement avec luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "L'option --uuid est autorisée seulement avec luksFormat et luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "L'option --align-payload est autorisée uniquement avec luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Les options --luks2-metadata-size et --opt-luks2-keyslots-size sont permises uniquement pour luksFormat avec LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Spécification de taille de métadonnées LUKS2 invalide."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Spécification de taille d'emplacements de clés LUKS2 invalide."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Les options --align-payload et --offset ne peuvent pas être combinées."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "L'option --skip est supportée uniquement pour ouvrir des périphériques ordinaires et loopaes."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "L'option --offset est supportée uniquement pour ouvrir des périphériques ordinaires et loopaes, luksFormat et le rechiffrement de périphérique."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Les options --tcrypt-hidden, --tcrypt-system ou --tcrypt-backup sont supportées seulement pour un périphérique TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "L'option --tcrypt-hidden ne peut pas être combinée avec --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "L'option --veracrypt est uniquement supportée pour un périphérique de type TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Argument invalide fourni pour le paramètre --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "L'option --veracrypt-pim est uniquement supportée pour un périphérique compatible avec VeraCrypt."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "L'option --veracrypt-query-pim est uniquement supportée pour un périphérique compatible avec VeraCrypt."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Les options --veracrypt-pim et --veracrypt-query-pim sont mutuellement exclusives."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "L'option --priority peut uniquement être ignore/normal/prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Une spécification d'emplacement de clé est requise."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "La fonction de dérivation d'une clé basée sur un mot de passe (PBKDF = Password-Based Key Derivation Function) peut uniquement être pbkdf2 ou argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Les itérations forcées de PBKDF ne peuvent pas être combinées avec l'option de temps d'itération."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "L'option de taille de secteur n'est pas supportée pour cette commande."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "L'option des secteurs IV (vecteur d'initialisation) de grande taille est supportée uniquement à l'ouverture de périphériques de type simple avec une taille de secteur supérieure à 512 octets."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "La taille de clé est requise avec l'option --unbound."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "L'option --unbound peut uniquement être utilisée avec les actions luksAddKey et luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "L'option --refresh peut uniquement être utilisée avec l'action open."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Impossible de désactiver le verrouillage des métadonnées."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "La spécification de la taille maximale de la zone chaude de rechiffrement est invalide."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "La taille de périphérique spécifiée est invalide."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "La taille maximum réduite pour le périphérique est 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "La taille réduite doit être un multiple d'un secteur de 512 octets."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "La taille des données spécifiée est invalide."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Débordement de la taille de réduction."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "Le déchiffrement LUKS2 requiert l'option --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "La taille du périphérique doit être un multiple d'un secteur de 512 octets."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Les options --reduce-device-size et --data-size ne peuvent pas être combinées."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Les options --device-size et --size ne peuvent pas être combinées."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Les options --ignore-corruption et --restart-on-corruption ne peuvent être utilisées ensembles."
+msgstr "Les options --keyslot-cipher et --keyslot-key-size doivent être utilisées ensembles."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Chaîne d'aléa spécifiée invalide."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Impossible de créer l'image de hachage %s en écriture."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Impossible de créer l'image FEC %s en écriture."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Chaîne de hachage racine invalide."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Fichier de signature %s invalide."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Impossible de lire le fichier de signature %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<périph_données> <périph_hachage>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "formater le périphérique"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<périph_données> <périph_hachage> <hachage_racine>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "vérifier le périphérique"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<périph_données> <nom> <périph_hachage> <hachage_racine>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "afficher le statut du périphérique actif"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<périph_hachage>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "afficher les informations sur le disque"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3107,7 +3182,7 @@ msgstr ""
 "<périph_hachage> est le périphérique contenant les données de vérification\n"
 "<hachage_racine> hachage du nœud racine sur <périph_hachage>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3118,126 +3193,139 @@ msgstr ""
 "Paramètres compilés par défaut dans dm-verity :\n"
 "\tHachage: %s, Bloc données (octets): %u, Bloc hachage (octets): %u, Taille aléa: %u, Format hachage: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Ne pas utiliser le superbloc de verity"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Type de format (1: normal ; 0: Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "nombre"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Taille de bloc sur le périphérique de données"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Taille de bloc sur le périphérique de hachage"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Octets de parité FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Le nombre de blocs dans le fichier de données"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "blocs"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Chemin vers le périphérique avec les données de correction d'erreurs"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "chemin"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Décalage de départ sur le périphérique de hachage"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Décalage de départ sur le périphérique FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Algorithme de hachage"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "chaîne"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Aléa"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "chaîne hexa"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Chemin du fichier de signature du hachage racine"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Redémarrer le noyau si une corruption est détectée"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Faire paniquer le noyau si une corruption est détectée"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignore la corruption, elle est seulement enregistrée dans le journal"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Ne pas vérifier les blocs mis à zéro"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Vérifier le bloc de données uniquement à la première lecture"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "L'option --ignore-corruption, --restart-on-corruption ou --ignore-zero-blocks est seulement permise pour une opération d'ouverture."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "L'option --root-hash-signature peut uniquement être utilisée avec l'opération open."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Les options --ignore-corruption et --restart-on-corruption ne peuvent être utilisées ensembles."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Les options --panic-on-corruption et --restart-on-corruption ne peuvent être utilisées ensembles."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "La taille de la clé n'est pas valide. Le maximum est %u octets."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Impossible de lire le fichier de clé %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Échec à la lecture de %d octets du fichier de clé %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formaté avec une taille de balise de %u, intégrité interne %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<périph_intégrité>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<périph_intégrigé> <nom>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3248,403 +3336,409 @@ msgstr ""
 "<nom> est le périphérique à créer sous %s\n"
 "<périph_intégrité> est le périphérique contenant les données avec les balises d'intégrité\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Paramètres compilés par défaut dans dm-integrity :\n"
 "\tAlgorithme de somme de contrôle : %s\n"
+"\tTaille maximale du fichier de clé : %dko\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Chemin vers le périphérique de données (si séparé)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Taille du journal"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Secteurs d'entrelacement"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Filigrane du journal"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "pourcent"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Temps pour écrire le journal"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Nombre de secteurs de 512 octets par bit (mode champ de bit)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Temps de purge du mode champ de bit"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Taille de balise (par secteur)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Taille de secteur"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Taille des tampons"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algorithme d'intégrité des données"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "La taille de la clé d'intégrité des données"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Lire la clef d'intégrité depuis un fichier"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algorithme d'intégrité du journal"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "La taille de la clé du journal d'intégrité"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Lire la clé du journal d'intégrité depuis un fichier"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algorithme de chiffrement du journal"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "La taille de la clé de chiffrement du journal"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Lire la clé de chiffrement du journal depuis un fichier"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Mode récupération (pas de journal, pas de vérification des balises)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Utiliser un champ de bits pour garder une trace des changements et désactiver le journal sur le périphérique d'intégrité"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Recalculer les balises initiales automatiquement."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Ne pas protéger le superbloc avec HMAC (anciens noyaux)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Autoriser le recalcul des volumes avec des clés HMAC (anciens noyaux)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "L'option --integrity-recalculate peut uniquement être utilisée avec l'action open."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Les options --journal-size, --interleave-sectors, --sector-size, --tag-size et --no-wipe peuvent uniquement être utilisée avec l'action de format."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "La spécification de la taille du journal est invalide."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Les options du fichier de clé et de la taille de la clé doivent être spécifiées toutes les deux."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "L'algorithme d'intégrité doit être spécifié si la clé d'intégrité est utilisée."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Les options du fichier de clé de l'intégrité du journal et de la taille de la clé doivent être spécifiées toutes les deux."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "L'algorithme d'intégrité du journal doit être spécifié si la clé d'intégrité du journal est utilisée."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Les options du fichier de clé de chiffrement du journal et de la taille de la clé doivent être spécifiées toutes les deux."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "L'algorithme de chiffrement du journal doit être spécifié si la clé de chiffrement du journal est utilisée."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Les options de mode récupération et champ de bits sont mutuellement exclusives."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Les options de journal ne peuvent pas être utilisées en mode champ de bits."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Les options de champ de bits peuvent uniquement être utilisées en mode champ de bits."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Re-chiffrement déjà en cours."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Impossible d'ouvrir exclusivement %s : périphérique utilisé."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "La réservation de la mémoire alignée a échoué."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Impossible de lire le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Marque le périphérique LUKS1 %s comme inutilisable."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Activation du fanion de re-chiffrement hors-ligne de LUKS2 sur le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Impossible d'écrire le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Impossible d'écrire le journal de re-chiffrement."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Impossible de lire le journal de re-chiffrement."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Fichier journal %s existe. Reprise du re-chiffrement.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Activation du périphérique temporaire en utilisant l'ancien en-tête LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Activation du périphérique temporaire un utilisant le nouvel en-tête LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Échec de l'activation des périphériques temporaires."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Impossible de définir les offsets des données."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Impossible de définir la taille des métadonnées."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Nouvel en-tête LUKS créé pour le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Cette version de cryptsetup-reencrypt ne gère pas le nouveau type de jeton interne %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Échec lors de la lecture des fanions d'activation depuis l'en-tête de sauvegarde."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Échec lors de l'écriture des fanions d'activation dans le nouvel en-tête."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Échec lors de la lecture des exigences de l'en-tête de sauvegarde."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Sauvegarde de l'en-tête %s du périphérique %s créée."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "La création de la sauvegarde des en-têtes LUKS a échoué."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Impossible de rétablir l'en-tête %s sur le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "En-tête %s rétabli sur le périphérique %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Impossible d'ouvrir le périphérique LUKS temporaire."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Impossible d'obtenir la taille du périphérique."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Erreur E/S pendant le re-chiffrement."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Le UUID fourni est invalide."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Impossible d'ouvrir le journal de re-chiffrement."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Pas de déchiffrement en cours. Le UUID fourni ne peut être utilisé que pour reprendre un déchiffrement suspendu."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Les paramètres pbkdf ont été changés dans l'emplacement de clé %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Taille de bloc de re-chiffrement"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Ne pas changer la clé, pas de re-chiffrement de la zone de donnée"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Lire la nouvelle clé (maîtresse) du volume depuis un fichier"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Temps d'itération de PBKDF2 pour LUKS (en ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Utiliser direct-io pour accéder aux périphériques"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Utiliser fsync après chaque bloc"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Mettre le journal à jour après chaque bloc"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Utiliser uniquement cet emplacement (les autres seront désactivés)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Créer un nouvel en-tête sur le périphérique non chiffré"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Déchiffrer le périphérique de manière permanente (supprime le chiffrement)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Le UUID utilisé pour poursuivre le déchiffrement"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Type de métadonnées LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPTION...] <périph>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Le re-chiffrement va changer : %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "clé de volume"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "change hachage en "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", change chiffrement en "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argument requis."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Seules les valeurs entre 1 MiB et 64 MiB sont permises pour la taille des blocs de re-chiffrement."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "La taille maximum réduite pour le périphérique est 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "L'option --new doit être utilisée avec --reduce-device-size ou --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "L'option --keep-key ne peut être utilisée que avec --hash, --iter-time ou --pbkdf-force-iterations²."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "L'option --new ne peut pas être utilisée avec --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "L'option --decrypt est incompatible avec les paramètres spécifiés."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "L'option --uuid ne peut être utilisée qu'avec --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Type luks invalide. Utilisez « luks », « luks1 » ou « luks2 »."
 
@@ -3685,32 +3779,32 @@ msgstr "erreur inconnue"
 msgid "Command failed with code %i (%s).\n"
 msgstr "La commande a échoué avec le code %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Emplacement de clef %i créé."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Emplacement de clé %i déverrouillé."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Emplacement de clé %i supprimé."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Jeton %i créé."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Jeton %i supprimé."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3718,55 +3812,55 @@ msgstr ""
 "\n"
 "Effacement interrompu."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "ATTENTION: Le périphérique %s contient déjà une signature pour une partition « %s ».\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "ATTENTION: Le périphérique %s contient déjà une signature pour un superblock « %s ».\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Impossible d'initialiser les sondes de la signature du périphérique."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Impossible d'exécuter « stat » sur le périphérique %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Le périphérique %s est utilisé. Impossible de continuer avec l'opération de formatage."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Impossible d'ouvrir le fichier %s en mode lecture/écriture."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "La signature de partition « %s » existante (offset: %<PRIi64> octets) sur le périphérique %s sera effacée."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "La signature de superbloc « %s » existante (offset: %<PRIi64> octets) sur le périphérique %s sera effacée."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Impossible d'effacer la signature du périphérique."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Impossible de sonder le périphérique %s pour une signature."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3774,7 +3868,7 @@ msgstr ""
 "\n"
 "Rechiffrement interrompu."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Ne peut vérifier la qualité du mot de passe : %s"
@@ -3793,46 +3887,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Échec de la vérification de la qualité du mot de passe : Mauvais mot de passe (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Erreur de lecture de la phrase secrète depuis la console."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Vérifiez la phrase secrète : "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Les phrases secrètes ne sont pas identiques."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Le décalage n'est pas possible si l'entrée provient de la console."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Saisissez la phrase secrète : "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Saisissez la phrase secrète pour %s : "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Aucune clé disponible avec cette phrase secrète."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Aucun emplacement de clé utilisable est disponible."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Impossible d'ouvrir le fichier de clé %s en écriture."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Impossible d'écrire dans le fichier de clé %s."
@@ -3875,6 +3969,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Erreur lors de l'écriture du fichier JSON."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Impossible de désactiver le fanion de demande de rechiffrement."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Le périphérique seems ne requière pas de récupération de rechiffrement.\n"
+#~ "Voulez-vous quand-même continuer ?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "ATTENTION: Le répertoire verrou %s/%s est manquant !\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Mauvais paramètres de taille pour le périphérique verity."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "L'algorithme d'intégrité doit être spécifié si la clé d'intégrité est utilisée."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Mauvaise taille de clé."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "Le paramètre --refresh est permis uniquement avec les commandes open ou refresh."
 
index b1b0a7b..1a45559 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup 1.1.0-rc4\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2010-01-27 07:30+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -17,69 +17,70 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 #, fuzzy
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Tidak dapat menginisialisasi pemeta-perangkat. Apakah kernel modul dm_mod telah dimuat?\n"
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 #, fuzzy
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Tidak dapat menginisialisasi pemeta-perangkat. Apakah kernel modul dm_mod telah dimuat?\n"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 #, fuzzy
 msgid "Requested deferred flag is not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, fuzzy, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID untuk perangkat %s telah terpotong.\n"
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr ""
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 #, fuzzy
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 #, fuzzy
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 #, fuzzy
 msgid "Requested data integrity options are not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 #, fuzzy
 msgid "Requested sector_size option is not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr ""
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -123,7 +124,7 @@ msgstr "Tidak dapat menginisialisasi backend crypto.\n"
 msgid "Cannot initialize crypto backend."
 msgstr "Tidak dapat menginisialisasi backend crypto.\n"
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, fuzzy, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
@@ -137,7 +138,7 @@ msgstr "Terjadi kesalahan dalam pengolahan kunci.\n"
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr ""
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 #, fuzzy
 msgid "This operation is supported only for LUKS device."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
@@ -147,7 +148,7 @@ msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 #, fuzzy
 msgid "All key slots full."
 msgstr "Semua slot kunci telah penuh.\n"
@@ -162,7 +163,7 @@ msgstr "Slot kunci %d tidak valid, mohon pilih diantara 0 dan %d.\n"
 msgid "Key slot %d is full, please select another one."
 msgstr "Slot kunci %d penuh, mohon pilih yang lain.\n"
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr ""
 
@@ -171,7 +172,8 @@ msgstr ""
 msgid "Header detected but device %s is too small."
 msgstr "Header LUKS terdeteksi tetapi perangkat %s terlalu kecil.\n"
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 #, fuzzy
 msgid "This operation is not supported for this device type."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
@@ -180,18 +182,13 @@ msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 msgid "Illegal operation with reencryption in-progress."
 msgstr ""
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, fuzzy, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "versi LUKS %d tidak didukung.\n"
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-#, fuzzy
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, fuzzy, c-format
 msgid "Device %s is not active."
 msgstr "Perangkat %s tidak aktif.\n"
@@ -206,7 +203,7 @@ msgstr ""
 msgid "Invalid plain crypt parameters."
 msgstr "Parameter crypt tidak valid.\n"
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 #, fuzzy
 msgid "Invalid key size."
 msgstr "Ukuran kunci tidak valid.\n"
@@ -216,12 +213,17 @@ msgstr "Ukuran kunci tidak valid.\n"
 msgid "UUID is not supported for this crypt type."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+#, fuzzy
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr ""
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr ""
 
@@ -266,8 +268,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, fuzzy, c-format
 msgid "Device %s is too small."
 msgstr "Perangkat %s terlalu kecil.\n"
@@ -302,16 +304,16 @@ msgstr "Tidak dapat memformat LUKS tanpat perangkat.\n"
 msgid "Can't format VERITY without device."
 msgstr "Tidak dapat memformat LUKS tanpat perangkat.\n"
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr ""
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr ""
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr ""
 
@@ -341,248 +343,248 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Tipe perangkat sandi %s yang diminta tidak diketahui.\n"
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, fuzzy, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, fuzzy, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Gagal untuk memperoleh direktori pemeta-perangkat."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 #, fuzzy
 msgid "Cannot resize loop device."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr ""
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 #, fuzzy
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Berkas cadangan tidak berisi header LUKS yang valid.\n"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, fuzzy, c-format
 msgid "Volume %s is not active."
 msgstr "Volume %s tidak aktif.\n"
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, fuzzy, c-format
 msgid "Volume %s is already suspended."
 msgstr "Volume %s telah disuspend.\n"
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, fuzzy, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, fuzzy, c-format
 msgid "Error during suspending device %s."
 msgstr "Error selama memperbarui header LUKS di perangkat %s.\n"
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, fuzzy, c-format
-msgid "Volume %s is not suspended."
-msgstr "Volume %s tidak disuspend.\n"
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, fuzzy, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, fuzzy, c-format
 msgid "Error during resuming device %s."
 msgstr "Error selama memperbarui header LUKS di perangkat %s.\n"
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, fuzzy, c-format
+msgid "Volume %s is not suspended."
+msgstr "Volume %s tidak disuspend.\n"
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 #, fuzzy
 msgid "Volume key does not match the volume."
 msgstr "Kunci volume tidak cocok dengan volume.\n"
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 #, fuzzy
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Tidak dapat menambahkan slot kunci, seluruh slot tidak aktif dan tidak ada volume kunci yang disediakan.\n"
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 #, fuzzy
 msgid "Failed to swap new key slot."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, fuzzy, c-format
 msgid "Key slot %d is invalid."
 msgstr "Slot kunci %d tidak valid.\n"
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, fuzzy, c-format
 msgid "Keyslot %d is not active."
 msgstr "Slot kunci %d tidak digunakan.\n"
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr ""
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr ""
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Besar dari kunci enkripsi"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr ""
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr ""
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr ""
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, fuzzy, c-format
 msgid "Device %s already exists."
 msgstr "Perangkat %s telah ada.\n"
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr ""
+
+#: lib/setup.c:4350
 #, fuzzy
 msgid "Incorrect volume key specified for plain device."
 msgstr "Tidak dapat mendapatkan kunci volume untuk perangkat.\n"
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr ""
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr ""
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 #, fuzzy
 msgid "Failed to load key in kernel keyring."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, fuzzy, c-format
 msgid "Device %s is still in use."
 msgstr "Perangkat %s sibuk.\n"
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, fuzzy, c-format
 msgid "Invalid device %s."
 msgstr "Perangkat %s tidak valid.\n"
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 #, fuzzy
 msgid "Volume key buffer too small."
 msgstr "Penyangga kunci volume terlalu kecil.\n"
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 #, fuzzy
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Tidak dapat mendapatkan kunci volume untuk perangkat.\n"
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Tidak dapat mendapatkan kunci volume untuk perangkat.\n"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, fuzzy, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 #, fuzzy
 msgid "Dump operation is not supported for this device type."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, fuzzy, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Tidak dapat membuka perangkat %s untuk akses %s%s.\n"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr ""
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr ""
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, fuzzy, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr ""
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, fuzzy, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -614,8 +616,8 @@ msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 msgid "Cannot seek to requested keyfile offset."
 msgstr ""
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 #, fuzzy
 msgid "Out of memory while reading passphrase."
 msgstr "Kehabisan memori ketika membaca kata sandi.\n"
@@ -637,51 +639,56 @@ msgstr ""
 msgid "Cannot read requested amount of data."
 msgstr ""
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Perangkat %s tidak ada atau akses ditolak.\n"
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, fuzzy, c-format
 msgid "Device %s is not compatible."
 msgstr "Perangkat %s tidak aktif.\n"
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr ""
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr ""
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, fuzzy, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Tidak dapat membuka perangkat %s untuk akses %s%s.\n"
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, fuzzy, c-format
 msgid "Cannot get info about device %s."
 msgstr "Tidak dapat mendapatkan informasi mengenai perangkat %s.\n"
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr ""
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr ""
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr ""
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, fuzzy, c-format
 msgid "Device %s has zero size."
 msgstr "Perangkat %s memiliki ukuran nol.\n"
@@ -757,7 +764,7 @@ msgstr ""
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
 msgstr ""
 
 #: lib/utils_device_locking.c:119
@@ -765,8 +772,8 @@ msgstr ""
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr ""
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 #, fuzzy
 msgid "Cannot seek to device offset."
 msgstr "Tidak dapat membaca perangkat %s.\n"
@@ -796,8 +803,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, fuzzy, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Tidak dapat menghapus perangkat %s.\n"
@@ -819,12 +826,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Besar dari kunci enkripsi"
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, fuzzy, c-format
 msgid "Cannot open device %s."
 msgstr "Tidak dapat membuka perangkat %s.\n"
@@ -845,44 +852,44 @@ msgstr ""
 msgid "LUKS keyslot %u is invalid."
 msgstr "Slot kunci %d tidak valid.\n"
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, fuzzy, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Perangkat %s bukan perangkat LUKS.\n"
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, fuzzy, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Berkas %s yang diminta telah ada.\n"
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, fuzzy, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Tidak dapat membaca berkas cadangan header %s.\n"
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, fuzzy, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Tidak dapat menulis berkas cadangan header %s.\n"
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Berkas cadangan tidak berisi header LUKS yang valid.\n"
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, fuzzy, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Tidak dapat membuka berkas cadangan header %s.\n"
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, fuzzy, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Tidak dapat membaca berkas cadangan header %s.\n"
@@ -905,7 +912,7 @@ msgstr "tidak berisi header LUKS. Mengganti header dapat menghancurkan data di p
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "telah berisi header LUKS. Mengganti header dapat mengganti slot kunci yang telah ada."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -917,103 +924,103 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr ""
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr ""
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr ""
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr ""
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr ""
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, fuzzy, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Slot kunci %d tidak valid.\n"
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr ""
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr ""
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, fuzzy, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Hash %s LUKS yang diminta tidak didukung.\n"
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr ""
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, fuzzy, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Error selama memperbarui header LUKS di perangkat %s.\n"
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, fuzzy, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Error membaca-kembali header LUKS setelah memperbarui di perangkat %s.\n"
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr ""
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 #, fuzzy
 msgid "Wrong LUKS UUID format provided."
 msgstr "Format UUID yang disediakan berbeda, membuat yang baru.\n"
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 #, fuzzy
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Tidak dapat membuat header LUKS: pembacaan garam acak gagal.\n"
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, fuzzy, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Tidak dapat membuat header LUKS: digest header gagal (menggunakan hash %s).\n"
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, fuzzy, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Slot kunci %d aktif, hapus terlebih dahulu.\n"
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, fuzzy, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Slot kunci %d material terdapat terlalu sedikit stripes. Manipulasi header?\n"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Tidak dapat membuka perangkat %s.\n"
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, fuzzy, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Slot kunci %d tidak valid, mohon pilih slot kunci diantara 0 dan %d.\n"
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, fuzzy, c-format
 msgid "Cannot wipe device %s."
 msgstr "Tidak dapat menghapus perangkat %s.\n"
@@ -1049,11 +1056,11 @@ msgstr ""
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr ""
 
@@ -1066,162 +1073,175 @@ msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr ""
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 #, fuzzy
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "versi LUKS %d tidak didukung.\n"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Ukuran kunci tidak valid.\n"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr ""
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, fuzzy, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Perangkat %s bukan perangkat LUKS.\n"
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, fuzzy, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "versi LUKS %d tidak didukung.\n"
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr ""
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, fuzzy, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Format UUID yang disediakan berbeda, membuat yang baru.\n"
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, fuzzy, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Error selama memperbarui header LUKS di perangkat %s.\n"
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr ""
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr ""
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr ""
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr ""
 
@@ -1230,42 +1250,38 @@ msgstr ""
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr ""
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 #, fuzzy
 msgid "Input/output error while creating hash area."
 msgstr "Kehabisan memori ketika membaca kata sandi.\n"
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr ""
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr ""
@@ -1274,54 +1290,62 @@ msgstr ""
 msgid "Failed to allocate RS context."
 msgstr ""
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 #, fuzzy
 msgid "Failed to allocate buffer."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr ""
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, fuzzy, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr ""
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr ""
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, fuzzy, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n"
@@ -1341,116 +1365,116 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Perangkat %s terlalu kecil.\n"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, fuzzy, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Gagal untuk mengakses perangkat penyimpan kunci sementara.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 #, fuzzy
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Data offset atau ukuran kunci berbeda di perangkat dan cadangan, pengembalian gagal.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 #, fuzzy
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Data offset atau ukuran kunci berbeda di perangkat dan cadangan, pengembalian gagal.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, fuzzy, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Perangkat %s %s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 #, fuzzy
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "tidak berisi header LUKS. Mengganti header dapat menghancurkan data di perangkat itu."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 #, fuzzy
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "telah berisi header LUKS. Mengganti header dapat mengganti slot kunci yang telah ada."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 #, fuzzy
 msgid "Failed to set dm-linear segment."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Slot kunci %d telah terverifikasi.\n"
@@ -1481,7 +1505,7 @@ msgstr ""
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr ""
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr ""
 
@@ -1518,632 +1542,666 @@ msgstr ""
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "versi LUKS %d tidak didukung.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Gagal untuk membuka perangkat penyimpan kunci sementara.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "Perangkat %s tidak aktif.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Tidak dapat menginisialisasi backend crypto.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+msgid "Reencryption metadata is invalid."
+msgstr ""
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, fuzzy, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 #, fuzzy
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Tidak dapat melakukan verifikasi kata sandi di masukan bukan tty.\n"
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 #, fuzzy
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 #, fuzzy
 msgid "No known cipher specification pattern detected."
 msgstr "Tidak ada pola spesifikasi cipher yang dikenal terdeteksi.\n"
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr ""
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr ""
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 #, fuzzy
 msgid "Option --key-file is required."
 msgstr "Pilihan --header-backup-file dibutuhkan.\n"
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr ""
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr ""
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 #, fuzzy
 msgid "Invalid PIM value: 0."
 msgstr "Perangkat %s tidak valid.\n"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr ""
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 #, fuzzy
 msgid "No device header detected with this passphrase."
 msgstr "Tidak ada kunci tersedia dengan kata sandi ini.\n"
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Perangkat %s bukan perangkat LUKS.\n"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
 "This dump should be always stored encrypted on safe place."
 msgstr ""
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr ""
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr ""
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr ""
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr ""
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr ""
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
+msgstr ""
+
+#: src/cryptsetup.c:1140
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Masukan kata sandi LUKS yang akan dihapus: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Masukan kasa sandi baru untuk slot kunci: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 #, fuzzy
 msgid "Really try to repair LUKS device header?"
 msgstr "Kembalikan header perangkat LUKS dan slot kunci"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, fuzzy, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 #, fuzzy
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "versi LUKS %d tidak didukung.\n"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, fuzzy, c-format
 msgid "Cannot create header file %s."
 msgstr "Tidak dapat membaca berkas cadangan header %s.\n"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 #, fuzzy
 msgid "No known integrity specification pattern detected."
 msgstr "Tidak ada pola spesifikasi cipher yang dikenal terdeteksi.\n"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr ""
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Ini akan memaksa menulis data di %s secara permanen."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 #, fuzzy
 msgid "Failed to set pbkdf parameters."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr ""
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, fuzzy, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "slot kunci %d terpilih untuk penghapusan.\n"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Ini adalah slot kunci terakhir. Perangkat mungkin akan menjadi tidak stabil setelah menghapus kunci ini."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 #, fuzzy
 msgid "Enter any remaining passphrase: "
 msgstr "Masukan kata sandi LUKS yang tersisa: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 #, fuzzy
 msgid "Enter passphrase to be deleted: "
 msgstr "Masukan kata sandi LUKS yang akan dihapus: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Masukan kasa sandi baru untuk slot kunci: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, fuzzy, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Masukan kata sandi: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 #, fuzzy
 msgid "Enter passphrase to be changed: "
 msgstr "Masukan kata sandi LUKS yang akan dihapus: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 #, fuzzy
 msgid "Enter new passphrase: "
 msgstr "Masukan kata sandi: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 #, fuzzy
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Masukan kasa sandi baru untuk slot kunci: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr ""
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Slot kunci %d tidak digunakan.\n"
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s bukan perangkat LUKS."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 #, fuzzy
 msgid "Option --header-backup-file is required."
 msgstr "Pilihan --header-backup-file dibutuhkan.\n"
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, fuzzy, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s bukan perangkat LUKS."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, fuzzy, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr ""
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr ""
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, fuzzy, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
 "Device will become unusable after this operation."
 msgstr "Ini adalah slot kunci terakhir. Perangkat mungkin akan menjadi tidak stabil setelah menghapus kunci ini."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, fuzzy, c-format
 msgid "Device is already %s type."
 msgstr "Perangkat %s telah ada.\n"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, fuzzy, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr ""
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, fuzzy, c-format
 msgid "Token %d is invalid."
 msgstr "Slot kunci %d tidak valid.\n"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr ""
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, fuzzy, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, fuzzy, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, fuzzy, c-format
 msgid "Token %d is not in use."
 msgstr "Slot kunci %d tidak digunakan.\n"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 #, fuzzy
 msgid "Failed to import token from file."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, fuzzy, c-format
 msgid "Failed to get token %d for export."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, fuzzy, c-format
 msgid "Invalid token operation %s."
 msgstr "Besar kunci %d tidak valid.\n"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Perangkat %s bukan perangkat LUKS.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Gagal untuk memperoleh direktori pemeta-perangkat."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2152,245 +2210,254 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Perangkat %s tidak valid.\n"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Berkas %s yang diminta telah ada.\n"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Tidak dapat membaca berkas cadangan header %s.\n"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr ""
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Masukan kasa sandi baru untuk slot kunci: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Masukan kasa sandi baru untuk slot kunci: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "%s: membutuhkan %s sebagai argumen"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr ""
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 #, fuzzy
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<perangkat> <nama>"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 #, fuzzy
 msgid "open device as <name>"
 msgstr "buka perangkat LUKS sebagai pemetaan <nama>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nama>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr ""
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "ubah ukuran perangkat aktif"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "tampilkan status perangkat"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr ""
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr ""
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<perangkat>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr ""
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "tambahkan kunci ke perangkat LUKS"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 #, fuzzy
 msgid "erase all keyslots (remove encryption key)"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr ""
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<perangkat> [<berkas kunci baru>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "format sebuah perangkat LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "tambahkan kunci ke perangkat LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<perangkat> [<berkas kunci>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "hapus kunci yang diberikan atau berkas kunci dari perangkat LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 #, fuzzy
 msgid "changes supplied key or key file of LUKS device"
 msgstr "hapus kunci yang diberikan atau berkas kunci dari perangkat LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<perangkat> <slot kunci>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "hapus kunci dengan nomor <slot kunci> dari perangkat LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "tampilkan UUID dari perangkat LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "periksa <perangkat> untuk header partisi LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "dump informasi  partisi LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 #, fuzzy
 msgid "dump TCRYPT device information"
 msgstr "dump informasi  partisi LUKS"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "dump informasi  partisi LUKS"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 #, fuzzy
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Hentikan perangkat LUKS dan hapus kunci (semua IO dihentikan)."
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 #, fuzzy
 msgid "Resume suspended LUKS device"
 msgstr "Lanjutkan perangkat LUKS yang dihentikan."
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Buat cadangan header perangkat LUKS dan slot kunci"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Kembalikan header perangkat LUKS dan slot kunci"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2398,7 +2465,7 @@ msgstr ""
 "\n"
 "<aksi> adalah salah satu dari:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2406,7 +2473,7 @@ msgid ""
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 msgstr ""
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2421,14 +2488,14 @@ msgstr ""
 "<slot kunci> adalah nomor slot kunci LUKS untuk dimodifikasi\n"
 "<berkas kunci> adalah berkas kunci opsional untuk kunci baru untuk aksi luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2439,7 +2506,7 @@ msgid ""
 "\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n"
 msgstr ""
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2453,723 +2520,731 @@ msgstr ""
 "\tterbuka: %s, Kunci: %d bits, Hash kata sandi : %s\n"
 "\tLUKS1  : %s, Kunci: %d bits, Hash kepala LUKS: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: membutuhkan %s sebagai argumen"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Tampilkan pesan bantuan ini"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Tampilkan penggunaan singkat"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Tampilkan versi paket"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Pilihan bantuan:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Tampilkan pesan kesalahan secara lebih detail"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Tampilkan pesan penelusuran"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 #, fuzzy
 msgid "Show debug messages including JSON metadata"
 msgstr "Tampilkan pesan penelusuran"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Cipher yang digunakan untuk mengenkripsi ke disk (lihat /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Hash yang digunakan untuk membuat kunci enkripsi dari kata sandi"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifikasi kata sandi dengan menanyakan itu dua kali"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 #, fuzzy
 msgid "Read the key from a file"
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr ""
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr ""
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr ""
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Nomor slot untuk kunci baru (baku adalah yang kosong pertama)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Besar dari perangkat"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTOR"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr ""
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Awal ofset dalam perangkat backend"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Berapa banyak sektor dari data terenkripsi yang dilewatkan di awal"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Buat pemetaan baca-saja"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Jangan tanya untuk konfirmasi"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Waktu habis untuk pertanyaan interaktif kata sandi (dalam detik)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "detik"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Seberapa sering masukan dari kata sandi dapat dicoba"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Sesuaikan muatan di batas sektor <n> - untuk luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 #, fuzzy
 msgid "File with LUKS header and keyslots backup"
 msgstr "Berkas dengan header LUKS dan cadangan slot kunci."
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr ""
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr ""
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr ""
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 #, fuzzy
 msgid "UUID for device to use"
 msgstr "DM-UUID untuk perangkat %s telah terpotong.\n"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr ""
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr ""
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr ""
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr ""
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr ""
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr ""
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr ""
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr ""
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr ""
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr ""
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr ""
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 #, fuzzy
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "waktu iterasi PBKDF2 untuk LUKS (dalam mdet)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "mdetik"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr ""
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr ""
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr ""
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 #, fuzzy
 msgid "Set label for the LUKS2 device"
 msgstr "format sebuah perangkat LUKS"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr ""
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 #, fuzzy
 msgid "LUKS2 header keyslots area size"
 msgstr "Berkas dengan header LUKS dan cadangan slot kunci."
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 #, fuzzy
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr ""
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr ""
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr ""
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr ""
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr ""
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 #, fuzzy
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[PILIHAN...] <aksi> <aksi-spesifik>]"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argumen <aksi> hilang."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Aksi tidak diketahui."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr ""
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr ""
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr ""
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr ""
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
 msgstr ""
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr ""
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr ""
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr ""
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr ""
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Kunci harus kelipatan dari 8 bit"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 #, fuzzy
 msgid "Key slot is invalid."
 msgstr "Slot kunci %d tidak valid.\n"
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr ""
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr ""
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr ""
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr ""
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr ""
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr ""
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr ""
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr ""
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr ""
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr ""
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr ""
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Operasi ini hanya didukunga untuk perangkat LUKS.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr ""
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Operasi ini tidak didukung untuk perangkat crypt %s.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr ""
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr ""
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr ""
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 #, fuzzy
 msgid "Invalid device size specification."
 msgstr "Perangkat %s tidak valid.\n"
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr ""
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 #, fuzzy
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Kunci harus kelipatan dari 8 bit"
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr ""
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr ""
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Kunci harus kelipatan dari 8 bit"
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr ""
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr ""
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr ""
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr ""
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr ""
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Perangkat %s tidak valid.\n"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 #, fuzzy
 msgid "<data_device> <hash_device>"
 msgstr "<nama> <perangkat>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 #, fuzzy
 msgid "format device"
 msgstr "buat perangkat"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr ""
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 #, fuzzy
 msgid "verify device"
 msgstr "hapus perangkat"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr ""
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 #, fuzzy
 msgid "show active device status"
 msgstr "tampilkan status perangkat"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 #, fuzzy
 msgid "<hash_device>"
 msgstr "<perangkat>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr ""
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3179,7 +3254,7 @@ msgid ""
 "<root_hash> hash of the root node on <hash_device>\n"
 msgstr ""
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3187,132 +3262,145 @@ msgid ""
 "\tHash: %s, Data block (bytes): %u, Hash block (bytes): %u, Salt size: %u, Hash format: %u\n"
 msgstr ""
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr ""
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr ""
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr ""
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 #, fuzzy
 msgid "Block size on the data device"
 msgstr "Besar dari perangkat"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 #, fuzzy
 msgid "Block size on the hash device"
 msgstr "Besar dari perangkat"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr ""
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 #, fuzzy
 msgid "Starting offset on the hash device"
 msgstr "Awal ofset dalam perangkat backend"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 #, fuzzy
 msgid "Starting offset on the FEC device"
 msgstr "Awal ofset dalam perangkat backend"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr ""
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr ""
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr ""
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr ""
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr ""
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr ""
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr ""
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr ""
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr ""
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr ""
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr ""
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr ""
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr ""
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Besar kunci %d tidak valid.\n"
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, fuzzy, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, fuzzy, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Tidak dapat membaca %d bytes dari berkas kunci %s.\n"
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 #, fuzzy
 msgid "<integrity_device>"
 msgstr "<perangkat>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 #, fuzzy
 msgid "<integrity_device> <name>"
 msgstr "<perangkat> <nama>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3320,418 +3408,423 @@ msgid ""
 "<integrity_device> is the device containing data with integrity tags\n"
 msgstr ""
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr ""
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr ""
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr ""
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr ""
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 #, fuzzy
 msgid "The size of the data integrity key"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 #, fuzzy
 msgid "Read the integrity key from a file"
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 #, fuzzy
 msgid "The size of the journal integrity key"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 #, fuzzy
 msgid "Read the journal integrity key from a file"
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr ""
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 #, fuzzy
 msgid "The size of the journal encryption key"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 #, fuzzy
 msgid "Read the journal encryption key from a file"
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr ""
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr ""
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr ""
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr ""
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr ""
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, fuzzy, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Tidak dapat membuka perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, fuzzy, c-format
 msgid "Cannot read device %s."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, fuzzy, c-format
 msgid "Cannot write device %s."
 msgstr "Tidak dapat menghapus perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 #, fuzzy
 msgid "Cannot write reencryption log file."
 msgstr "Tidak dapat menulis berkas cadangan header %s.\n"
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 #, fuzzy
 msgid "Cannot read reencryption log file."
 msgstr "Tidak dapat membaca berkas cadangan header %s.\n"
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 #, fuzzy
 msgid "Failed to set data offset."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, fuzzy, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 #, fuzzy
 msgid "Failed to write activation flags to new header."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 #, fuzzy
 msgid "Failed to read requirements from backup header."
 msgstr "Gagal untuk membaca dari penyimpanan kunci.\n"
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, fuzzy, c-format
 msgid "%s header backup of device %s created."
 msgstr "Pilihan --header-backup-file dibutuhkan.\n"
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, fuzzy, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, fuzzy, c-format
 msgid "%s header on device %s restored."
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 #, fuzzy
 msgid "Cannot open temporary LUKS device."
 msgstr "Gagal untuk membuka perangkat penyimpan kunci sementara.\n"
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 #, fuzzy
 msgid "Cannot get device size."
 msgstr "Tidak dapat membaca perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 #, fuzzy
 msgid "Cannot open reencryption log file."
 msgstr "Tidak dapat membuka berkas cadangan header %s.\n"
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 #, fuzzy
 msgid "Read new volume (master) key from file"
 msgstr "Baca volume (master) kunci dari berkas."
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "waktu iterasi PBKDF2 untuk LUKS (dalam mdet)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 #, fuzzy
 msgid "Create new header on not encrypted device"
 msgstr "Tidak dapat menghapus kepala di perangkat %s.\n"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 #, fuzzy
 msgid "The UUID used to resume decryption"
 msgstr "Besar dari kunci enkripsi"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr ""
 
@@ -3776,94 +3869,94 @@ msgstr ""
 msgid "Command failed with code %i (%s).\n"
 msgstr "Perintah gagal dengan kode %i"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, fuzzy, c-format
 msgid "Key slot %i created."
 msgstr "Slot kunci %d telah terverifikasi.\n"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, fuzzy, c-format
 msgid "Key slot %i unlocked."
 msgstr "Slot kunci %d tidak terkunci.\n"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, fuzzy, c-format
 msgid "Key slot %i removed."
 msgstr "Slot kunci %d telah terverifikasi.\n"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr ""
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr ""
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr ""
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 #, fuzzy
 msgid "Failed to initialize device signature probes."
 msgstr "Gagal untuk memperoleh direktori pemeta-perangkat."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, fuzzy, c-format
 msgid "Failed to stat device %s."
 msgstr "Gagal memperoleh data statistik berkas kunci %s.\n"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, fuzzy, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 #, fuzzy
 msgid "Failed to wipe device signature."
 msgstr "Gagal untuk menulis di penyimpanan kunci.\n"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, fuzzy, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Gagal untuk memperoleh direktori pemeta-perangkat."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr ""
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr ""
@@ -3880,49 +3973,49 @@ msgstr "setpriority %u gagal: %s"
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr ""
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 #, fuzzy
 msgid "Error reading passphrase from terminal."
 msgstr "Kesalahan dalam pembacaan kata sandi dari terminal.\n"
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Memverifikasi kata sandi: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 #, fuzzy
 msgid "Passphrases do not match."
 msgstr "Kata sandi tidak cocok.\n"
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr ""
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Masukan kata sandi: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Masukan kata sandi untuk %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 #, fuzzy
 msgid "No key available with this passphrase."
 msgstr "Tidak ada kunci tersedia dengan kata sandi ini.\n"
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, fuzzy, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Tidak dapat membuka berkas %s.\n"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, fuzzy, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Tidak dapat menulis berkas cadangan header %s.\n"
@@ -3963,12 +4056,14 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Gagal membuka berkas kunci %s.\n"
 
+#, c-format
 #~ msgid "Key %d not active. Can't wipe.\n"
 #~ msgstr "Kunci %d tidak aktif. Tidak dapat menghapus.\n"
 
 #~ msgid "Enter LUKS passphrase: "
 #~ msgstr "Masukan kata sandi LUKS: "
 
+#, c-format
 #~ msgid "Warning: exhausting read requested, but key file %s is not a regular file, function might never return.\n"
 #~ msgstr "Peringatan: pembacaan yang melelahkan diminta, tetapi berkas kunci %s bukan sebuah berkas biasa, fungsi mungkin tidak pernah kembali.\n"
 
@@ -3981,24 +4076,30 @@ msgstr "Gagal membuka berkas kunci %s.\n"
 #~ msgid "read-only"
 #~ msgstr "baca-saja"
 
+#, c-format
 #~ msgid "Cannot open device: %s\n"
 #~ msgstr "Tidak dapat membuka perangkat: %s\n"
 
+#, c-format
 #~ msgid "BLKROGET failed on device %s.\n"
 #~ msgstr "BLKROGET gagal di perangkat %s.\n"
 
+#, c-format
 #~ msgid "BLKGETSIZE failed on device %s.\n"
 #~ msgstr "BLKGETSIZE gagal di perangkat %s.\n"
 
 #~ msgid "WARNING!!! Possibly insecure memory. Are you root?\n"
 #~ msgstr "PERINGATAN!!! Kemungkinan menggunakan memori tidak aman. Apakah anda root?\n"
 
+#, c-format
 #~ msgid "Unable to obtain sector size for %s"
 #~ msgstr "Tidak dapat mendapatkan ukuran sektor untuk %s"
 
+#, c-format
 #~ msgid "Backup file %s doesn't exist.\n"
 #~ msgstr "Berkas cadangan %s tidak ada.\n"
 
+#, c-format
 #~ msgid "%s is not LUKS device.\n"
 #~ msgstr "%s bukan perangkat LUKS.\n"
 
index 00e249d..3f9bcf9 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index 82891ab..2b6dc18 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup-2.1.0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2019-01-28 09:18+0100\n"
 "Last-Translator: Milo Casagrande <milo@milo.name>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,63 +20,64 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 "X-Generator: Poedit 2.2.1\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Impossibile inizializzare device-mapper: in esecuzione come utente non-root."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Impossibile inizializzare device-mapper. Forse il modulo kernel dm_mod non è caricato."
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Il flag posticipato richiesto non è supportato."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "Il DM-UUID per il dispositivo %s è stato troncato."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 #, fuzzy
 msgid "Unknown dm target type."
 msgstr "Tipo PBKDF %s non riconosciuto."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Le opzioni di prestazioni richieste per dm-crypt non sono supportate."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Le opzioni di gestione dei dati rovinati richieste per dm-verity non sono supportate."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Le opzioni FEC dm-verity richieste non sono supportate."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Le opzioni di integrità dei dati richieste non sono supportate."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "L'opzione sector_size richiesta non è supportata."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Il ricalcolo automatico dei tag d'integrità non è supportato."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM non è supportato."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Le opzioni di integrità dei dati richieste non sono supportate."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Interrogazione del segmento dm-%s non riuscita."
@@ -118,7 +119,7 @@ msgstr "Impossibile inizializzare il backend crypto RNG."
 msgid "Cannot initialize crypto backend."
 msgstr "Impossibile inizializzare il backend crypto."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Algoritmo di hash %s non supportato."
@@ -132,7 +133,7 @@ msgstr "Errore nell'elaborazione della chiave (usando l'hash %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Impossibile determinare il tipo di dispositivo. Attivazione incompatibile del dispositivo?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Questa operazione è supportata solo per il dispositivo LUKS."
 
@@ -140,7 +141,7 @@ msgstr "Questa operazione è supportata solo per il dispositivo LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Questa operazione è supportata solo per il dispositivo LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Tutti gli slot di chiave sono pieni."
 
@@ -154,7 +155,7 @@ msgstr "Lo slot di chiave %d non è valido, selezionarne uno tra 0 e %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Lo slot di chiave %d è pieno, selezionarne un altro."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta."
@@ -164,7 +165,8 @@ msgstr "La dimensione del dispositivo non è allineata con la dimensione del set
 msgid "Header detected but device %s is too small."
 msgstr "Rilevato un header, ma il dispositivo %s è troppo piccolo."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Questa operazione non è supportata per questo tipo di dispositivo."
 
@@ -173,17 +175,13 @@ msgstr "Questa operazione non è supportata per questo tipo di dispositivo."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Re-cifratura offline in corso. Terminato."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Versione %d di LUKS non supportata."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Il dispositivo di metadati scollegato non è supportato per questo tipo di cifratura."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Il dispositivo %s non è attivo."
@@ -197,7 +195,7 @@ msgstr "Device sottostante a quello cifrato %s scomparso."
 msgid "Invalid plain crypt parameters."
 msgstr "Parametri di cifratura in chiaro non validi."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Dimensione della chiave non valida."
 
@@ -205,12 +203,16 @@ msgstr "Dimensione della chiave non valida."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID non è supportato per questo tipo di cifratura."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Il dispositivo di metadati scollegato non è supportato per questo tipo di cifratura."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Dimensione settore di cifratura non supportato."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta."
 
@@ -254,8 +256,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Il dispositivo %s è troppo piccolo."
@@ -288,16 +290,16 @@ msgstr "Impossibile formattare LOOPAES senza dispositivo."
 msgid "Can't format VERITY without device."
 msgstr "Impossibile formattare VERITY senza dispositivo."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Tipo di hash %d VERITY non supportato."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Dimensione blocco VERITY non supportata."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Offset hash VERITY non supportato."
 
@@ -327,243 +329,243 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Richiesto dispositivo cifrato di tipo %s sconosciuto."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Parametri non supportati sul dispositivo %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Parametri non corrispondenti sul dispositivo %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Impossibile ridimensionare un dispositivo di loopback."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Cambiare veramente l'UUID del dispositivo?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Il file di backup dell'header non contiene un header LUKS compatibile."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Il volume %s non è attivo."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Il volume %s è già sospeso."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "La sospensione non è supportata per il dispositivo %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Errore durante la sospensione del dispositivo %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Il volume %s non è sospeso."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Il ripristino non è supportato per il dispositivo %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Errore durante il ripristino del dispositivo %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Il volume %s non è sospeso."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "La chiave di volume non corrisponde al volume."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Impossibile aggiungere uno slot di chiave, tutti gli slot sono disabilitati e nessuna chiave di volume è stata fornita."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Sostituzione del nuovo slot di chiave non riuscita."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Lo slot di chiave %d non è valido."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Lo slot di chiave %d non è attivo."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "L'header del dispositivo si sovrappone all'area dati."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 #, fuzzy
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Re-cifratura in corso."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Impossibile acquisire blocco del dispositivo di scrittura."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Dimensione settore di cifratura non supportato."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 #, fuzzy
 msgid "Device type is not properly initialized."
 msgstr "Il tipo di dispositivo non è inizializzato correttamente."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Esiste già un dispositivo %s."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Specificata una chiave di volume non corretta per il dispositivo in chiaro."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Specificato un hash root non corretto per il dispositivo verity."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 #, fuzzy
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Il portachiavi del kernel non è supportato dal kernel."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Caricamento chiave nel portachiavi del kernel non riuscito."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Il dispositivo %s è ancora in uso."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Device %s non valido."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Buffer di chiave del volume troppo piccolo."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Impossibile recuperare la chiave di volume per il dispositivo in chiaro."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Specificato un hash root non corretto per il dispositivo verity."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Questa operazione non è supportata per il dispositivo cifrato %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "L'operazione di dump non è supportata per questo tipo di dispositivo."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Impossibile convertire il dispositivo %s che risulta ancora in uso."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Assegnamento slot di chiave %u come nuova chiave del volume non riuscito."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 #, fuzzy
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Inizializzazione parametri predefiniti per lo slot di chiave LUKS2 non riuscita."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Assegnazione slot di chiave %d al digest non riuscita."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Il portachiavi del kernel non è supportato dal kernel."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Lettura della passphrase dal portachiavi non riuscita (errore %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -591,8 +593,8 @@ msgstr "Stat del file chiave non riuscito."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Impossibile posizionarsi all'offset del file di chiave richiesto."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Memoria esaurita durante la lettura della passphrase."
 
@@ -612,51 +614,56 @@ msgstr "Dimensione massima del file chiave superata."
 msgid "Cannot read requested amount of data."
 msgstr "Impossibile leggere la quantità richiesta di dati."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Il dispositivo %s non esiste oppure è negato l'accesso."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Il dispositivo %s non è compatibile."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Il dispositivo %s è troppo piccolo, sono necessari almeno %<PRIu64> byte."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Impossibile utilizzare il dispositivo %s il quale è in uso (già mappato o montato)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Impossibile usare il dispositivo %s, permessi negati."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Impossibile ottenere informazioni sul dispositivo %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Impossibile usare un dispositivo di loopback, in esecuzione come utente non root."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Collegamento del dispositivo di loopback non riuscito (è richiesto un dispositivo di loop con flag autoclear)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "L'offset richiesto è oltre la dimensione reale del dispositivo %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Il dispositivo %s ha dimensione zero."
@@ -730,16 +737,16 @@ msgstr "Blocco interrotto. Il percorso di blocco %s/%s è inutilizzabile (non un
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "Attenzione: la directory di blocco %s/%s non esiste.\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr ""
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Blocco interrotto. Il percorso di blocco %s/%s è inutilizzabile (%s non è una directory)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Impossibile posizionarsi all'offset del dispositivo."
 
@@ -766,8 +773,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "La specifica del cifrario dovrebbe essere nel formato [cifrario]-[modalità]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Impossibile scrivere sul dispositivo %s, permessi negati."
@@ -786,12 +793,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Errore di IO durante la cifratura dello slot di chiave."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Impossibile aprire il dispositivo %s."
@@ -812,44 +819,44 @@ msgstr "Il dispositivo %s è troppo piccolo (LUKS1 richiede almeno %<PRIu64> byt
 msgid "LUKS keyslot %u is invalid."
 msgstr "Lo slot di chiave LUKS %u non è valido."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Il dispositivo %s non è un dispositivo LUKS valido."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Il file di backup dell'header %s richiesto esiste già."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Impossibile creare il file di backup dell'header %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Impossibile scrivere il file di backup dell'header %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Il file di backup non contiene un header LUKS valido."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Impossibile aprire il file di backup dell'header %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Impossibile leggere il file di backup dell'header %s."
@@ -871,7 +878,7 @@ msgstr "non contiene un header LUKS. La sostituzione dell'header può distrugger
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "contiene già un header LUKS. La sostituzione dell'header distruggerà gli slot di chiave esistenti."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -883,101 +890,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Dimensione non standard della chiave, è richiesta una riparazione manuale."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Allineamento slot di chiave non standard, richiesta riparazione manuale."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Riparazione degli slot di chiave."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Slot di chiave %i: offset riparato (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Slot di chiave %i: strisce riparate (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Slot di chiave %i: firma della partizione non corretta."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Slot di chiave %i: salt ripulito."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Scrittura dell'header LUKS sul disco."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Riparazione non riuscita."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "L'hash %s di LUKS richiesto non è supportato."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Nessun problema conosciuto rilevato per l'header LUKS."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Errore durante l'aggiornamento dell'header LUKS sul dispositivo %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Errore nel rileggere l'header LUKS dopo l'aggiornamento sul dispositivo %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "L'offset dei dati per l'header LUKS deve essere 0 o maggiore della dimensione dell'header."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Fornito un formato UUID per LUKS errato."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Impossibile creare l'header LUKS: lettura salt casuale non riuscita."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Impossibile creare l'header LUKS: digest dell'header non riuscito (usando l'hash %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Slot di chiave %d attivo, eliminarlo prima."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Il materiale dello slot di chiave %d contiene troppe poche strisce. Manipolazione dell'header?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Errore nell'elaborazione della chiave (usando l'hash %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Lo slot di chiave %d non è valido, selezionarne uno tra 0 e %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Impossibile ripulire il dispositivo %s."
@@ -1014,11 +1021,11 @@ msgstr "Lunghezza massima (%d) della passphrase TCRYPT superata."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "L'algoritmo di hash PBKDF2 %s non è disponibile, viene saltato."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "L'interfaccia kernel richiesta del cifrario non è disponibile."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Assicurarsi di avere il modulo del kernel algif_skcipher caricato."
 
@@ -1032,167 +1039,180 @@ msgstr "Attivazione non supportata per la dimensione del settore di %d."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Il kernel non supporta l'attivazione per questa modalità legacy TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Attivazione sistema di cifratura TCRYPT per la partizione %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 #, fuzzy
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Il kernel non supporta la mappatura compatibile TCYPRT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Questa funzione non è supportata senza l'header TCRYPT caricato."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Dimensione settore di cifratura non supportato."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, fuzzy, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "Dimensione settore di cifratura non supportato."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, fuzzy, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Questa operazione non è supportata per il dispositivo cifrato %s."
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Dimensione della chiave non valida."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 #, fuzzy
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Attivazione del dispositivo temporaneo non riuscita."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Il dispositivo verity %s non usa header su disco."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Il dispositivo %s non è un dispositivo VERITY valido."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Versione %d di VERITY non supportata."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Header VERITY danneggiato."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Fornito un formato UUID per VERITY errato sul dispositivo %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Errore durante l'aggiornamento dell'header verity sul dispositivo %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "L'hash %s richiesto non è supportato."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Impossibile risolvere gli errori con dispositivo FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Trovati %u errori risolubili con dispositivo FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Il kernel non supporta la mappatura dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Il kernel non supporta la mappatura dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Il dispositivo verity ha rilevato un'anomalia dopo l'attivazione."
 
@@ -1201,41 +1221,37 @@ msgstr "Il dispositivo verity ha rilevato un'anomalia dopo l'attivazione."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "L'area spare non risulta essere a zero alla posizione %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Overflow offset del dispositivo."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Verifica alla posizione %<PRIu64> non riuscita."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Parametri della dimensione non validi per il dispositivo verity."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Overflow dell'area di hash."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Verifica dell'area dati non riuscita."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Verifica dall'hash root non riuscita."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Errore di input/output nel creare l'area hash."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Creazione dell'area hash non riuscita."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "Attenzione: il kernel non può attivare il dispositivo se la dimensione del blocco dati supera la dimensione di pagina (%u)."
@@ -1244,55 +1260,63 @@ msgstr "Attenzione: il kernel non può attivare il dispositivo se la dimensione
 msgid "Failed to allocate RS context."
 msgstr "Allocazione contesto RS non riuscita."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Allocazione buffer non riuscita."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Lettura del blocco RS %<PRIu64> byte %d non riuscita."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Lettura bit di parità per il blocco RS %<PRIu64> non riuscita."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Ripristino della parità per il blocco %<PRIu64> non riuscito."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Scrittura della parità per il blocco RS %<PRIu64> non riuscita."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Le dimensioni del blocco devono corrispondere per FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Numero di byte di parità non valido."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Impossibile determinare la dimensione per il dispositivo %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Il kernel non supporta la mappatura dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Il kernel non supporta la mappatura dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Impossibile acquisire il blocco di scrittura sul dispositivo %s."
@@ -1313,45 +1337,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "L'offset dati richiesto è troppo piccolo."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "Attenzione: l'area degli slot di chiave è molto piccola (%<PRIu64> byte), il conteggio degli slot di chiave LUKS2 disponibili è limitato.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Impossibile acquisire il blocco di lettura sul dispositivo %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Rilevati requisiti LUKS2 proibiti nel backup %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "L'offset di dati è diverso tra il dispositivo e il backup, ripristino non riuscito."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "L'header binario con dimensione aree dello slot di chiave è diverso tra il dispositivo e il backup, ripristino non riuscito."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Il dispositivo %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "non contiene un header LUKS2. La sostituzione dell'header può distruggere i dati su quel dispositivo."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "contiene già un header LUKS2. La sostituzione dell'header distruggerà gli slot di chiave esistenti."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1361,7 +1385,7 @@ msgstr ""
 "Attenzione: requisiti LUKS2 sconosciuti rilevati nell'header del dispositivo reale.\n"
 "La sostituzione dell'header con il backup può danneggiare i dati su quel dispositivo."
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1371,60 +1395,60 @@ msgstr ""
 "Attenzione: rilevata re-cifratura non completata sul dispositivo.\n"
 "La sostituzione dell'header con il backup potrebbe danneggiare i dati."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Flag %s sconosciuto ignorato."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Interrogazione del segmento dm-%s non riuscita."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 #, fuzzy
 msgid "Failed to set dm-linear segment."
 msgstr "Interrogazione del segmento dm-%s non riuscita."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Rilevati requisiti LUKS2 non soddisfatti."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Slot di chiave %i: salt ripulito."
@@ -1456,7 +1480,7 @@ msgstr "Impossibile spostare l'area dello slot di chiave: spazio insufficiente."
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Impossibile spostare l'area dello slot di chiave: spazio insufficiente."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Impossibile spostare l'area dello slot di chiave."
 
@@ -1494,303 +1518,314 @@ msgstr "Impossibile convertire al formato LUKS1: lo slot %u (oltre gli slot mass
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Impossibile convertire al formato LUKS1: lo slot di chiave %u non è compatibile con LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Parametri non supportati sul dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Lettura dei requisiti dall'header di backup non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Lettura bit di parità per il blocco RS %<PRIu64> non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Impossibile determinare la dimensione per il dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, fuzzy, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Esame del dispositivo %s per una firma non riuscito."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Impossibile determinare la dimensione per il dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 #, fuzzy
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Impossibile acquisire il blocco di lettura sul dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Sostituzione del nuovo slot di chiave non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, fuzzy, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, fuzzy, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "La dimensione del dispositivo %s non è allineata con la dimensione del settore richiesta (%u byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Impossibile utilizzare il dispositivo %s il quale è in uso (già mappato o montato)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 #, fuzzy
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Allocazione contesto RS non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Recupero del token %d per l'esportazione non riuscito."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "Il dispositivo %s non è attivo."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 #, fuzzy
 msgid "Reencryption process is already running."
 msgstr "Re-cifratura in corso."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "Impossibile acquisire blocco del dispositivo di scrittura."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 #, fuzzy
 msgid "Active device size and requested reencryption size don't match."
 msgstr "La dimensione del dispositivo non è allineata con la dimensione del settore richiesta."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 #, fuzzy
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Re-cifratura in corso."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 #, fuzzy
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Inizializzazione parametri predefiniti per lo slot di chiave LUKS2 non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 #, fuzzy
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Esame del dispositivo %s per una firma non riuscito."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Scrittura dei flag di attivazione sul nuovo header non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "Riparazione non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Scrittura della parità per il blocco RS %<PRIu64> non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "Impostazione offset dei dati non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Letture dei requisiti LUKS2 non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 #, fuzzy
 msgid "Failed to wipe backup segment data."
 msgstr "Pulizia della firma del dispositivo non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3174
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Assegnazione del token %d allo slot di chiave %d non riuscita."
+
+#: lib/luks2/luks2_reencrypt.c:3398
 #, fuzzy
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Letture dei requisiti LUKS2 non riuscita."
+msgid "Failed to remove reencryption keyslot."
+msgstr "Elimina tutti gli slot di chiavi (rimuove chiave di cifratura)"
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "Allocazione contesto RS non riuscita."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Lo slot di chiave %d non è valido."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Nessun slot token libero."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Impossibile creare token integrato %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Impossibile verificare la passphrase su input non tty."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "I parametri di cifratura dello slot di chiave possono essere impostati solo per dispositivi LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Non è stato rilevato alcun modello noto di specifica di cifrario."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "Attenzione: il parametro --hash viene ignorato in modalità normale con file di chiave specificato.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "Attenzione: l'opzione --keyfile-size viene ignorata, la dimensione di lettura è la stessa della dimensione della chiave di cifratura.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Rilevata firma dispositivo su %s. Attenzione: continuare potrebbe danneggiare i dati esistenti."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operazione interrotta.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "È richiesta l'opzione --key-file."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Inserire PIM VeraCrypt: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Valore PIM non valido: errore di lettura."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Valore PIM non valido: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Valore PIM non valido: fuori dall'intervallo."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Nessun header di dispositivo rilevato con questa passphrase."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Il dispositivo %s non è un dispositivo LUKS valido."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1800,91 +1835,101 @@ msgstr ""
 "confidenziali che permettono di accedere alla partizione cifrata senza passphrase.\n"
 "Questo dump dovrebbe sempre essere salvato in modo cifrato in un luogo sicuro."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Il dispositivo %s è ancora attivo ed è pianificato per essere rimosso.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Il ridimensionamento di un dispositivo attivo richiede la chiave del volume nel portachiavi, ma l'opzione --disable-keyring è impostata."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Benchmark interrotto."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/D\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iterazioni per secondo per chiave di %zu-bit\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/D\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iterazioni, %5u memoria, %1u thread paralleli (CPU) per chiave di %zu-bit (tempo richiesto %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Il risultato del benchmark non è attendibile."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# I test sono approssimati usando solo la memoria (nessun IO dall'archivio).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 "#%*s Algoritmo |    Chiave |       Cifratura |   Decrifrazione\n"
 "\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Il cifrario %s-%s (dimensione chiave di %zd byte) non è disponibile."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 "#     Algoritmo |    Chiave |       Cifratura |   Decrifrazione\n"
 "\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/D"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Inserire la passphrase da eliminare: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Inserire la passphrase da eliminare: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Inserire la passphrase per lo slot da convertire: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Provare a riparare l'header del dispositivo LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1893,104 +1938,108 @@ msgstr ""
 "È possibile interrompere questa operazione premendo Ctrl+C: la parte del dispositivo non pulita\n"
 "conterrà dati di controllo non validi.\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Impossibile disattivare il dispositivo %s temporaneo."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "L'opzione di integrità può essere usata solo col formato LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Opzioni dimensione metadati LUKS2 non supportate."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Impossibile creare il file header %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Non è stato rilevato alcun modello noto di specifica di integrità."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Impossibile usare %s come header on-disk."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Ciò sovrascriverà i dati in %s in modo irreversibile."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Impostazione dei parametri pbkdf non riuscita."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "L'offset di dati ridotti è ammesso solo per l'header LUKS scollegato."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Dispositivo attivato, ma non è possibile rendere i flag permanenti."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Slot di chiave %d selezionato per l'eliminazione."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Questo è l'ultimo slot di chiave. Il dispositivo sarà inutilizzabile dopo aver eliminato questa chiave."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Inserire una delle passphrase rimanenti: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operazione terminata, lo slot di chiave NON è stato pulito.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Inserire la passphrase da eliminare: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Inserire la nuova passphrase per lo slot di chiave: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Inserire una delle passphrase esistenti: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Inserire la passphrase da cambiare: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Inserire la nuova passphrase: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Inserire la passphrase per lo slot da convertire: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "È supportato un solo argomento dispositivo per ogni operazione isLuks."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -2001,12 +2050,12 @@ msgstr ""
 "confidenziali che permettono di accedere alla partizione cifrata senza passphrase.\n"
 "Questo dump dovrebbe sempre essere salvato in modo cifrato in un luogo sicuro."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Lo slot di chiave %d non è attivo."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -2016,30 +2065,40 @@ msgstr ""
 "confidenziali che permettono di accedere alla partizione cifrata senza passphrase.\n"
 "Questo dump dovrebbe sempre essere salvato in modo cifrato in un luogo sicuro."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s non è un dispositivo gestito via cryptsetup."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "È richiesta l'opzione --header-backup-file."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s non è un dispositivo gestito via cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "L'aggiornamento non è supportato per dispositivi di tipo %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Tipo di dispositivo metadati %s non riconosciuto."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Il comando richiede un dispositivo e un nome di mappatura come argomenti."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2048,97 +2107,97 @@ msgstr ""
 "Questa operazione eliminerà tutti gli slot di chiave sul dispositivo %s.\n"
 "Il dispositivo sarà inutilizzabile dopo questa operazione."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operazione terminata, gli slot di chiave NON sono stati puliti.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Tipo LUKS non valido, solo «luks1» o «luks2» sono supportati."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Il dispositivo è già di tipo %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr ""
 "Questa operazione converte %s nel formato %s.\n"
 "\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operazione terminata, il dispositivo NON è stato convertito.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Manca l'opzione --priority, --label o --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Il token %d non è valido."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Il token %d è in uso."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Aggiunta del token luks2-keyring %d non riuscita."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Assegnazione del token %d allo slot di chiave %d non riuscita."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Il token %d non è in uso."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Importazione del token da file non riuscita."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Recupero del token %d per l'esportazione non riuscito."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Il parametro --key-description è obbligatorio per l'azione di aggiunta token."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "L'azione richiede un token specifico. Utilizzare il parametro --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Operazione token %s non valida."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Il dispositivo %s non è un dispositivo LUKS valido."
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2147,240 +2206,249 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Device %s non valido."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "L'opzione di integrità può essere usata solo col formato LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Il file di backup dell'header %s richiesto esiste già."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Impossibile creare il file header %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "Non cambia chiave, nessuna re-cifratura dei dati"
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Il file chiave può essere usato solamente con --key-slot o con esattamente uno slot di chiave attivo."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Inserire la passphrase per lo slot di chiave %u: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Inserire la passphrase per lo slot di chiave %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "Il comando richiede un dispositivo e un nome di mappatura come argomenti."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "La re-cifratura del dispositivo con un profilo di integrità non è supportata."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "Il file di registro %s esiste, viene ripristinata la re-cifratura.\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<dispositivo> [--type <tipo>] [<nome>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "Apre il dispositivo come <nome>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nome>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "Chiude il dispositivo (rimuove la mappatura)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "Ridimensiona il dispositivo attivo"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "Mostra lo stato del dispositivo"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <cifrario>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "Esegue benchmark del cifrario"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<dispositivo>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "Prova a riparare i metadati on-disk"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "Aggiunge chiave al dispositivo LUKS"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "Elimina tutti gli slot di chiavi (rimuove chiave di cifratura)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "Converte LUKS dal/al formato LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "Imposta opzioni di configurazione permanenti per LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<dispositivo> [<nuovo file chiave>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "Formatta un dispositivo LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "Aggiunge chiave al dispositivo LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<dispositivo> [<file chiave>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "Rimuove la chiave fornita o il file chiave dal dispositivo LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "Cambia la chiave fornita o il file chiave del dispositivo LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "Converte una chiave nei nuovi parametri pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<dispositivo> <slot di chiave>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "Ripulisce la chiave con numero <slot di chiave> dal dispositivo LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "Stampa l'UUID del dispositivo LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "Verifica l'header della partizione LUKS di <dispositivo>"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "Esegue il dump delle informazioni della partizione LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "Esegue il dump delle informazioni TCRYPT del dispositivo"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "Esegue il dump delle informazioni TCRYPT del dispositivo"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Sospende il dispositivo LUKS e ripulisce la chiave (operazioni I/O bloccate)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Ripristina il dispositivo LUKS sospeso"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Fa il backup dell'header del dispositivo e degli slot di chiave"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Ripristina l'header del dispositivo LUKS e gli slot di chiave"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <dispositivo>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Gestisce token LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2388,7 +2456,7 @@ msgstr ""
 "\n"
 "<azione> è una tra:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2401,7 +2469,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2416,7 +2484,7 @@ msgstr ""
 "<slot di chiave> è il numero dello slot di chiave LUKS da modificare\n"
 "<file chiave> è il file chiave opzionale per la nuova chiave per l'azione luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2425,7 +2493,7 @@ msgstr ""
 "\n"
 "Formato predefinito metadati compilati: %s (per azione luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2442,7 +2510,7 @@ msgstr ""
 "PBKDF predefinito per LUKS2: %s\n"
 "\tTempo iterazione: %d, memoria richiesta: %dkB, thread paralleli: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2457,463 +2525,471 @@ msgstr ""
 "\tin chiaro: %s, chiave: %d bit, hash della password: %s\n"
 "\tLUKS: %s, chiave: %d bit, hash dell'header LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: la dimensione predefinita della chiave in modalità XTS (due chiavi interne) viene raddoppiata.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: richiede %s come argomenti"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Mostra questo messaggio d'aiuto"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Mostra il modo d'uso sintetico"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Stampa la versione del pacchetto"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Opzioni di aiuto:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Mostra i messaggi di errore con maggior dettaglio"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Mostra i messaggi di debug"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Mostra i messaggi di debug compresi i metadati JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Il cifrario usato per cifrare il disco (vedere /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "L'hash usato per creare la chiave di cifratura dalla passphrase"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifica la passphrase chiedendola due volte"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Legge la chiave da un file"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Legge la chiave (master) del volume dal file."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Esegue il dump della chiave (master) del volume invece delle informazioni sugli slot di chiave"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "La dimensione della chiave di cifratura"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BIT"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Limita la lettura dal file di chiave"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "byte"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Numero di byte da saltare nel file di chiave"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Limita la lettura dal file di chiave appena aggiunto"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Numero di byte da saltare nel file di chiave appena aggiunto"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Numero dello slot per la nuova chiave (il primo libero è quello predefinito)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "La dimensione del dispositivo"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SETTORI"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Usa solo la dimensione specificata del dispositivo (ignora il resto del dispositivo) PERICOLOSO"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "L'offset iniziale del dispositivo di backend"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Quanti settori dei dati cifrati saltare dall'inizio"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Crea una mappatura in sola lettura"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Non chiede conferma"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Timeout per il prompt interattivo della passphrase (in secondi)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "sec"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Aggiornamento linea di avanzamento (in secondi)"
 
 # (NDT) Descrizione dell'opzione
 # --tries, indica il numero di tentativi per richiesta
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Quante volte può essere ritentato l'inserimento della passphrase"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Allinea il payload agli estremi del settore <n> - per luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "File con header LUKS e backup degli slot di chiave"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Usa /dev/random per generare la chiave di volume"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Usa /dev/urandom per generare la chiave di volume"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Condivide il dispositivo con un altro segmento cifrato non sovrapposto"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID per il dispositivo da usare"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Ammette le richieste di scarto (funzione TRIM) per il dispositivo"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Device o file con header LUKS separato"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Non attiva il dispositivo, verifica solamente la passphrase"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Usa header nascosto (dispositivo TCRYPT nascosto)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Il dispositivo è l'unità TCRYPT di sistema (con bootloader)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Usa header TCRYPT di backup (secondario)"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Ricerca anche dispositivo compatibile VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "PIM (Personal Iteration Multiplier) per dispositivo VeraCrypt compatibile"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Interroga PIM (Personal Iteration Multiplier) per dispositivo VeraCrypt compatibile"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Tipo di metadati del dispositivo: luks, plain, loopaes, tcrypt"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Disabilita la verifica della qualità della password (se abilitata)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Usa l'opzione compatibile per prestazioni same_cpu_crypt di dm-crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Usa l'opzione compatibile per prestazioni submit_from_crypt_cpus di dm-crypt"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "La rimozione del dispositivo è posticipata fino a quando l'ultimo utente lo chiude"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Tempo di iterazione di PBKDF per LUKS (in ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "msec"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algoritmo PBKDF (per LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Limite costo memoria PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobyte"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Costo PBKDF parallelo"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "thread"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Costo iterazioni PBKDF (forzato, disabilita benchmark)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Priorità slot di chiave: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Disabilita il blocco dei metadati su disco"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Disabilita il caricamento delle chiavi di volume tramite il portachiavi del kernel"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algoritmo integrità dei dati (solo LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Disabilita il journal per il dispositivo di integrità"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Non pulisce il dispositivo dopo la formattazione"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Non chiede la passphrase se l'attivazione con token non riesce"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Numero token (predefinito: any)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Descrizione chiave"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Dimensione settore di cifratura (predefinito: 512 byte)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 #, fuzzy
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Dimensione settore di cifratura (predefinito: 512 byte)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Imposta flag attivazione persistente per il dispositivo"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Imposta l'etichetta per il dispositivo LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Imposta l'etichetta del sottosistema per il dispositivo LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 #, fuzzy
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Crea slot di chiave LUKS2 non vincolato (segmento dati non assegnato)"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Legge/Scrive JSON da/su file"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Dimensione area metadati header LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Dimensione area slot di chiave header LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Aggiorna (riattiva) il dispositivo con nuovi parametri"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Slot di chiave LUKS2: la dimensione della chiave di cifratura"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Slot di chiave LUKS2: il cifrario usato per la cifratura dello slot di chiave"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Riduce la dimensione dei dati del dispositivo (muove l'offset dei dati) PERICOLOSO"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "Dimensione blocco re-cifratura"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "Dimensione blocco re-cifratura"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPZIONE...] <azione> <azione-specifica>]"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argomento <azione> mancante."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Azione sconosciuta."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 #, fuzzy
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 "Solo un'opzione tra --refresh e --test-passphrase può essere usata.\n"
 "\n"
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr ""
 "L'opzione --deferred è consentita solo per il comando close.\n"
 "\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "L'opzione --shared è consentita solo per l'azione open di dispositivo in chiaro.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "L'opzione --allow-discards è consentita solo per l'azione open.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "L'opzione --persistent è consentita solo per l'azione open.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "L'opzione --allow-discards è consentita solo per l'azione open.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 #, fuzzy
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "L'opzione --persistent non è consentita con --test-passphrase.\n"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -2922,296 +2998,296 @@ msgstr ""
 "L'opzione --key-size è consentita solo per le azioni luksFormat, luksAddKey (con --unbound),\n"
 "open e benchmark. Per limitare la lettura dal file chiave usare --keyfile-size=(byte)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "L'opzione --integrity è consentita solo per luksFormat (LUKS2).\n"
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 #, fuzzy
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr ""
 "L'opzione --integrity-no-wipe può essere usata solo con l'azione format con estensione di integrità.\n"
 "\n"
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Le opzioni --label e --subsystem sono consentite solo per operazioni LUKS2 luksFormat e config.\n"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "L'opzione --test-passphrase è consentita solo per l'operazione open di dispositivo LUKS e TCRYPT.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "La dimensione della chiave deve essere un multiplo di 8 bit"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Lo slot di chiave non è valido."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "L'opzione --key-file ha la precedenza sull'argomento specificato per il file chiave."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Non è ammesso un numero negativo per l'opzione."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "È consentito solo un argomento --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "È consentita solo una tra le opzioni --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "L'opzione --use-[u]random è consentita solo per luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "L'opzione --uuid è consentita solo per luksFormat e luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "L'opzione --align-payload è consentita solo per luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Le opzioni --luks2-metadata-size e --opt-luks2-keyslots-size sono consentite solo luksFormat con LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Specifica di dimensione dei metadati LUKS2 non valida."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Specifica di dimensione dello slot di chiave LUKS2 non valida."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "L'opzione --skip è supportata solo per l'azione open di dispositivi in chiaro e loopaes.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "L'opzione --offset è supportata solo per l'azione open di dispositivi in chiaro e loopaes e per luksFormat.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "L'opzione --tcrypt-hidden, --tcrypt-system o --tcrypt-backup è supportata solo per dispositivo TCRYPT.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "L'opzione --tcrypt-hidden non può essere utilizzata con --allow-discards.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "L'opzione --veracrypt è supportata solo per dispositivo TCRYPT.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 #, fuzzy
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Argomento fornito per il parametro --veracrypt-pim non valido.\n"
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr ""
 "L'opzione --veracrypt-pim è supportata solo per dispositivi compatibili VeraCrypt.\n"
 "\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "L'opzione --veracrypt-query-pim è supportata solo per dispositivi compatibili VeraCrypt.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 #, fuzzy
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 "Solo un'opzione tra --veracrypt-pim e --veracrypt-query-pim può essere usata.\n"
 "\n"
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 #, fuzzy
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "L'opzione --priority può essere solamente ignore/normal/prefer.\n"
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 #, fuzzy
 msgid "Keyslot specification is required."
 msgstr "È richiesta la specifica dello slot di chiave.\n"
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 #, fuzzy
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "La funzione di derivazione della chiave basata su password (PBKDF) può essere solamente pbkdf2 oppure argon2i/argon2id.\n"
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 #, fuzzy
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Le iterazioni forzate PBKDF non possono essere usate assieme all'opzione del tempo delle iterazioni.\n"
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "L'opzione della dimensione del settore non è supportata con questo comando.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 #, fuzzy
 msgid "Key size is required with --unbound option."
 msgstr "La dimensione della chiave è richiesta con l'opzione --unbound.\n"
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 #, fuzzy
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "L'opzione --unbound può essere usata solamente con l'azione luksAddKey.\n"
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "L'opzione --refresh può essere usata solamente con l'azione open.\n"
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 #, fuzzy
 msgid "Cannot disable metadata locking."
 msgstr "Impossibile disabilitare il blocco dei metadati.\n"
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Specifica di dimensione del dispositivo non valida."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Specifica di dimensione del dispositivo non valida."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "La dimensione massima di riduzione del dispositivo è 64 MiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "La dimensione di riduzione deve essere un multiplo di 512 byte."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "Specifica di dimensione del dispositivo non valida."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "Overflow offset del dispositivo."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "La dimensione di riduzione deve essere un multiplo di 512 byte."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 #, fuzzy
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 #, fuzzy
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Le opzioni --align-payload --offset cannot non possono essere utilizzate assieme."
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 #, fuzzy
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr "Le opzioni --ignore-corruption e --restart-on-corruption non possono essere utilizzate assieme.\n"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Stringa salt specificata non valida."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Impossibile creare l'immagine hash %s per la scrittura."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Impossibile creare l'immagine FEC %s per la scrittura."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Stringa hash root specificata non valida."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Device %s non valido."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Impossibile leggere il file chiave %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<dispositivo_dati> <dispositivo_hash>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "Formatta il dispositivo"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<dispositivo_dati> <dispositivo_hash> <hash_root>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "Verifica il dispositivo"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<dispositivo_dati> <nome> <dispositivo_hash> <hash_root>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "Mostra lo stato del dispositivo attivo"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<dispositivo_hash>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "Mostra informazioni on-disk"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3226,7 +3302,7 @@ msgstr ""
 "<dispositivo_hash> è il dispositivo che contiene i dati di verifica\n"
 "<hash_root> è l'hash del nodo radice nel <dispositivo_hash>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3237,130 +3313,145 @@ msgstr ""
 "Parametri predefiniti compilati in dm-verity:\n"
 "\tHash: %s, Blocco dati (byte): %u, Blocco hash (byte): %u, Dimensione salt: %u, Formato hash: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Non usa il super-blocco verity"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Tipo di formato (1 - normale, 0 - ChromeOS originale)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "numero"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "La dimensione del blocco sul dispositivo dati"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "La dimensione del blocco sul dispositivo hash"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Byte di parità FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Il numero di blocchi nel file dati"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "blocchi"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Percorso al dispositivo con i dati di correzione degli errori"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "percorso"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "L'offset iniziale del dispositivo di hash"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "L'offset iniziale del dispositivo FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Algoritmo di hash"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "stringa"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Salt"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "stringa esadecimale"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "Creazione dell'area hash non riuscita."
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Riavvia il kernel se sono rilevati dati rovinati"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+#, fuzzy
+msgid "Panic kernel if corruption is detected"
+msgstr "Riavvia il kernel se sono rilevati dati rovinati"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignora i dati rovinati, li registra solamente"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Non verifica i blocchi azzerati"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Verifica i blocchi dati solo alla prima lettura"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "L'opzione --ignore-corruption, --restart-on-corruption o --ignore-zero-blocks è consentita solo per l'operazione di apertura.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "L'opzione --integrity-recalculate può essere usata solo con l'azione open."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Le opzioni --ignore-corruption e --restart-on-corruption non possono essere utilizzate assieme.\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Le opzioni --ignore-corruption e --restart-on-corruption non possono essere utilizzate assieme.\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Dimensione della chiave non valida."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Impossibile leggere il file chiave %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Impossibile leggere %d byte dal file chiave %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formattato con dimensione tag di %u, integrità interna %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<dispositivo_integrità>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<dispositivo_integrità> <nome>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3371,410 +3462,415 @@ msgstr ""
 "<nome> è il dispositivo da creare in %s\n"
 "<dispositivo_integrità> è il dispositivo che contiene dai con i tag di integrità\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Parametri predefiniti compilati in dm-integrity:\n"
 "\tDimensione tag: %u byte - Algoritmo di controllo: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Percorso al dispositivo dati (se scollegato)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Dimensione journal"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Settori di interfogliazione"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Watermark del journal"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "percento"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Tempo scrittura del journal"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Dimensione tag (per settore)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Dimensione settore"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Dimensione buffer"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algoritmo integrità dati"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "La dimensione della chiave di integrità dei dati"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Legge la chiave di integrità da un file"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algoritmo integrità journal"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "La dimensione della chiave di integrità del journal"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Legge la chiave di integrità del journal da un file"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algoritmo cifratura journal"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "La dimensione della chiave di cifratura del journal"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Legge la chiave di cifratura del journal da un file"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Modalità ripristino (jorunal e verifica tag disattivai)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 #, fuzzy
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Disabilita il journal per il dispositivo di integrità"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Ricalcola i tag iniziali automaticamente"
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "L'opzione --integrity-recalculate può essere usata solo con l'azione open."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 #, fuzzy
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Le opzioni --journal-size, --interleave-sectors, --sector-size, --tag-size e --no-wipe possono essere usate solamente per azioni di formattazione.\n"
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Specifica di dimensione del journal non valida."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione delle chiave."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "L'algoritmo di integrità deve essere specificato se viene usata la chiave di integrità."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione della chiave di integrità del journal."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "L'algoritmo di integrità del journal deve essere specificato se viene usata la chiave di integrità del journal."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Devono essere specificate entrambe le opzioni file della chiave e dimensione della chiave di cifratura del journal."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "L'algoritmo di cifratura del journal deve essere specificato se viene usata la chiave di cifratura del journal."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 #, fuzzy
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 "Solo un'opzione tra --refresh e --test-passphrase può essere usata.\n"
 "\n"
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 #, fuzzy
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "L'opzione di integrità può essere usata solo col formato LUKS2."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Re-cifratura in corso."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Impossibile aprire esclusivamente il dispositivo %s, già in uso."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Allocazione di memoria allineata non riuscita."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Impossibile leggere il dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Impostazione dispositivo LUKS %s come inutilizzabile."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Impostazione flag re-cifratura offline LUKS2 sul dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Impossibile scrivere il dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Impossibile scrivere il file di registro di re-cifratura."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Impossibile leggere il file di registro di re-cifratura."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Il file di registro %s esiste, viene ripristinata la re-cifratura.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Attivazione dispositivo temporaneo usando il vecchio header LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Attivazione dispositivo temporaneo usando il nuovo header LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Attivazione del dispositivo temporaneo non riuscita."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Impostazione offset dei dati non riuscita."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "Impostazione offset dei dati non riuscita."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Creato nuovo header LUKS per il dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Questa versione di cryptsetup-reencrypt non può gestire token interni di tipo %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Lettura dei flag di attivazione dall'header di backup non riuscita."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Scrittura dei flag di attivazione sul nuovo header non riuscita."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Lettura dei requisiti dall'header di backup non riuscita."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Header %s di backup del dispositivo %s creato."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Creazione degli header di backup LUKS non riuscita."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Impossibile ripristinare l'header %s sul dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Ripristinato l'header %s sul dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Impossibile aprire il dispositivo temporaneo LUKS."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Impossibile ottenere la dimensione del dispositivo."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Errore di IO durante la re-cifratura."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Lo UUID fornito non è valido."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Impossibile aprire il file di registro di re-cifratura."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Nessuna decifrazione in corso: lo UUID fornito può essere usato solamente per riprendere un processo di decifrazione."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Parametri pbkdf modificati nello slot di chiave %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Dimensione blocco re-cifratura"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Non cambia chiave, nessuna re-cifratura dei dati"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Legge la chiave (master) del volume da file"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Tempo di iterazione di PBKDF2 per LUKS (in ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Usa IO diretto negli accessi ai dispositivi"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Usa fsync dopo ogni blocco"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Aggiorna il registro a ogni blocco"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Usa solo questo slot (gli altri vengono disabilitati)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Crea un nuovo header su un dispositivo non cifrato"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Decifra definitivamente il dispositivo (rimuove la cifratura)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Lo UUID utilizzato per riprendere la decifrazione"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Metadati di tipo LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPZIONI...] <dispositivo>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "La re-cifratura modificherà: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "chiave volume"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "imposta l'hash a "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", imposta il cifrario a "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argomento richiesto."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Solo valori tra 1 MiB e 64 MiB sono consentiti per la dimensione del blocco di re-cifratura."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "La dimensione massima di riduzione del dispositivo è 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "L'opzione --new deve essere usata con --reduce-device-size o --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "L'opzione --keep-key può essere usata solo con --hash, --iter-time --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "L'opzione --new non può essere usata con --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "L'opzione --decrypt non è compatibile con i parametri specificati."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "L'opzione --uuid può essere usata solo con --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Tipo luks non valido. Usare uno tra: \"luks\", \"luks1\" o \"luks2\"."
 
@@ -3815,32 +3911,32 @@ msgstr "errore sconosciuto"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Comando non riuscito con codice %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Slot di chiave %i creato."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Slot di chiave %i sbloccato."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Slot di chiave %i rimosso."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i creato."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i rimosso."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 #, fuzzy
 msgid ""
 "\n"
@@ -3849,55 +3945,55 @@ msgstr ""
 "\n"
 "Scrittura interrotta."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "Attenzione: il dispositivo %s contiene già una firma di partizione «%s».\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "Attenzione: il dispositivo %s contiene già una firma di super-blocco «%s».\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Inizializzazione sonde per la firma del dispositivo non riuscita."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Stat del dispositivo %s non riuscita."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Il dispositivo %s è in uso. Impossibile procedere con l'operazione di formattazione."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Apertura del file %s in lettura/scrittura non riuscita."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Pulizia della firma del dispositivo non riuscita."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Esame del dispositivo %s per una firma non riuscito."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
@@ -3906,7 +4002,7 @@ msgstr ""
 "\n"
 "Lettura interrotta."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Impossibile controllare la qualità della password: %s"
@@ -3925,46 +4021,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Controllo qualità della password non riuscito: passphrase non valida (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Errore nel leggere la passphrase dal terminale."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Verifica passphrase: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Le passphrase non corrispondono."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Impossibile usare l'offset con l'input da terminale."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Inserire la passphrase: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Inserire la passphrase per %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Nessuna chiave disponibile con questa passphrase."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Impossibile aprire il file chiave %s per la scrittura."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Impossibile scrivere sul file chiave %s."
@@ -4010,18 +4106,29 @@ msgstr "Scrittura file JSON non riuscita."
 #~ msgid "Requested dmcrypt performance options are not supported."
 #~ msgstr "Le opzioni di prestazioni richieste per dmcrypt non sono supportate."
 
+#, c-format
 #~ msgid "Cannot format device %s which is still in use."
 #~ msgstr "Impossibile formattare il dispositivo %s che risulta ancora in uso."
 
+#, c-format
 #~ msgid "Key slot %d is not used."
 #~ msgstr "Lo slot di chiave %d non è utilizzato."
 
 #~ msgid "Function not available in FIPS mode."
 #~ msgstr "Funzione non disponibile in modalità FIPS."
 
+#, c-format
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "Attenzione: la directory di blocco %s/%s non esiste.\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Parametri della dimensione non validi per il dispositivo verity."
+
+#, c-format
 #~ msgid "Cipher %s is not available."
 #~ msgstr "Il cifrario %s non è disponibile."
 
+#, c-format
 #~ msgid "Key slot %d selected for deletion."
 #~ msgstr "Slot di chiave %d selezionato per l'eliminazione."
 
@@ -4039,6 +4146,9 @@ msgstr "Scrittura file JSON non riuscita."
 #~ msgid "close device (deactivate and remove mapping)"
 #~ msgstr "Chiude il dispositivo (disattiva e rimuove la mappatura)"
 
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "L'algoritmo di integrità deve essere specificato se viene usata la chiave di integrità."
+
 #~ msgid "Failed to set PBKDF parameters."
 #~ msgstr "Impostazione parametri PBKDF non riuscita."
 
index dfb77b6..818aba4 100644 (file)
Binary files a/po/ja.gmo and b/po/ja.gmo differ
index 4a555b0..d07ac05 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,14 +1,14 @@
 # Japanese messages for cryptsetup.
 # Copyright (C) 2019, 2020 Free Software Foundation, Inc.
 # This file is put in the public domain, to the extent permitted under applicable law.
-# Hiroshi Takekawa <sian@big.or.jp>, <sian.ht@gmail.com>, 2019, 2020
+# Hiroshi Takekawa <sian@big.or.jp>, <sian.ht@gmail.com>, 2019, 2020, 2021
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-15 21:33+0900\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-23 20:54+0900\n"
 "Last-Translator: Hiroshi Takekawa <sian@big.or.jp>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
 "Language: ja\n"
@@ -17,61 +17,62 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "device-mapper を初期化できません、non-root で実行します。"
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "device-mapper を初期化できません。dm_mod モジュールはロードされてますか?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "指定された延期フラグはサポートされていません。"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "デバイス %s の DM-UUID は短縮されています。"
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "不明な dm target タイプです。"
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "指定された dm-crypt パフォーマンスオプションはサポートされていません。"
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "指定された dm-verity のデータ破壊時の対応についてのオプションはサポートされていません。"
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "指定された dm-verity の誤り訂正(FEC)オプションはサポートされていません。"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "指定されたデータの無改ざん確認のオプションはサポートされていません。"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "指定された sector_size オプションはサポートされていません。"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "指定された改ざん確認タグの自動再計算はサポートされていません。"
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM はサポートしていません。"
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "要求された dm-integrity のビットマップモードはサポートされていません。"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "dm-%s のクエリーに失敗しました。"
@@ -113,7 +114,7 @@ msgstr "暗号向けRNG(乱数生成器)バックエンドの初期化ができ
 msgid "Cannot initialize crypto backend."
 msgstr "暗号バックエンドの初期化ができません。"
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "ハッシュアルゴリズム %s がサポートされていません。"
@@ -127,7 +128,7 @@ msgstr "鍵の処理でエラー (ハッシュ %s を使用)。"
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "デバイスタイプがわかりません。互換性のないデバイスのアクティベーションをしようとしていませんか?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "この操作は LUKS デバイスでしかサポートされていません。"
 
@@ -135,7 +136,7 @@ msgstr "この操作は LUKS デバイスでしかサポートされていませ
 msgid "This operation is supported only for LUKS2 device."
 msgstr "この操作は LUKS2 デバイスでしかサポートされていません。"
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "キースロットがいっぱいです。"
 
@@ -149,7 +150,7 @@ msgstr "キースロット %d は不正です。0 から %d の間を選んで
 msgid "Key slot %d is full, please select another one."
 msgstr "キースロット %d は使われています。別の番号を選んでください。"
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "デバイスサイズが論理ブロックサイズのアライメントに合いません。"
 
@@ -158,7 +159,8 @@ msgstr "デバイスサイズが論理ブロックサイズのアライメント
 msgid "Header detected but device %s is too small."
 msgstr "ヘッダが検出されましたがデバイス %s が小さすぎます。"
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "この操作はこのデバイスタイプではサポートされていません。"
 
@@ -166,17 +168,13 @@ msgstr "この操作はこのデバイスタイプではサポートされてい
 msgid "Illegal operation with reencryption in-progress."
 msgstr "オフラインでの再暗号化中です。中止します。"
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "LUKS バージョン %d はサポートされていません。"
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "分離したメタデータデバイスはこの暗号タイプではサポートされていません。"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "デバイス %s はアクティブではありません。"
@@ -190,7 +188,7 @@ msgstr "暗号化されたデバイス %s の元になるデバイスが消滅
 msgid "Invalid plain crypt parameters."
 msgstr "不正な plain crypt のパラメータ。"
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "不正なキーサイズ。"
 
@@ -198,12 +196,16 @@ msgstr "不正なキーサイズ。"
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID はこの暗号タイプではサポートされていません。"
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "分離したメタデータデバイスはこの暗号タイプではサポートされていません。"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "サポートされていない暗号化セクタサイズです。"
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "デバイスサイズが要求されたセクタサイズのアライメントに合いません。"
 
@@ -247,8 +249,8 @@ msgstr "警告: LUKS2 メタデータサイズが %<PRIu64> バイトに変更
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "警告: LUKS2 キースロット領域サイズが %<PRIu64> バイトに変更されました。\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "デバイス %s のサイズが小さすぎます。"
@@ -281,16 +283,16 @@ msgstr "LOOPAES としてフォーマットするにはデバイスが必要で
 msgid "Can't format VERITY without device."
 msgstr "VERITY としてフォーマットするにはデバイスが必要です。"
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "VERITY ハッシュタイプ %d はサポートしていません。"
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "サポートしていない VERITY ブロックサイズです。"
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "サポートしていない VERITY ハッシュオフセットです。"
 
@@ -320,236 +322,236 @@ msgstr "警告: 指定されたタグのサイズ %d バイトが %s の出力
 msgid "Unknown crypt device type %s requested."
 msgstr "不明な暗号デバイスタイプ %s が指定されました。"
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "デバイス %s のパラメータはサポートしていません。"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "デバイス %s のパラメータがミスマッチしています。"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Crypt デバイスが一致しません。"
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "デバイス %s のリロードに失敗しました。"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "デバイス %s のサスペンドに失敗しました。"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "デバイス %s のリジュームに失敗しました。"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "デバイス %s のリロード中に致命的なエラー(デバイス %s の上で)。"
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "デバイス %s を dm-error にスイッチできません。"
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "ループデバイスはリサイズできません。"
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "デバイスの UUID を本当に変更してもいいですか?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "ヘッダのバックアップファイルの中味が LUKS ヘッダと互換性がありません。"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "ボリューム %s はアクティブではありません。"
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "ボリューム %s は既に停止されています。"
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "デバイス %s の停止はサポートされていません。"
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "デバイス %s 停止中にエラー。"
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "ボリューム %s は停止されていません。"
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "デバイス %s は再開をサポートしていません。"
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "デバイス %s の再開中にエラー。"
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "ボリューム %s は停止されていません。"
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "ボリュームキーがボリュームに合いません。"
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "キースロットを追加できません。全てのスロットが無効でボリュームキーが渡されませんでした。"
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "新しいキースロットを交換できませんでした。"
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "キースロット %d は不正です。"
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "キースロット %d は非アクティブです。"
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "デバイスヘッダがデータ領域に重なっています。"
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "既に再暗号化中です。デバイスをアクティベートできません。"
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "再暗号化ロックを取得できません。"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "LUKS2 の再暗号化は既に初期化されました。"
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "デバイスタイプが正しく初期化されていません。"
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "デバイス %s を使えません。名前が不正か使用中です。"
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "デバイス %s は既に存在します。"
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "デバイス %s を使えません。名前が不正か使用中です。"
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "正しくないボリュームキーがプレーンデバイスに指定されました。"
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "正しくないルートハッシュが verity デバイスに指定されました。"
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "ルートハッシュ署名が必要です。"
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "署名をカーネルに渡すのに必要なカーネルキーリングをカーネルがサポートしていません。"
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "キーをカーネルキーリングにロードできません。"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "デバイス %s は使用中です。"
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "デバイス %s は不正です。"
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "ボリュームキーのバッファが小さすぎます。"
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "プレーンデバイス向けのボリュームキーが取得できません。"
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "verity デバイスのルートハッシュが読み出せません。"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "この操作は %s 暗号化デバイスではサポートされていません。"
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "このデバイスタイプはダンプ操作をサポートしていません。"
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "データオフセットが %u バイトの倍数である必要があります。"
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "使用中のデバイス %s を変換できません。"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "新しいボリュームキー向けのキースロット %u を確保できません。"
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "デフォルト LUKS2 キースロットパラメータを初期化できません。"
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "ダイジェストするためのキースロット %d が確保できません。"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "カーネルがカーネルキーリングをサポートしていません。"
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "キーリングからパスフレーズが読み出せません (エラー %d)。"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "グローバル memory-hard アクセス直列化ロックが取れません。"
 
@@ -577,8 +579,8 @@ msgstr "キーファイルを stat() できません。"
 msgid "Cannot seek to requested keyfile offset."
 msgstr "指定されたキーファイルオフセットにシークできません。"
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "パスフレーズ読み込み中にメモリが不足しました。"
 
@@ -598,51 +600,56 @@ msgstr "キーファイルが最大サイズを超えています。"
 msgid "Cannot read requested amount of data."
 msgstr "指定されたサイズのデータを読み込めません。"
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "デバイス %s は存在しないかアクセスが拒否されました。"
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "デバイス %s は互換性がありません。"
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "データデバイスのおかしな(bogus) optimal-io サイズ (%u バイト) は無視します。"
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "デバイス %s が小さすぎます。少なくとも %<PRIu64> バイト必要です。"
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "デバイス %s は使用中で使えません (既にマップされているかマウントされています)。"
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "デバイス %s が使えません、拒否されました。"
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "デバイス %s についての情報が取得できません。"
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "ループバックデバイスが使えません、非 root ユーザで実行していませんか。"
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "ループデバイスのアタッチできません (autoclear 付きのループデバイスが必要です)。"
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "指定されたオフセットはデバイス %s の実際のサイズを超えています。"
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "デバイス %s のサイズが 0 です。"
@@ -716,16 +723,16 @@ msgstr "ロックを中止します。ロックに使うパス %s/%s が使用
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "警告: ロックに使うディレクトリ %s/%s がありません!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "ロックディレクトリ %s/%s がコンパイル時に指定されたパーミッションで作成されます。"
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "ロックを中止します。ロックに使うパス %s/%s が使用できません (%s はディレクトリではありません)。"
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "デバイスオフセットまで seek できません。"
 
@@ -752,8 +759,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "暗号の指定は [暗号]-[モード]-[初期ベクタ] という形式であるべきです。"
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "デバイス %s に書き込めません。パーミッションがありません。"
@@ -772,12 +779,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "キースロットを暗号化中にI/Oエラーが発生しました。"
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "デバイス %s を開けません。"
@@ -798,43 +805,43 @@ msgstr "デバイス %s が小さすぎます。(LUKS1 は最低でも %<PRIu64>
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS キースロット %u は不正です。"
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "デバイス %s は有効な LUKS デバイスではありません。"
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "要求されたヘッダバックアップファイル %s は既に存在しています。"
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "ヘッダバックアップファイル %s が作成できません。"
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "ヘッダバックアップファイル %s に書き込めません。"
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "バックアップファイルが有効な LUKS ヘッダを含んでいません。"
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "ヘッダバックアップファイル %s をオープンできません。"
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "ヘッダバックアップファイル %s を読めません。"
@@ -856,7 +863,7 @@ msgstr "LUKS ヘッダが含まれていません。ヘッダを置き換える
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "LUKS ヘッダを既に含んでいます。ヘッダを置き換えると既にあるキースロットを破壊します。"
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -868,101 +875,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "標準的でないキーサイズなので、手動の修復が必要です。"
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "標準的でないキースロットアライメントなので、手動の修復が必要です。"
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "キースロットを修復中です。"
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "キースロット %i: オフセットを修復 (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "キースロット %i: のストライプを修復 (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "キースロット %i: パーティションの印(signature)がおかしいです。"
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "キースロット %i: ソルトを消しました。"
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "LUKS ヘッダを書きこんでいます。"
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "修復に失敗しました。"
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "要求された LUKS ハッシュ %s はサポートしていません。"
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "LUKS ヘッダに既知の不具合は検出されませんでした。"
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "デバイス %s の LUKS ヘッダを更新中にエラーが発生しました。"
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "デバイス %s の LUKS ヘッダを更新後の再読み込み中にエラーが発生しました。"
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "LUKS ヘッダのデータへのオフセットは 0 かヘッダサイズより大きくなければいけません。"
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "LUKS UUID の形式が間違っています。"
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "LUKS ヘッダを作成できません: ランダムなソルトを読み込めません。"
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "LUKS ヘッダを作成できません: ヘッダのハッシュが求められません (ハッシュには %s を使用)。"
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "キースロット %d が使用中なので、パージしてください。"
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "キースロット %d のストライプが少なすぎます。ヘッダを細工でもしましたか?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "キースロットをオープンできません (ハッシュ %s を使用)。"
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "キースロット %d は不正です。0 から %d の間を選んでください。"
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "デバイス %s をワイプできません。"
@@ -998,11 +1005,11 @@ msgstr "TCRYPT パスフレーズの最大長 (%zu) を超えました。"
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2 ハッシュアルゴリズム %s が利用できないのでスキップします。"
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "必要なカーネル crypto インターフェースが使用できません。"
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "algif_skcipher カーネルモジュールをロードしてください。"
 
@@ -1015,159 +1022,173 @@ msgstr "アクティベーションは %d セクタサイズではサポート
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "カーネルが TCRYPT レガシーモードのアクティベーションをサポートしていません。"
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "TCRYPT システム暗号をパーティション %s に対してアクティベーションしました。"
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "カーネルが TCRYPT 互換のマッピングをサポートしていません。"
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "この機能は TCRYPT ヘッダの読み込みなしではサポートしません。"
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "ボリュームマスターキーを解釈中に予期しないメタデータエントリタイプ '%u' が見つかりました。"
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "ボリュームマスターキーを解釈中に不正な文字列が見つかりました。"
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "ボリュームマスターキーを解釈中に予期しない文字列 ('%s') が見つかりました。"
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "ボリュームマスターキーを解釈中に予期しないメタデータエントリー値 '%u' が見つかりました。"
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "%s から BITLK シグネチャを読み込めませんでした。"
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "BITLK デバイスのシグネチャが不正また不明です。"
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK version 1 はサポートされていません。"
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "BITLK デバイスのブートシグネチャが不正また不明です。"
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "BITLK デバイスのシグネチャが不正また不明です。"
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "サポートされていないセクタサイズ %<PRIu16> です。"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "%s から BITLK ヘッダを読み出すのに失敗しました。"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "%s から BITLK FVE メタデータを読み込めませんでした。"
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "不明かサポートされていない暗号化タイプです。"
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "%s から BITLK メタデータエントリを読み込めませんでした。"
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "外部キーを解釈中に予期しないメタデータエントリタイプ '%u' が見つかりました。"
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "外部キーを解釈中に予期しないメタデータエントリー値 '%u' が見つかりました。"
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "スタートアップキーを解釈中に予期しないメタデータエントリが見つかりました。"
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "この操作はサポートされていません。"
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "ä¸\8dæ­£ã\81ªã\82­ã\83¼ã\82µã\82¤ã\82º。"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "äº\88æ\9c\9fã\81\97ã\81ªã\81\84ã\82­ã\83¼ã\83\87ã\83¼ã\82¿ã\82µã\82¤ã\82ºã\81§ã\81\99。"
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "この BITLK デバイスはサポートされてない状態にあるためアクティベートできません。"
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "タイプ '%s' の BITLK デバイスはアクティベートできません。"
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "部分的に復号された BITLK デバイスのアクティベーションはサポートされていません。"
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "カーネルの dm-crypt が BITLK IV をサポートしていないためデバイスをアクティベートできません。"
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "カーネルの dm-crypt が BITLK Elephant diffuser をサポートしていないためデバイスをアクティベートできません。"
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Verity デバイス %s はディスク上のヘッダを使いません。"
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "デバイス %s が有効な VERITY デバイスではありません。"
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "VERITY バージョン %d はサポートされていません。"
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY ヘッダが壊れています。"
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "デバイス %s の VERITY UUID フォーマットが間違っています。"
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "デバイス %s の verity ヘッダを更新中にエラー。"
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "ルートハッシュ署名の検証はサポートしていません。"
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "FEC デバイスのエラーが修復できません。"
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "FEC デバイスに %u 個の修復可能なエラーが見つかりました。"
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "カーネルが dm-verity マッピングをサポートしていません。"
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "カーネルが dm-verity 署名オプションをサポートしていません。"
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "アクティベーションされた Verity デバイスが破損が見つかりました。"
 
@@ -1176,41 +1197,37 @@ msgstr "アクティベーションされた Verity デバイスが破損が見
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "ポジション %<PRIu64> にあるスペア領域が 0 埋めされていません。"
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "デバイスオフセットオーバーフロー。"
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "検証がポジション %<PRIu64> で失敗しました。"
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "verity デバイスのパラメータサイズが不正です。"
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "ハッシュ領域がオーバーフロー。"
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "データ領域の検証に失敗しました。"
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "ルートハッシュの検証に失敗しました。"
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "ハッシュ領域を生成中に I/O エラー。"
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "ハッシュ領域の作成に失敗しました。"
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "警告: カーネルはデータブロックサイズがページサイズ (%u) を超えているとアクティベートできません。"
@@ -1219,53 +1236,61 @@ msgstr "警告: カーネルはデータブロックサイズがページサイ
 msgid "Failed to allocate RS context."
 msgstr "Reed-Solomon 処理のためのコンテキストが確保できません。"
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "バッファを確保できませんでした。"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Reed-Solomon ブロック %<PRIu64> バイト %d を読み込めませんでした。"
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Reed-Solomon ブロック %<PRIu64> のパリティを読み込めませんでした。"
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "ブロック %<PRIu64> のパリティが修復できませんでした。"
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Reed-Solomon ブロック %<PRIu64> のパリティの書き込みに失敗しました。"
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "ブロックサイズが FEC と合っていません。"
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "パリティのバイト数が不正です。"
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "FEC セグメント長が不正です。"
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "デバイス %s のサイズが不明です。"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "カーネルが dm-integrity マッピングをサポートしていません。"
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "カーネルが dm-integrity 固定メタデータアラインメントをサポートしていません。"
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "カーネルが安全でない再計算オプションを拒否しました (レガジーアクティベーションオプションでオーバーライドできます)。"
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "デバイス %s の書き込みのためのロックを取得できませんでした。"
@@ -1286,45 +1311,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "要求されたデータオフセットが小さすぎます。"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "警告: キースロット領域 (%<PRIu64> バイト) がとても小さいため、利用可能な LUKS2 キースロット数が制限されます。\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "デバイス %s の読み込みのためのロックを取得できませんでした。"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "禁止された LUKS2 要求がバックアップ %s に検出されました。"
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "データオフセットがデバイスとバックアップと異なるため修復できません。"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "キースロット領域のあるバイナリヘッダのサイズがデバイスとバックアップで異なるため修復できません。"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "デバイス %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "LUKS2 ヘッダが含まれていません。ヘッダを置き換えるとデータを破壊しかねません。"
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "既に LUKS2 ヘッダがあります。ヘッダを置き換えると既にあるキースロットを破壊します。"
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1334,7 +1359,7 @@ msgstr ""
 "警告: 不明な LUKS2 への要求がリアルデバイスヘッダにあります!\n"
 "ヘッダをバックアップで置き換えるとデータを破壊する恐れがあります!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1344,58 +1369,58 @@ msgstr ""
 "警告: オフラインの再暗号化が終了していません!\n"
 "ヘッダを置き換えるとデータを破壊しかねません。"
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "不明なフラグ %s を無視しました。"
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "dm-crypt セグメント %u にキーがありません"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "dm-crypt セグメントの設定に失敗しました。"
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "dm-linear セグメントの設定に失敗しました。"
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "サポートしていないデバイス整合性設定です。"
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "再暗号化が実行中なのでデバイスのデアクティベートできません。. Cannot deactivate device."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "サスペンドされたデバイス %s を dm-error ターゲットで置き換えられません。"
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "LUKS2 の必要条件を読み込めませんでした。"
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "満たせない LUKS2 の必要条件があります。"
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "操作がレガシー再暗号化とマークされたデバイスと互換性がありません。中止します。"
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "操作が LUKS2 再暗号化とマークされたデバイスと互換性がありません。中止します。"
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "キースロットをオープンするのにメモリが足りません。"
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "キースロットのオープンに失敗しました。"
 
@@ -1425,7 +1450,7 @@ msgstr "領域が足りないのでキースロット領域を動かせません
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "LUKS2 キースロット領域が足りないのでキースロット領域を動かせません。"
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "キースロット領域を動かせません。"
 
@@ -1462,281 +1487,293 @@ msgstr "LUKS1 形式に変換できません - スロット %u が(最大個数
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "LUKS1 形式に変換できません - キースロット %u が LUKS1 と互換ではありません。"
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "ホットゾーンサイズは計算されたゾーンアライメントの倍数である必要がありす (%zu バイト)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "デバイスサイズが計算ゾーンアライメント (%zu バイト) に合っていません。"
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "弾性(resilience)モード %s はサポートしていません"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "古いセグメントのストレージラッパの初期化に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "新しいセグメントのストレージラッパの初期化に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "現在のホットゾーンのチェックサムを読み込めません。"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "%<PRIu64> から始めるホットゾーンエリアを読み込めません。"
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "セクタ %zu を復号できません。"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "セクタ %zu を復元できません。"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "ソースとターゲットデバイスのサイズが一致しません。ソース %<PRIu64>, ターゲット: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "ホットゾーンデバイス %s がアクティベートできません。"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "実際の origin table があるオーバーレイデバイス %s をアクティベートできません。"
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "デバイス %s の新しいマッピングをロードできません。"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "再暗号化デバイススタックのリフレッシュに失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "新しいキースロットエリアサイズを設定できません。"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "データシフトが要求された暗号化セクタサイズにアラインされていません(%<PRIu32> bytes)。"
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "データデバイスが要求された暗号化セクタサイズにアラインされていません(%<PRIu32> bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "データシフト (%<PRIu64> セクタ) が今後のデータオフセットより少ないです (%<PRIu64> セクタ)。"
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "デバイス %s を排他モードでオープンでません (既にマップされているかマウントされています)。"
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "デバイスは LUKS2 再暗号化向けにマークされていません。"
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "LUKS2 再暗号化コンテキストをロードできません。"
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "再暗号化状態を取得できません。"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "デバイス %s は再暗号化中ではありません。"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "既に再暗号化中です。"
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "再暗号化ロックを取得できません。"
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "再暗号化を開始できません。再暗号化のリカバリを先にしてください。"
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "実際のデバイスサイズと要求された再暗号化サイズが一致しません。"
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "再暗号化のパラメータとして不正なデバイスサイズが要求されました。"
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "既に再暗号化中です。復元を実行できません。"
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "メタデータの LUKS2 の再暗号化は既に初期化されました。"
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "メタデータの LUKS2 再暗号化に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "デバイスセグメントの次の再暗号化ホットゾーンの設定に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "再暗号化した耐性用メタデータを書き込めません。"
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "復号に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "%<PRIu64> から始まるホットゾーンエリアに書き込めません。"
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "データを sync できません。"
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "現在のホットゾーンの再暗号化完了後にメタデータが更新できません。"
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "LUKS2 メタデータが書き込めません。"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "バックアップセグメントデータを消せません。"
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "再暗号化の要求(requirement)フラグを禁止できません。"
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "トークン %d をキースロット %d に割りあてられませんでした。"
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "再暗号化ロックを取得できません。"
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "%<PRIu64> から %<PRIu64> セクタのチャンクの再暗号化中に致命的なエラー。"
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "手動でエラーターゲットに置き換えた場合以外はデバイスのレジュームをしないでください。"
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "再暗号化を開始できません。予期しない再暗号化状態です。"
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "ないか不正な再暗号化コンテキストです。"
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "再暗号化デバイススタックの初期化に失敗しました。"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "再暗号化コンテキストが更新できません。"
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "キースロット %d は不正です。"
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "空きトークンスロットがありません。"
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "ビルトイントークン %s が作成できません。"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "tty 入力以外ではパスフレーズ認証できません。"
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "キースロットの暗号化パラメータは LUKS2 デバイスでしか設定できません。"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "未知の暗号スペックです。"
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "警告: --hash パラメータは plain モードでキーファイルが指定されていると無視されます。\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "警告: --keyfile-size オプションは無視されて、読み込みサイズは暗号鍵のサイズと同じになります。\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "%s にデバイス署名が検出されました。既にあるデータを破壊しかねません。"
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "中止されました。\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "オプション --key-file が必要です。"
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "VeraCrypt PIM を入力してください: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "不正な PIM: 解釈できません。"
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "不正 PIM の値で 0 です。"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "不正な PIM の値: 範囲外です。"
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "このパスフレーズではデバイスヘッダが検出されませんでした。"
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "デバイス %s は有効な BITLK デバイスではありません。"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1746,88 +1783,96 @@ msgstr ""
 "暗号化されたパーティションにパスフレーズなしでアクセス可能にます。\n"
 "このダンプは暗号化された安全な所に保存してください。"
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "デバイス %s はまたアクティブで後から削除される予定になっています。.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "アクティブなデバイスをリサイズするにはボリュームキーがキーリングに必要ですが、--disable-keyring が指定されています。"
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "ベンチマークが中止されました。"
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     計測値なし\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u 回/秒 (%zu ビットの鍵)\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s 計測値なし\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u 回, %5u KB使用, %1u スレッド (%zu のビットの鍵) (%u ms 計測)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "ベンチマークの結果は信頼できません。"
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# テストはストレージI/Oがなくメモリ上のもののため目安です。\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algorithm |      キー |          暗号化 |           復号化\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "暗号 %s (キーサイズ %i ビット) は利用できません。"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#     Algorithm |      キー |          暗号化 |           復号化\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "計測値なし"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"デバイスは再暗号化のリカバリを必要としていなそうです。\n"
-"本当にやりますか?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "再暗号化のリカバリのためのパスフレーズを入力してください: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "本当に LUKS2 再暗号化リカバリを行いますか?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "再暗号化のリカバリのためのパスフレーズを入力してください: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "再暗号化のリカバリのためのパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "本当に LUKS デバイスヘッダの復元を試みていいですか?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1835,104 +1880,108 @@ msgstr ""
 "整合性チェックサムの初期化のためにデバイスのデータを消去しています。\n"
 "CTRL+c で中止できます (初期化されなかったデバイスのチェックサムは正しくなくなります)。\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "一時的デバイス %s を非アクティブにできません。"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "整合性オプションは LUKS2 形式でしか使えません。"
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "サポートされていない LUKS2 メタデータのサイズオプションです。"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "ヘッダファイルがありません。作成しますか?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "ヘッダファイル %s を作成できません。"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "サポートしている整合性確認方式が検出されませんでした。"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "%s を on-disk ヘッダとして使えません。"
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "%s のデータを上書きします。戻せません。"
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "pbkdf パラメータを設定できません。"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "分離された LUKS ヘッダでのみ少ないデータオフセットが使えます。"
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "キースロットのない LUKS のボリュームキーサイズが決定できないので、--key-size を使ってください。"
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "デバイスはアクティベートされましたが、フラグを恒常的なものにできません。"
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "キースロット %d は削除対象として選択されました。"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "これは最後のキースロットです。このキーがなくなるとデバイスは使用不能になります。"
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "残っているパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "操作は中止されました。キースロットは消去されていません。\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "削除するキーのパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "キースロットの新しいパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "有効なパスフレーズをどれか入力してください: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "変更するキーのパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "新しいキーのパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "変換されるキースロットのパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "isLuks は一つのデバイス引数しかサポートしていません。"
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1942,12 +1991,12 @@ msgstr ""
 "暗号化されたパーティションにパスフレーズなしでアクセス可能になります。\n"
 "このダンプは暗号化された安全な所に保存してください。"
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "キースロット %d は unbound キーを含んでいません。"
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1955,30 +2004,40 @@ msgstr ""
 "unbound キーを使ったヘッダダンプは取り扱いに注意すべき情報です。\n"
 "このダンプは暗号化された安全な所に保存してください。"
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s はアクティブな %s デバイスではありません。"
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s はアクティブな LUKS デバイス名ではないか、ヘッダがありません。"
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "オプション --header-backup-file が必要です。"
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s は cryptsetup で管理されているデバイスではありません。"
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "リフレッシュはデバイスタイプ %s ではサポートされていません。"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "%s は認識できないメタデータデータタイプです。"
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "コマンドはデバイスとマップされた名前を引数として必要とします。"
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1987,95 +2046,95 @@ msgstr ""
 "この処理はデバイス %s の全てのキースロットを消去します。\n"
 "デバイスのデータは使用できなくなります。"
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "処理は中止されました。キースロットは消去されません。\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "不正な LUKS タイプです。luks1 と luks2 しかサポートしていません。"
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "デバイスは既にタイプ %s です。"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "この処理は %s から %s フォーマットに変換します。\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "処理は中止されました。デバイスは変換されませんでした。\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "オプション --priority, --label か --subsystem がありません。"
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "トークン %d は不正です。"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "トークン %d は使用中です。"
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "luks2-キーリングトークン %d を追加できませんでした。"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "トークン %d をキースロット %d に割りあてられませんでした。"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "トークン %d は使われていません。"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "ファイルからトークンをインポートできません。"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "トークン %d をエクスポートのために取得できませんでした。"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "--key-description はトークン追加には必須です。"
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "トークンを必要としています。--token-id を使用してください。"
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "%s は不正なトークン処理です。"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "データデバイス %2s のアクティブな dm デバイス '%1s'を自動検出しました。\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "デバイス %s は有効なブロックデバイスではありません。\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "デバイス %s のホルダ(holders)を自動検出できません。"
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2088,233 +2147,242 @@ msgstr ""
 "アクティベートされていたらデータが破壊されるかもしれません。\n"
 "再暗号化をオンラインで行う場合は --active-name を代わりに使ってください。\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "LUKS デバイスタイプが不正です。"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "データデバイスサイズの縮小(--reduce-device-size)なしに分離ヘッダ(--header)による暗号化はできません。"
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "要求されたデータオフセットは --reduce-device-size パラメータの半分以下である必要があります。"
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "--reduce-device-size の値を --offset %<PRIu64> (セクタ) の倍にします。\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "暗号化は LUKS2 形式でしか使えません。"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "LUKS デバイスが %s に検出されました。もう一度 LUKS デバイスを暗号化したいのですか?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "テンポラリヘッダファイル %s は既に存在しているので、中止します。"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "テンポラリヘッダファイル %s を作成できません。"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s がアクティブでオンライン暗号化可能です。\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "LUKS2 復号は detached ヘッダデバイスしかサポートしていません。"
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "再暗号化に必要な空きキースロットがありません。"
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "キーファイルは --key-slot と使うか、1 つのキースロットだけアクティブの時にしか使えません。"
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "キースロット %d のパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "キースロット %u のパスフレーズを入力してください: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "データの暗号化用の暗号アルゴリズムを %s にします。\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "コマンドはデバイスを引数として必要とします。"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "現在 LUKS2 形式しかサポートされていません。LUKS1 には cryptsetup-reencrypt を使ってください。"
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "古いオフライン再暗号化が実行中です。cryptsetup-reencrypt を使ってください。"
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "整合性プロファイルつきのデバイスの再暗号化はサポートされていません。"
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "LUKS2 再暗号化が既に初期化済なので操作を中止します。"
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "LUKS2 デバイスは再暗号化中ではありません。"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<デバイス> [--type <タイプ>] [<名前>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "デバイスを <名前> としてオープン"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<名前>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "デバイスをクローズします (マッピングを削除します)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "アクティブデバイスをリサイズ"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "デバイスステータスを表示"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <暗号>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "暗号ベンチマーク"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<デバイス>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "on-disk メタデータを修復しようとしています"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "LUKS2 デバイスを再暗号化"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "全てのキースロットを消去します (暗号鍵も削除します)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "LUKS2 から LUKS もしくは LUKS から LUKS2 形式に変換します"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "LUKS2 の permanent configuration オプションを設定します"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<デバイス> [<新しいキーファイル>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "LUKS デバイスをフォーマットします"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "LUKS デバイスにキーを追加します"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<デバイス> [<キーファイル>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "与えられたキーかキーファイルを LUKS デバイスから削除します。"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "与えられた LUKS デバイスのキーかキーファイルを変更します"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "キーを新しい pbkdf パラメータに変換します"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<デバイス> <キースロット>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "<キースロット>のキーを LUKS デバイスから削除します"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "LUKS デバイスの UUID を表示"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "<デバイス> の LUKS パーティションヘッダをテストします"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "LUKS パーティション情報をダンプします"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "TCRYPT デバイス情報をダンプします"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "BITLK デバイス情報をダンプします"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "LUKS デバイスを停止してキーを削除します (全てのI/Oは停止します)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "停止していた LUKS デバイスを再開します"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "LUKS デバイスヘッダとキースロットをバックアップします"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "LUKS デバイスヘッダとキースロットをリストアします"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <デバイス>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "LUKS2 トークンを操作します"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2322,7 +2390,7 @@ msgstr ""
 "\n"
 "<action> は以下のうちの一つです:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2334,7 +2402,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2349,7 +2417,7 @@ msgstr ""
 "<キースロット> は変更する LUKS キースロット番号\n"
 "<キーファイル> は luskAddKey でオプションで与えられる新しいキーのキーファイル\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2358,7 +2426,7 @@ msgstr ""
 "\n"
 "デフォルトのコンパイル時に決められたメタデータ形式は %s です(luksFormat で使われます)。\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2375,7 +2443,7 @@ msgstr ""
 "デフォルト LUKS2 向け PBKDF: %s\n"
 "\t繰り返す時間: %d, 使うメモリ: %dkB, 並列スレッド: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2390,443 +2458,451 @@ msgstr ""
 "\tplain: %s, キー: %d ビット, パスワードハッシュ: %s\n"
 "\tLUKS: %s, キー: %d ビット, LUKS ヘッダハッシュ: %s, 乱数生成: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: XTS モードのデフォルトキーサイズは (2つの内部キーがあるため) 倍になります。\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: は %s を引数で与える必要があります"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "このヘルプを表示します"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "コンパクトな使用法表示をします"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "パッケージのバージョンを表示"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "ヘルプオプション:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "より詳細なエラーメッセージを表示"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "デバッグメッセージを表示"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "JSON メタデータを含むデバッグメッセージを表示"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "ディスクを暗号化するのに用いられる暗号 (/proc/crypto を参照のこと)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "パスフレーズから暗号鍵を作るのに使われるハッシュ"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "パスフレーズは2回入力してもらって検証します"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "ファイルからキーを読む"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "ボリューム(マスター)キーをファイルから読む。"
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "ボリューム(マスター)キーをキースロット情報の代わりにダンプします"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "暗号鍵のサイズ"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "ビット"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "キーファイルから読み込みの制限"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "バイト"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "キーファイルでスキップするバイト数"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "新しく追加するキーファイルの読み込みの制限"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "新しく追加するキーファイルでスキップするバイト数"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "新しいキーのスロット番号 (デフォルトは最初の空き)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "デバイスのサイズ"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "セクタ"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "指定されたデバイスサイズ分だけ使います (デバイスの残りは無視します). 危険!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "バックエンドデバイスの開始オフセット"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "最初の暗号化データのセクタを何セクタスキップするか"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "読み込み専用のマッピングを作成"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "確認をしません"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "パスフレーズの対話的入力のタイムアウト (秒単位)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "秒"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "進捗線の更新(秒単位)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "パスフレーズの再試行の回数"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "luksFormat 向けにペイロードを <n> セクタ境界に合わせます"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "LUKS ヘッダとキースロットバックアップのファイル"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "ボリュームキーの生成に /dev/random を使います"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "ボリュームキーの生成に /dev/urandom (擬似乱数)を使います"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "オーバーラップしない暗号セグメントのあるデバイスと共有します"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "使用するデバイスの UUID"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "デバイスに discards (TRIM) 処理を許可します"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "デバイスかファイルにある分離された LUKS ヘッダ"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "デバイスをアクティベートせず、パスフレーズだけ確認する"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "隠されたヘッダを使う (隠された TCRYPT デバイス)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "デバイスはシステム TCRYPT ドライブ (ブートローダの対応が必要)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "バックアップ (セカンダリ) TCRYPT ヘッダを使います"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "VeraCrypt 互換デバイスも探します"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "VeraCrypt 互換デバイス向けの Personal Iteration Multiplier"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "VeraCrypt互換デバイス向けの Query Personal Iteration Multiplier"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "デバイスメタデータのタイプ: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "パスワードの質の確認を無効にする (もし有効なら)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "dm-crypt の same_cpu_crypt performance compatibility オプションを使う"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "dm-crypt の submit_from_crypt_cpus performance compatibility オプションを使う"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "dm-crypt の workqueue をバイパスし読み込み要求を同期処理する"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "dm-crypt の workqueue をバイパスし書き込み要求を同期処理する"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "デバイスの削除はデバイス上のリソースを使う人がいなくなるまで遅延されます"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "OOM Killer を回避するために PBKDF メモリのシリアライズにグローバルロックを使います"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "LUKS 向けの PBKDF の繰り返し時間 (ms単位)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ミリ秒"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "LUKS2 向けの PBKDF アルゴリズム: argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "PBKDF メモリコスト制限"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "キロバイト"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "PBKDF 並列コスト"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "スレッド"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "PBKDF 繰り返しコスト (強制する, ベンチマークしない)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "キースロット優先度: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "ディスク上のメタデータのロックをしない"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "ボリュームキーの読み込みをカーネルキーリング経由で行わない"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "データ改ざん検出アルゴリズム (LUKS2 のみ)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "データ改ざん検出が有効なデバイスのジャーナリングを禁止します"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "フォーマット後にデバイスのデータを消去しない"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "非効率的なレガシーパディングを使う (古いカーネル)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "トークンによるアクティベーションが失敗したらパスフレーズを入力させません"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "トークンナンバー (デフォルト: 任意)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "キーデスクリプション"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "暗号化セクタサイズ (デフォルト: 512 バイト)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "セクタサイズ (512バイトとは限らない) のIVを使う"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "デバイスのアクティベーションフラグを持続的にします"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "LUKS2 デバイスのラベルを設定"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "LUKS2 デバイスにサブシステムレベルを設定します"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "unbound (データセグメントが割り当てられていない) LUKS2 キースロットを作成またはダンプ"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "json をファイルに読み書きする"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "LUKS2 ヘッダメタデータ領域サイズ"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "LUKS2 ヘッダキースロット領域サイズ"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "デバイスを新しいパラメータデリフレッシュ(再アクティベート)する"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "LUKS2 キースロット: 暗号鍵のサイズ"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "LUKS2 キースロット: キースロットの暗号化に使う暗号"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "LUKS2 デバイスを暗号化 (in-place で暗号化)"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "LUKS2 デバイスを復号 (つまり暗号化をやめる)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "LUKS2 再暗号化をメタデータだけ初期化。"
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "初期化済 LUKS2 再暗号化だけ再開。"
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "データデバイスサイズを減らす (データオフセットを移動する). 危険!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "最大再暗号化ホットゾーンサイズ"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "再暗号化ホットゾーン弾性(resilience)タイプe (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "再暗号化ホットゾーンチェックサムハッシュ"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "再暗号化する dm デバイスの自動検出を上書きする"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[オプション...] <アクション> <アクション特有>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "<アクション> がありません。"
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "未知のアクションです。"
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "--refresh と --test-passphrase は同時には使えません。"
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "--deferred は close でしか使えません。"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "--shared は plain デバイスの open にしか使えません。"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "--allow-discards は open でしか使えません。"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "--persistent は open でしか使えません。"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "--serialize-memory-hard-pbkdf は open でしか使えません。"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "--persistent は --test-passphrase と一緒には使えません。"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2834,260 +2910,259 @@ msgstr ""
 "--key-size は luksFormat か luksAddKey で --unbound をつけた場合か、\n"
 "open, benchmark の時しか使えません。キーファイルについて制限をつけたい場合は --keyfile-size=(バイト) を使ってください。"
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "--integrity は luksFormat (LUKS2) でしか使えません。"
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "--integrity-no-wipe は format で integrity extension 付きの時しか使えません。"
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "--label と --subsystem は luksFormat で config LUKS2 operations にしか使えません。"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "--test-passphrase は LUKS か TCRYPT か BITLK デバイスの open にしか使えません。."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "キーサイズは 8bit の倍数でなければなりません"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "キースロットは不正です。"
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "--key-file は他で指定されたキーファイルを上書きします。"
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "オプションに負の数を与えられません。"
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "--key-file は一つしか使えません。"
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "--use-[u]random は一つしか使えません。"
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "--use-[u]random は luksFormat にしか使えません。"
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "--uuid は luksFormat か luksUUID でしか使えません。"
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "--align-payload は luksFormat でしか使えません。"
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "--luks2-metadata-size と --opt-luks2-keyslots-size は LUKS2 で luksFormat でしか使えません。"
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "不正なLUKS2 メタデータサイズです。"
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "不正な LUKS2 キースロットサイズです。"
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "--align-payload と --offset は一緒に使えません。"
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "--skip は plain か loopaes デバイスの open にしか使えません。"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "--offset は plain か loopaes デバイスの open、luksFormat と再暗号化にしか使えません。"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "--tcrypt-hidden と --tcrypt-system と --tcrypt-backup は TCRYPT デバイスしか使えません。"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "--tcrypt-hidden は --allow-discards と一緒に使えません。"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "--veracrypt は TCRYPT デバイスでしか使えません。"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "--veracrypt-pim の引数が不正です。"
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "--veracrypt-pim は VeraCrypt 互換デバイスにしか使えません。"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "--veracrypt-query-pim は VeraCrypt 互換デバイスにしか使えません。"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "--veracrypt-pim と --veracrypt-query-pim はどちらかしか使えません。"
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "--priority の引数は ignore/normal/prefer のいずれかのみです。"
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "キースロットの指定が必要です。"
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "パスワードからキーを作る関数 (PBKDF) は pbkdf2 argon2i argon2id のいずれかのみです。"
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "PBKDF の繰り返し回数の強制と繰り返し時間指定オプションは共存できません。"
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "このコマンドでセクタサイズオプションはサポートされていません。"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "大きな IV セクタオプションは plain タイプでセクタサイズが 512 バイトより大きいものをオープンする時しかサポートしていません。"
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "--unbound にはキーサイズが必要です。"
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "--unbound は luksAddKey か luksDump でしか使えません。"
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "--refresh は open でしか使えません。"
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "メタデータロックを禁止できません。"
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "再暗号化ホットゾーン最大サイズの指定が不正です。"
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "デバイスサイズの指定が不正です。"
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "デバイスを減らせる最大値は 1 GiB です。"
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "減らすサイズは 512 バイトセクタの倍数である必要があります。"
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "データサイズの指定が不正です。"
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "減らすサイズのオーバーフロー。"
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "LUKS2 復号には --header が必要です。"
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "デバイスサイズは 512 バイトセクタの倍数である必要があります。"
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "--reduce-device-size と --data-size は一緒に使えません。"
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "--device-size と --size は一緒に使えません。"
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "--ignore-corruption と --restart-on-corruption は同時に使えません。"
+msgstr "--keyslot-cipher と --keyslot-key-size は同時に使う必要があります。"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "不正なソルト文字列が指定されました。"
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "ハッシュイメージ %s を書けるように作成できませんでした。"
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "FEC イメージ %s を書けるように作成できませんでした。"
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "不正なルートハッシュ文字列が指定されました。"
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "署名ファイル %s が不正です。"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "署名ファイル %s を読み込めませんでした。"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<データデバイス> <ハッシュデバイス>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "デバイスをフォーマット"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<データデバイス> <ハッシュデバイス> <ルートハッシュ>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "デバイスを検証"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<データデバイス> <名前> <ハッシュデバイス> <ルートハッシュ>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "アクティブデバイスのステータスを表示"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<ハッシュデバイス>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "ディスク上の情報を表示"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3102,7 +3177,7 @@ msgstr ""
 "<ハッシュデバイス> は検証用データが入るデバイス\n"
 "<ルートハッシュ> は <ハッシュデバイス> のルートノードのハッシュ\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3113,126 +3188,139 @@ msgstr ""
 "コンパイル時に決めた dm-verity のデフォルトパラメータ:\n"
 "\tハッシュ: %s, データブロック (バイト): %u, ハッシュブロック (バイト): %u, ソルトサイズ: %u, ハッシュフォーマット: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "verity スーパーブロックを使いません"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "フォーマットタイプ (1 - ノーマル, 0 - Chrome OS 形式)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "数字"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "データデバイスのブロックサイズ"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "ハッシュデバイスのブロックサイズ"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "FEC パリティバイト"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "データファイルのブロック数"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "ブロック"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "誤り訂正用データが格納されるデバイスのパス"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "パス"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "ハッシュデバイスの開始オフセット"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "FEC デバイスの開始オフセット"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "ハッシュアルゴリズム"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "文字列"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "ソルト"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "16進数文字列"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "ルートハッシュ署名ファイルのパス"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "破損が検出されたらカーネルを再起動する"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "破損が検出されたらカーネルパニックさせる"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "破損はログするだけで再起動まではしない"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "0 埋めされたブロックは検証しない"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "最初に読む時一度だけデータブロックを検証する"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "--ignore-corruption, --restart-on-corruption, --ignore-zero-blocks は open 時にか使えません。"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "--root-hash-signature は open でしか使えません。"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "--ignore-corruption と --restart-on-corruption は同時に使えません。"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "--panic-on-corruption と --restart-on-corruption は同時に使えません。"
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "不正なキーサイズです。最大は %u バイトです。"
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "キーファイル %s を読みこめませんでした。"
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "%d バイトをキーファイル %s から読みこめませんでした。"
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "タグサイズ %u、内部整合性は %s でフォーマットされました。\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<整合性デバイス>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<整合性デバイス> <名前>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3243,403 +3331,409 @@ msgstr ""
 "<名前> は %s に作られるデバイス\n"
 "<整合性デバイス> は整合性タグを格納するデバイス\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "コンパイル時に決められたデフォルトの dm-integrity のパラメータ:\n"
 "\tチェックサムアルゴリズム: %s\n"
+"        最大キーファイルサイズ: %dkB\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "データデバイスのパス (分離されている場合)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "ジャーナルサイズ"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "インターリーブするセクタ数"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "ジャーナルをフラッシュする閾値"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "パーセント"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "ジャーナルがコミットされるまでの時間"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ミリ秒"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "ビットあたりの 512 バイトセクタ (bitmap モード)。"
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Bitmap モードのフラッシュ時間"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "タグサイズ (セクタ毎)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "セクタサイズ"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "バッファサイズ"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "データ整合性アルゴリズム"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "データ整合性キーのサイズ"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "整合性キーをファイルから読み込む"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "ジャーナル整合性アルゴリズム"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "ジャーナル整合性キーのサイズ"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "ジャーナル整合性キーをファイルから読み込む"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "ジャーナル暗号化アルゴリズム"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "ジャーナル暗号化キーのサイズ"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "ジャーナル暗号化キーをファイルから読み込む"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "リカバリモード (ジャーナル不使用、タグ確認なし)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "変更の追跡に bitmap を使いジャーナルの整合性デバイスの無効にします"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "初期タグを自動で再計算する。"
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "スーパーブロックを HMAC で保護しません(古いカーネル)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "ボリュームの HMAC キーによる再計算を許可(古いカーネル)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "--integrity-recalculate は open でしか使えません。"
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "--journal-size, --interleave-sectors, --sector-size, --tag-size, --no-wipe は format でしか使えません。"
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "不正なジャーナルサイズの指定です。"
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "キーファイルとキーサイズの両方の指定が必要です。"
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "整合性キーを使う場合はアルゴリズムの指定が必要です。"
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "ジャーナル整合性キーファイルとキーサイズの両方の指定が必要です。"
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "ジャーナル整合性キーを使う場合はアルゴリズムの指定が必要です。"
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "ジャーナル暗号キーファイルとキーサイズの両方の指定が必要です。"
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "ジャーナル暗号キーを使う場合はアルゴリズムの指定が必要です。"
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "リカバリと bitmap モードオプションは同時には使えません。"
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "ジャーナルオプションは bitmap モードでは使えません。"
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "bitmap オプションは bitmap モードでしか使えません。"
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "既に再暗号化中です。"
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "デバイスが使用中のため %s を排他的にオープンできません。"
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "アライメントつきメモリの確保ができませんでした。"
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "デバイス %s を読めません。"
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "LUKS1 デバイス %s を使用不可としてマークします。"
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "LUKS2 offline reencrypt フラグをデバイス %s に設定します。"
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "デバイス %s に書き込めません。"
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "再暗号化ログファイルに書きこめません。"
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "再暗号化ログファイルを読み込めません。"
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "ログファイル %s が既にあるので再暗号化を再開します。\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "古い LUKS ヘッダを使っているテンポラリデバイスを有効にします。"
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "新しい LUKS ヘッダを使っているテンポラリデバイスを有効にします。"
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "テンポラリデバイスの有効化に失敗しました。"
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "データオフセットの設定に失敗しました。"
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "メタデータサイズの設定に失敗しました。"
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "デバイス %s の新しい LUKS ヘッダを作成しました。"
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "このバージョンの cryptsetup-reencrypt は新しい内部トークンタイプ %s を扱えません。"
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "アクティベーションフラグをバックアップヘッダから読み込めません。"
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "アクティベーションフラグを新しいヘッダに書き込めません。"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "バックアップヘッダから要求(requirements)を読み込めません。"
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "%s ヘッダバックアップデバイス %s が作成されました。"
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "LUKS バックアップヘッダが作成できません。"
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "デバイス %2s の %1s ヘッダが復元できません。"
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "デバイス %2s の %1s ヘッダを復元しました。"
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "テンポラリ LUKS デバイスをオープンできません。"
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "デバイスサイズを取得できません。"
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "再暗号化中に I/O エラーが発生しました。"
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "与えられた UUID が不正です。"
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "再暗号化ログファイルを開けません。"
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "復号を実行中ではありません。与えられた UUID は中止された復号を再開するためだけに使えます。"
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "キースロット %i の pbkdf パラメータを変更しました。"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "再暗号化のブロックサイズ"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "キーを変えず、データ領域の再暗号化を行わない"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "新しいボリューム(マスター)キーをファイルから読み込む"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "LUKS 向け PBKDF2 の繰り返し時間 (ミリ秒単位)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "デバイスアクセス時に direct-io を使う"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "ブロック毎に fsync() する"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "ログファイルをブロック毎に更新する"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "このスロットだけ使う (残りは無効化されます)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "暗号化されていないデバイスに新しいヘッダを作成する"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "デバイスを恒久的に復号状態にする (つまり暗号化をやめる)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "復号の再開に使う UUID"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "メタデータタイプ: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[オプション...] <デバイス>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "再暗号化で以下が変わります: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "ボリュームキー"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "ハッシュ"
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr "暗号(cipher)"
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "引数が必要です。"
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "再暗号化のブロックサイズは 1 MiB から 64 MiB までの値しか使えません。"
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "デバイスを減らせる最大値は 64 MiB です。"
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "--new は --reduce-device-size か --header と一緒に使う必要があります"
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "--keep-key は --hash か --iter-time か --pbkdf-force-iterations と使う必要があります。"
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "--new は --decrypt と一緒に使えません。"
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "--decrypt は指定されたパラメータと互換性がありません。"
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "--uuid は --decrypt と一緒にしか使えません。"
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "不正な luks タイプです。'luks', 'luks1', 'luks2' のいずれかを使ってください。"
 
@@ -3680,32 +3774,32 @@ msgstr "不明なエラー"
 msgid "Command failed with code %i (%s).\n"
 msgstr "コマンド失敗:コード %i (%s)\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "キースロット %i が作成されました。"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "キースロット %i がアンロックされました。"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "キースロット %i が削除されました。"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "トークン %i が作成されました。"
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "トークン %i が削除されました。"
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3713,55 +3807,55 @@ msgstr ""
 "\n"
 "ワイプが中断されました。"
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "警告: デバイス %s が既に '%s' パーティションシグネチャを含んでいます。\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "警告: デバイス %s が既に '%s' のスーパーブロックシグネチャを含んでいます。\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "デバイスシグネチャ検出の初期化に失敗しました。"
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "デバイス %s の stat() に失敗しました。"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "デバイス %s は使用中です。フォーマットを始められません。"
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "ファイル %s を読み書き可能なモードでオープンできません。"
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "今ある '%s' パーティションのシグネチャ(オフセット: %<PRIi64> バイト、デバイス %s)は消去されます。"
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "今ある '%s' スーパーブロックのシグネチャ(オフセット: %<PRIi64> バイト、デバイス %s)は消去されます。"
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "デバイスシグネチャを消せません。"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "デバイス %s のシグネチャが検出できません。"
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3769,7 +3863,7 @@ msgstr ""
 "\n"
 "再暗号化が中断されました。"
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "パスワードの質を確認できません: %s"
@@ -3788,46 +3882,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "パスワードの質が確認できません: 質の悪いパスフレーズ (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "端末からパスフレーズを読み込めません。"
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "同じパスフレーズを入力してください: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "パスフレーズが一致しません。"
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "端末からの入力でオフセットは使用できません。"
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "パスフレーズを入力してください: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "%s のパスフレーズを入力してください: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "このパスフレーズで使用可能なキーはありません。"
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "使用可能なキースロットがありません。"
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "キーファイル %s を書き込み用にオープンできません。"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "キーファイル %s に書き込めません。"
@@ -3869,3 +3963,13 @@ msgstr ""
 #: src/utils_luks2.c:126
 msgid "Failed to write JSON file."
 msgstr "JSON ファイルに書き込めません。"
+
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "再暗号化の要求(requirement)フラグを禁止できません。"
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "デバイスは再暗号化のリカバリを必要としていなそうです。\n"
+#~ "本当にやりますか?"
index 48055cb..670c1ad 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 61164a8..4beb1ba 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup-2.3.0-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2020-01-13 20:42+0100\n"
 "Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -20,68 +20,69 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Kan apparaatstoewijzer niet initialiseren, uitvoering als non-root gebruiker."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Kan apparaatstoewijzer niet initialiseren. Is kernelmodule dm_mod geladen?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 #, fuzzy
 msgid "Requested deferred flag is not supported."
 msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID voor apparaat %s werd afgekapt."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr ""
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 #, fuzzy
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 #, fuzzy
 msgid "Requested data integrity options are not supported."
 msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 #, fuzzy
 msgid "Requested sector_size option is not supported."
 msgstr "Aangevraagde prestatie-opties voor dm-crypt worden niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 #, fuzzy
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 #, fuzzy
 msgid "Discard/TRIM is not supported."
 msgstr "Aangevraagd hash-algoritme %s wordt niet ondersteund.\n"
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Aangevraagde opties voor behandeling van datacorruptie van dm-verity worden niet ondersteund.\n"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -123,7 +124,7 @@ msgstr "Kan RNG versleutelings-backend niet initialiseren."
 msgid "Cannot initialize crypto backend."
 msgstr "Kan versleutelings-backend niet initialiseren."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Aangevraagd hash-algoritme %s wordt niet ondersteund."
@@ -137,7 +138,7 @@ msgstr "Sleutelbehandelingsfout (met hash %s in gebruik)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Apparaatstype kan niet bepaald worden. Incompatibele apparaatsactivering?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten."
 
@@ -145,7 +146,7 @@ msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Deze operatie wordt enkel ondersteund voor LUKS2-apparaten."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Alle sleutelplaatsen zijn vol."
 
@@ -159,7 +160,7 @@ msgstr "Sleutelplaats %d is ongeldig, selecteer een plaats tussen 0 en %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Sleutelplaats %d is vol, selecteer een andere."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n"
@@ -169,7 +170,8 @@ msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n"
 msgid "Header detected but device %s is too small."
 msgstr "Koptekst gevonden maar apparaat %s is te klein."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype."
 
@@ -177,18 +179,13 @@ msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype."
 msgid "Illegal operation with reencryption in-progress."
 msgstr ""
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Niet-ondersteunde LUKS-versie %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-#, fuzzy
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "UUID wordt niet ondersteund voor dit encryptietype.\n"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Apparaat %s is niet actief."
@@ -202,7 +199,7 @@ msgstr "Onderliggend apparaat van versleutelingsapparaat %s is verdwenen."
 msgid "Invalid plain crypt parameters."
 msgstr "Ongeldige normale versleutelingsparameters."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Ongeldige sleutelgrootte."
 
@@ -210,13 +207,18 @@ msgstr "Ongeldige sleutelgrootte."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID wordt niet ondersteund voor dit encryptietype."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+#, fuzzy
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "UUID wordt niet ondersteund voor dit encryptietype.\n"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 #, fuzzy
 msgid "Unsupported encryption sector size."
 msgstr "Kan herencryptie-logbestand niet lezen.\n"
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 #, fuzzy
 msgid "Device size is not aligned to requested sector size."
 msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n"
@@ -261,8 +263,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Apparaat %s is te klein."
@@ -295,16 +297,16 @@ msgstr "Kan LOOPAES niet formatteren zonder apparaat."
 msgid "Can't format VERITY without device."
 msgstr "Kan VERITY niet formatteren zonder apparaat."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Niet-ondersteund VERITY-hashtype %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Niet-ondersteunde VERITY-blokgrootte."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Niet-ondersteunde VERITY-hashgegevenspositie."
 
@@ -334,242 +336,242 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Onbekend versleutelingsapparaattype %s aangevraagd."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, fuzzy, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Kan koptekst op apparaat %s niet wissen.\n"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, fuzzy, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Kan koptekst op apparaat %s niet wissen.\n"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Kan apparaat niet lezen: %s.\n"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Openen van sleutelbestand is mislukt.\n"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Kan apparaat niet lezen: %s.\n"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Kan grootte van loopback-apparaat niet aanpassen."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Bent u zeker dat u het UUID van het apparaat wilt wijzigen?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 #, fuzzy
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Reservekopiebestand bevat geen geldige LUKS-koptekst.\n"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Opslagmedium %s is niet actief."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Opslagmedium %s is reeds geschorst."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Opschorten wordt niet ondersteund voor apparaat %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Fout bij het opschorten van apparaat %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Opslagmedium %s is niet geschorst."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Hervatting wordt niet ondersteund voor apparaat %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Fout bij het hervatten van apparaat %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Opslagmedium %s is niet geschorst."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Sleutel tot opslagmedium komt niet overeen met het opslagmedium."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Kan geen sleutelplaats toevoegen, alle plaatsen zijn uitgeschakeld en er is geen sleutel tot het opslagmedium voorzien."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Kan nieuwe sleutelplaats niet verwisselen."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Sleutelplaats %d is ongeldig."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Sleutelplaats %d is niet in gebruik."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Overlapping tussen apparaatskoptekst en hashgedeelte."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr ""
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Kan herencryptie-logbestand niet lezen.\n"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Kan herencryptie-logbestand niet openen.\n"
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Apparaatstype is niet behoorlijk geïnitialiseerd."
 
-#: lib/setup.c:4171
-#, fuzzy, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n"
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Apparaat %s bestaat reeds."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, fuzzy, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n"
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Incorrecte sleutel tot het opslagmedium voor normaal apparaat verschaft."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Incorrecte root-hash voor het VERITY-apparaat opgegeven."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr ""
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 #, fuzzy
 msgid "Failed to load key in kernel keyring."
 msgstr "Openen van sleutelbestand is mislukt.\n"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Apparaat %s is nog in gebruik."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Ongeldig apparaat %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Sleutelbuffer van het opslagmedium is te klein."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Kan sleutel tot het opslagmedium voor normaal apparaat niet ophalen."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Incorrecte root-hash voor het VERITY-apparaat opgegeven.\n"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Deze operatie wordt niet ondersteund voor versleutelapparaat %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Dump-operatie wordt niet ondersteund voor dit apparaatstype."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, fuzzy, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Kan apparaat %s niet formatteren; het is nog steeds actief.\n"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr ""
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr ""
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, fuzzy, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 #, fuzzy
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype.\n"
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, fuzzy, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -598,8 +600,8 @@ msgstr "Kan status van sleutelbestand niet opvragen."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Kan niet zoeken tot aan het aangevraagde sleutelbestand."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Geen geheugen meer beschikbaar bij lezen van wachtwoord."
 
@@ -619,51 +621,56 @@ msgstr "Maximum sleutelbestandsgrootte overschreden."
 msgid "Cannot read requested amount of data."
 msgstr "Kan aangevraagde hoeveelheid data niet lezen."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Apparaat %s bestaat niet of toegang is geweigerd."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Apparaat %s is niet compatibel."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Apparaat %s is te klein.  Minstens %<PRIu64> bytes zijn vereist."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Kan apparaat %s niet gebruiken; het is nog actief (reeds toegewezen of aangekoppeld)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Kan apparaat %s niet gebruiken: toestemming geweigerd."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Kan geen informatie verkrijgen over apparaat %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Kan geen loopback-apparaat gebruiken, uitvoering als non-root gebruiker."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Vastmaken loopback-apparaat gefaald (loop-apparaat met autoclear-vlag is vereist)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "De aangevraagde gegevenspositie valt buiten de werkelijke grootte van apparaat %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Apparaat %s heeft grootte nul."
@@ -739,7 +746,7 @@ msgstr ""
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
 msgstr ""
 
 #: lib/utils_device_locking.c:119
@@ -747,8 +754,8 @@ msgstr ""
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr ""
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Onmogelijk te zoeken tot startplaats van apparaat."
 
@@ -775,8 +782,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Kan apparaat %s niet beschrijven: toestemming geweigerd."
@@ -795,12 +802,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Invoer/uitvoerfout tijdens het versleutelen van de sleutelplaats."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Kan apparaat %s niet openen."
@@ -821,43 +828,43 @@ msgstr "Apparaat %s is te klein.  (LUKS1 vereist minstens %<PRIu64> bytes.)"
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS-sleutelplaats %u is ongeldig."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Apparaat %s is geen geldig LUKS-apparaat."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Aangevraagd reservekopiebestand %s van koptekst bestaat reeds."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet schrijven."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Reservekopiebestand bevat geen geldige LUKS-koptekst."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet openen."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet lezen."
@@ -879,7 +886,7 @@ msgstr "bevat geen LUKS-koptekst. Het vervangen van de koptekst kan gegevens op
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "bevat reeds een LUKS-koptekst. Het vervangen van de koptekst zal bestaande sleutelplaatsen vernietigen."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -891,101 +898,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Niet-standaard sleutelgrootte, handmatige herstelling is vereist."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Niet-standaard sleutelplaatsuitlijning, handmatige herstelling is vereist."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Sleutelplaatsen worden hersteld."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Sleutelplaats %i: gegevenspositie hersteld (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Sleutelplaats %i: fragmenten hersteld (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Sleutelplaats %i: valse partitiehandtekening."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Sleutelplaats %i: salt uitgewist."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "LUKS-koptekst wordt naar schijf geschreven."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Herstelling is mislukt."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Aangevraagde LUKS-hash %s wordt niet ondersteund."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Geen gekende problemen gevonden bij LUKS-koptekst."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Fout bij het bijwerken van LUKS-koptekst op apparaat %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Fout bij het herlezen van LUKS-koptekst na bijwerken van apparaat %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "De datagegevenspositie voor een aparte LUKS-koptekst moet of 0 zijn, of groter zijn dan de koptekstgrootte."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Verkeerd LUKS UUID-formaat verschaft."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Kan LUKS-koptekst niet aanmaken: lezen van random salt is mislukt."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Kan LUKS-koptekst niet aanmaken: koptekst-extract is mislukt (met %s-hash)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Sleutelplaats %d is actief; ruim eerst op."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Inhoud van sleutelplaats %d bevat te weinig fragmenten. Koptekstmanipulatie?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Sleutelbehandelingsfout (met hash %s in gebruik)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Sleutelplaats %d is ongeldig, selecteer een sleutelplaats tussen 0 en %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Kan apparaat %s niet wissen."
@@ -1021,11 +1028,11 @@ msgstr "Maximum TCRYPT-wachtwoorlengte (%d) overschreden."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2 hash-algoritme %s is niet beschikbaar, wordt overgeslaan."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Benodigde kernel cryptografie-interface is niet beschikbaar."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Kijk na of kernelmodule algif_skcipher geladen is."
 
@@ -1038,165 +1045,178 @@ msgstr "Activatie wordt niet ondersteund voor %d sectorgrootte."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Activatie voor deze TCRYPT-legacymodus wordt niet ondersteund door de kernel."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "TCRYPT-systeemversleuteling voor partitie %s wordt geactiveerd."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Toewijzingen compatibel met TCRYPT worden niet ondersteund door de kernel."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Deze functie wordt niet ondersteund zonder TCRYPT-koptekst."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Kan herencryptie-logbestand niet lezen.\n"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "UUID wordt niet ondersteund voor dit encryptietype.\n"
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Deze operatie wordt niet ondersteund voor versleutelapparaat %s.\n"
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Ongeldige sleutelgrootte.\n"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "VERITY-apparaat %s gebruikt geen on-disk koptekst.\n"
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Apparaat %s is geen geldig VERITY-apparaat."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Niet-ondersteunde VERITY-versie %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY-koptekst beschadigd."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Verkeerd VERITY UUID-formaat verschaft op apparaat %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Fout bij het bijwerken van VERITY-koptekst op apparaat %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "Aangevraagd hash-algoritme %s wordt niet ondersteund.\n"
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n"
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n"
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "VERITY-apparaat ontdekte beschadiging na activatie."
 
@@ -1205,41 +1225,37 @@ msgstr "VERITY-apparaat ontdekte beschadiging na activatie."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Reservegebied is niet ingesteld op positie %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Overloop van apparaatsgegevenspositie."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Controle gefaald op positie %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Ongeldige grootteparameters voor VERITY-apparaat."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Controle van gegevensgebied gefaald."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Controle van root-hash gefaald."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Invoer/uitvoerfout bij het aanmaken van hash-gebied."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Creatie hash-gebied gefaald."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "WAARSCHUWING: Kernel kan apparaat niet activeren als de gegevensblokgrootte groter is dan de paginagrootte (%u)."
@@ -1248,56 +1264,65 @@ msgstr "WAARSCHUWING: Kernel kan apparaat niet activeren als de gegevensblokgroo
 msgid "Failed to allocate RS context."
 msgstr ""
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 #, fuzzy
 msgid "Failed to allocate buffer."
 msgstr "Kan status van sleutelbestand niet opvragen.\n"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr ""
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+#, fuzzy
+msgid "Invalid FEC segment length."
+msgstr "Ongeldig apparaat %s.\n"
+
+#: lib/verity/verity_fec.c:302
 #, fuzzy, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Openen van het tijdelijke sleutelopslagapparaat is mislukt.\n"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n"
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "dm-verity toewijzingen niet ondersteund door kernel.\n"
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, fuzzy, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n"
@@ -1317,115 +1342,115 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Apparaat %s is te klein.\n"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, fuzzy, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 #, fuzzy
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Verschillende gegevenspositie of sleutelgrootte in apparaat en reservekopie; herstelling is mislukt.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 #, fuzzy
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Verschillende gegevenspositie of sleutelgrootte in apparaat en reservekopie; herstelling is mislukt.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, fuzzy, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Apparaat %s %s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 #, fuzzy
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "bevat geen LUKS-koptekst. Het vervangen van de koptekst kan gegevens op het apparaat vernietigen."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 #, fuzzy
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "bevat reeds een LUKS-koptekst. Het vervangen van de koptekst zal bestaande sleutelplaatsen vernietigen."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Kan status van sleutelbestand niet opvragen.\n"
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Sleutelplaats %d is geverifieerd.\n"
@@ -1458,7 +1483,7 @@ msgstr ""
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Openen van sleutelbestand is mislukt.\n"
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 #, fuzzy
 msgid "Unable to move keyslot area."
 msgstr "Openen van sleutelbestand is mislukt.\n"
@@ -1496,297 +1521,309 @@ msgstr ""
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Niet-ondersteunde LUKS-versie %d.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Reservegebied is niet ingesteld op positie %<PRIu64>.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Kan geen toegang verkrijgen tot tijdelijk sleutelopslagapparaat.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Openen van het tijdelijke sleutelopslagapparaat is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Kan nieuwe sleutelplaats niet verwisselen.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Kan apparaat %s niet gebruiken; het is nog actief (reeds toegewezen of aangekoppeld).\n"
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 #, fuzzy
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Sleutel niet wijzigen; gegevensgebied wordt niet opnieuw versleuteld."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "Apparaat %s is niet actief.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "Kan herencryptie-logbestand niet lezen.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Kan herencryptie-logbestand niet schrijven.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "Herstelling is mislukt."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "Kan status van sleutelbestand niet opvragen.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr ""
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Kan herencryptie-logbestand niet lezen.\n"
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Kan versleutelings-backend niet initialiseren.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "Kan herencryptie-logbestand niet openen.\n"
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Sleutelplaats %d is ongeldig."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, fuzzy, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Kan geen wachtwoordverificatie uitvoeren op invoer van buiten de terminal."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 #, fuzzy
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Geen bekend specificatiepatroon voor het sleutelalgoritme gevonden."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "WAARSCHUWING: In normale modus met opgegeven sleutelbestand wordt de --hash-parameter genegeerd.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "WAARSCHUWING: De optie --keyfile-size wordt genegeerd, de leesgrootte is gelijk aan de encryptiesleutelgrootte.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Optie --key-file is vereist."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr ""
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr ""
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 #, fuzzy
 msgid "Invalid PIM value: 0."
 msgstr "Ongeldig apparaat %s.\n"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr ""
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Geen apparaatkoptekst beschikbaar met dit wachtwoord."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1796,196 +1833,210 @@ msgstr ""
 "die zonder wachtwoord toegang verschaft tot versleutelde partities.\n"
 "De dump zou steeds versleuteld en op een veilige plaats bewaard moeten worden."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 #, fuzzy
 msgid "Benchmark interrupted."
 msgstr "versleutelalgoritme benchmarken"
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Benchmarkresultaat is niet betrouwbaar."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Tests zijn bij benadering met enkel geheugen in gebruik (geen opslag-IO).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, fuzzy, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Algoritme | Sleutel |  Versleuteling |  Ontsleuteling\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Versleutelalgoritme %s is niet beschikbaar.\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 #, fuzzy
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Algoritme | Sleutel |  Versleuteling |  Ontsleuteling\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/A"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Voer wachtwoord voor sleutelplaats %u in: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Voer wachtwoord voor sleutelplaats %u in: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Voer wachtwoord voor sleutelplaats %u in: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Bent u zeker de LUKS-apparaatkoptekst te willen herstellen?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, fuzzy, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Kan tijdelijk LUKS-apparaat niet openen.\n"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 #, fuzzy
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Niet-ondersteunde LUKS-versie %d.\n"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, fuzzy, c-format
 msgid "Cannot create header file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken.\n"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 #, fuzzy
 msgid "No known integrity specification pattern detected."
 msgstr "Geen bekend specificatiepatroon voor het sleutelalgoritme gevonden.\n"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Kan %s niet als on-diskkoptekst gebruiken."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Dit zal data op %s onherroepelijk overschrijven."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 #, fuzzy
 msgid "Failed to set pbkdf parameters."
 msgstr "Kan status van sleutelbestand niet opvragen.\n"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Een verlaagde datagegevenspositie wordt enkel toegestaan voor een vrijstaande LUKS-koptekst."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, fuzzy, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Sleutelplaats %d geselecteerd voor verwijdering.\n"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Dit is de laatste sleutelplaats. Apparaat zal onbruikbaar worden na het verwijderen van deze sleutel."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Voer enig overblijvend wachtwoord in: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Voer het te verwijderen wachtwoord in: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Voer een nieuw wachtwoord in voor de sleutelplaats: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Voer een bestaand wachtwoord in: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Voer het te wijzigen wachtwoord in: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Voer nieuw wachtwoord in: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 #, fuzzy
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Voer wachtwoord voor sleutelplaats %u in: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Voor de isLuks-operatie wordt slechts één apparaatsargument ondersteund."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -1996,12 +2047,12 @@ msgstr ""
 "die zonder wachtwoord toegang verschaft tot versleutelde partities.\n"
 "De dump zou steeds versleuteld en op een veilige plaats bewaard moeten worden."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Sleutelplaats %d is niet in gebruik."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -2011,30 +2062,40 @@ msgstr ""
 "die zonder wachtwoord toegang verschaft tot versleutelde partities.\n"
 "De dump zou steeds versleuteld en op een veilige plaats bewaard moeten worden."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s is geen LUKS-apparaat.\n"
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Optie --header-backup-file is vereist."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, fuzzy, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s is geen LUKS-apparaat."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, fuzzy, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Hervatting wordt niet ondersteund voor apparaat %s.\n"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Niet-herkende metadata bij apparaatstype %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Opdracht vereist apparaat en toewijzingsnaam als argumenten."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2043,96 +2104,96 @@ msgstr ""
 "Deze operatie zal alle sleutelplaatsen op apparaat %s wissen.\n"
 "Na deze operatie wordt het apparaat onbruikbaar."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, fuzzy, c-format
 msgid "Device is already %s type."
 msgstr "Apparaat %s bestaat reeds.\n"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, fuzzy, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Deze operatie wordt niet ondersteund voor versleutelapparaat %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr ""
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, fuzzy, c-format
 msgid "Token %d is invalid."
 msgstr "Sleutelplaats %d is ongeldig.\n"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr ""
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, fuzzy, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Lezen uit sleutelopslag is mislukt.\n"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, fuzzy, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, fuzzy, c-format
 msgid "Token %d is not in use."
 msgstr "Sleutelplaats %d is niet in gebruik.\n"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 #, fuzzy
 msgid "Failed to import token from file."
 msgstr "Openen van sleutelbestand is mislukt.\n"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, fuzzy, c-format
 msgid "Failed to get token %d for export."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, fuzzy, c-format
 msgid "Invalid token operation %s."
 msgstr "Ongeldige sleutelgrootte %d.\n"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Apparaat %s is geen geldig LUKS-apparaat.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2141,243 +2202,252 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Ongeldig apparaat %s.\n"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Deze operatie wordt enkel ondersteund voor LUKS-apparaten.\n"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Aangevraagd reservekopiebestand %s van koptekst bestaat reeds.\n"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Kan reservekopiebestand %s van koptekst niet aanmaken.\n"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "Sleutel niet wijzigen; gegevensgebied wordt niet opnieuw versleuteld."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Sleutelbestand kan enkel gebruikt worden met optie --key-slot of met enkel één actieve sleutelplaats."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Voer wachtwoord voor sleutelplaats %u in: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Voer wachtwoord voor sleutelplaats %u in: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "Opdracht vereist apparaat en toewijzingsnaam als argumenten.\n"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr ""
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "Logbestand %s bestaat reeds, herencryptie wordt herstart.\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<apparaat> [--type <type>] [<naam>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 #, fuzzy
 msgid "open device as <name>"
 msgstr "apparaat als toewijzing <naam> openen"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<naam>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "apparaat sluiten (toewijzingen verwijderen)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "actief apparaat vergroten of verkleinen"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "apparaatstatus tonen"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <versleutelalgoritme>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "versleutelalgoritme benchmarken"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<apparaat>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "on-disk metadata proberen te herstellen"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "sleutel aan LUKS-apparaat toevoegen"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "alle sleutelplaatsen wissen (encryptiesleutel verwijderen)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr ""
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<apparaat> [<nieuw sleutelbestand>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "een LUKS-apparaat formatteren"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "sleutel aan LUKS-apparaat toevoegen"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<apparaat> [<sleutelbestand>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "verschafte sleutel of sleutelbestand van LUKS-apparaat verwijderen"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "wijzigt verschafte sleutel of sleutelbestand van LUKS-apparaat"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<apparaat> <sleutelplaats>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "sleutel met nummer <sleutelplaats> van LUKS-apparaat verwijderen"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "UUID van LUKS-apparaat tonen"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "<apparaat> op een LUKS-partitiekoptekst testen"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "LUKS-partitie-informatie dumpen"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "TCRYPT-apparaatsinformatie dumpen"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "TCRYPT-apparaatsinformatie dumpen"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 #, fuzzy
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "LUKS-apparaat schorsen en sleutel wissen (alle in-/uitvoer wordt bevroren)."
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 #, fuzzy
 msgid "Resume suspended LUKS device"
 msgstr "Geschorst LUKS-apparaat hervatten."
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Reservekopie van LUKS-apparaatkoptekst en -sleutelplaatsen maken"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "LUKS-apparaatkoptekst en -sleutelplaatsen herstellen"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2385,7 +2455,7 @@ msgstr ""
 "\n"
 "<actie> is één van:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2398,7 +2468,7 @@ msgstr ""
 "\topen: (plainOpen), luksOpen, loopaesOpen, tcryptOpen aanmaken\n"
 "\tclose: (plainClose), luksClose, loopaesClose, tryptClose verwijderen\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2413,14 +2483,14 @@ msgstr ""
 "<sleutelplaats> is het nummer van de te wijzigen LUKS-sleutelplaats\n"
 "<sleutelbestand> optioneel sleutelbestand voor de nieuwe sleutel voor de luksAddKey-actie\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2435,7 +2505,7 @@ msgstr ""
 "\tMaximum sleutelplaatsgrootte: %dkB, maximum lengte interactief wachtwoord %d (karakters)\n"
 "Standaard PBKDF2-herhalingstijd voor LUKS: %d (ms)\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2450,481 +2520,489 @@ msgstr ""
 "\tplain: %s, Sleutel: %d bits, Wachtwoordhashing: %s\n"
 "\tLUKS1: %s, Sleutel: %d bits, LUKS-kopteksthashing: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: vereist %s als argumenten"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Deze hulptekst tonen"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Korte gebruikssamenvatting tonen"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Pakketversie tonen"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Hulpopties:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Gedetailleerdere foutboodschappen tonen"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Debug-boodschappen tonen"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 #, fuzzy
 msgid "Show debug messages including JSON metadata"
 msgstr "Debug-boodschappen tonen"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Het gebruikte versleutelalgoritme om de schijf te versleutelen (zie /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "De gebruikte hash om de encryptiesleutel uit het wachtwoord aan te maken"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Het wachtwoord controleren door het twee keer te vragen"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 #, fuzzy
 msgid "Read the key from a file"
 msgstr "De sleutel uit een bestand lezen."
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "De (hoofd)sleutel tot het opslagmedium uit een bestand lezen."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 #, fuzzy
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Dump (hoofd)sleutel tot het opslagmedium in plaats van de sleutelplaatsinformatie."
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "De grootte van de encryptiesleutel"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Beperkt de lezing uit sleutelbestand"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "bytes"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Aantal bytes over te slaan in sleutelbestand"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Beperkt de lezing uit een nieuw toegevoegd sleutelbestand"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Aantal bytes over te slaan in nieuwste toegevoegde sleutelbestand"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Plaatsnummer voor nieuwe sleutel (standaard is de eerste open plaats)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "De grootte van het apparaat"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SECTOREN"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Enkel ingegeven apparaatsgrootte gebruiken (rest van apparaat wordt genegeerd). GEVAARLIJK!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "De startplaats in het backend-apparaat"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Hoeveel sectoren van de versleutelde gegevens aan het begin over te slaan"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Een alleen-lezen toewijzing aanmaken"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Niet om bevestiging vragen"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Timeout voor interactieve wachtwoordprompt (in seconden)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "seconden"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Hoe vaak de invoering van het wachtwoord opnieuw geprobeerd kan worden"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Payload uitlijnen op meervouden van <n> sectoren – voor luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 #, fuzzy
 msgid "File with LUKS header and keyslots backup"
 msgstr "Bestand met reservekopie van LUKS-koptekst en -sleutelplaatsen."
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 #, fuzzy
 msgid "Use /dev/random for generating volume key"
 msgstr "Gebruik /dev/random om de sleutel tot het opslagmedium te genereren."
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 #, fuzzy
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Gebruik /dev/urandom om de sleutel tot het opslagmedium te genereren."
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 #, fuzzy
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Apparaat met een ander, niet-overlappend cryptsegment delen."
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 #, fuzzy
 msgid "UUID for device to use"
 msgstr "UUID van het te gebruiken apparaat."
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 #, fuzzy
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Discardaanvragen (alias TRIM) op dit apparaat toelaten."
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 #, fuzzy
 msgid "Device or file with separated LUKS header"
 msgstr "Apparaat of bestand met verschillende LUKS-koptekst."
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 #, fuzzy
 msgid "Do not activate device, just check passphrase"
 msgstr "Apparaat niet activeren, enkel wachtwoord controleren."
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 #, fuzzy
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Verborgen koptekst gebruiken (verborgen TCRYPT-apparaat)."
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 #, fuzzy
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Apparaat is TCRYPT-systeemschijf (met bootloader)."
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 #, fuzzy
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Reserve (secundaire) TCRYPT-koptekst gebruiken."
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 #, fuzzy
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen."
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 #, fuzzy
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen."
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 #, fuzzy
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Eveneens naar VeraCrypt-compatibel apparaat scannen."
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Soorten apparaat-metadata: luks, plain, loopaes, tcrypt."
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 #, fuzzy
 msgid "Disable password quality check (if enabled)"
 msgstr "Wachtwoordkwaliteitscontrole uitschakelen (indien ingeschakeld)."
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 #, fuzzy
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "dm-crypt same_cpu_crypt prestatie-compatibiliteitsoptie gebruiken."
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 #, fuzzy
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "dm-crypt submit_from_crypt_cpus prestatie-compatibiliteitsoptie gebruiken."
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 #, fuzzy
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "PBKDF2 herhalingstijd voor LUKS (in ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "milliseconden"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 #, fuzzy
 msgid "kilobytes"
 msgstr "bytes"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr ""
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 #, fuzzy
 msgid "Disable locking of on-disk metadata"
 msgstr "on-disk metadata proberen te herstellen"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr ""
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 #, fuzzy
 msgid "Set label for the LUKS2 device"
 msgstr "een LUKS-apparaat formatteren"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 #, fuzzy
 msgid "Read or write the json from or to a file"
 msgstr "De sleutel uit een bestand lezen."
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 #, fuzzy
 msgid "LUKS2 header keyslots area size"
 msgstr "Bestand met reservekopie van LUKS-koptekst en -sleutelplaatsen."
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 #, fuzzy
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "De grootte van de encryptiesleutel"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Grootte van gegevensapparaat wijzigen (gegevenspositie wijzigen). GEVAARLIJK!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "Blokgrootte herencryptie"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "Blokgrootte herencryptie"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPTIE…] <actie> <actie-specifiek>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argument <actie> ontbreekt."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Onbekende actie."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "Optie --shared wordt enkel toegestaan voor open-opdracht op plain-apparaat.\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Optie --shared wordt enkel toegestaan voor open-opdracht op plain-apparaat.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 #, fuzzy
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -2933,283 +3011,283 @@ msgstr ""
 "Optie --key-size is enkel toegestaan bij luksFormat, open en benchmark.\n"
 "Om de lezing uit een sleutelbestand te beperken, gebruik --keyfile-size=(bytes)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Optie --align-payload is enkel toegestaan voor luksFormat."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 #, fuzzy
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Optie --allow-discards wordt enkel ondersteund voor de luksOpen-, loopaesOpen- en create-opdrachten.\n"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Optie --test-passphrase is enkel toegestaan bij open van LUKS- en TCRYPT-apparaten.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Sleutelgrootte moet een meervoud zijn van 8 bits"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Sleutelplaats is ongeldig."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Optie --key-file krijgt voorrang over het gespecificeerde sleutelbestandsargument."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Een negatief getal wordt niet toegestaan voor deze optie."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Slechts een enkel gebruik van het --key-file argument is toegestaan."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Slechts een enkel gebruik van de opties --use-[u]random is toegestaan."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "OPtie --use-[u]random is enkel toegestaan bij luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Optie --uuid is enkel toegestaan bij luksFormat en luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Optie --align-payload is enkel toegestaan voor luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr ""
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 #, fuzzy
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 #, fuzzy
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Optie --align-payload is enkel toegestaan voor luksFormat."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Optie --skip wordt enkel ondersteund voor open-opdracht op plain- en loopaes-apparaten.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Optie --offset wordt enkel ondersteund voor open-opdracht op plain- en loopaes-apparaten.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Optie --tcrypt-hidden, --tcrypt-system of --tcrypt-backup wordt enkel ondersteund voor TCRYPT-apparaten.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Optie --tcrypt-hidden kan niet met --allow-discards gecombineerd worden.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Optie --veracrypt wordt enkel ondersteund voor TCRYPT-apparaatstype.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Deze operatie wordt niet ondersteund voor dit apparaatstype.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 #, fuzzy
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Optie --new kan niet samen met --decrypt gebruikt worden."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "Optie -- keep-key kan enkel samen met --hash of --iter-time gebruikt worden."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr ""
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Maximum apparaatsverkleiningsgrootte is 64 MB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "Overloop van apparaatsgegevenspositie.\n"
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Verkleiningsgrootte moet een meervoud zijn van de 512 bytes-grote sector."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 #, fuzzy
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr "Opties --ignore-corruption en --restart-on-corruption kunnen niet samen gebruikt worden.\n"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Ongeldige salt-tekenreeks opgegeven."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Kan hashafbeeling %s niet aanmaken voor beschrijving."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, fuzzy, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Kan hashafbeeling %s niet aanmaken voor beschrijving.\n"
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Ongeldige root-hash tekenreeks opgegeven."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Ongeldig apparaat %s.\n"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Kan sleutelbestand %s niet lezen.\n"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<gegevensapparaat> <hash-apparaat>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "apparaat formateren"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<gegevensapparaat> <hash-apparaat> <root-hash>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "apparaat controleren"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 #, fuzzy
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<gegevensapparaat> <hash-apparaat> <root-hash>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "status van actief apparaat tonen"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<hash-apparaat>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "on-disk informatie tonen"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3224,7 +3302,7 @@ msgstr ""
 "<hash-apparaat> is de naam van het apparaat dat de verificatiegegevens bevat\n"
 "<root-hash> is de hash van de rootnode op <hash-apparaat>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3235,132 +3313,147 @@ msgstr ""
 "Standaard meegecompileerde dm-verity parameters:\n"
 "\tHash: %s, Datablok (bytes): %u, Hashblock (bytes): %u, Saltgrootte: %u, Hashformaat: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "VERITY-superblok niet gebruiken"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Formaatstype (1 - normaal, 0 - origineel Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "nummer"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Blokgrootte op het gegevensapparaat"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Blokgrootte op het hash-apparaat"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Aantal blokken in het gegevensbestand"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "blokken"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "De startplaats op het hash-apparaat"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 #, fuzzy
 msgid "Starting offset on the FEC device"
 msgstr "De startplaats op het hash-apparaat"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Hash-algoritme"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "tekenreeks"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Salt"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "hex-tekenreeks"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "Creatie hash-gebied gefaald.\n"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Kernel herstarten bij ontdekking van corruptie"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+#, fuzzy
+msgid "Panic kernel if corruption is detected"
+msgstr "Kernel herstarten bij ontdekking van corruptie"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Datacorruptie negeren, enkel loggen"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Op nul ingestelde blokken niet controleren"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Opties --ignore-corruption, --restart-on-corruption of --ignore-zero-blocks kunnen enkel bij een create-operatie gebruikt worden.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Opties --ignore-corruption en --restart-on-corruption kunnen niet samen gebruikt worden.\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Opties --ignore-corruption en --restart-on-corruption kunnen niet samen gebruikt worden.\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Ongeldige sleutelgrootte."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Kan sleutelbestand %s niet lezen."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Kan %d bytes uit sleutelbestand %s niet lezen."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 #, fuzzy
 msgid "<integrity_device>"
 msgstr "apparaat controleren"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr ""
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3373,413 +3466,418 @@ msgstr ""
 "<hash-apparaat> is de naam van het apparaat dat de verificatiegegevens bevat\n"
 "<root-hash> is de hash van de rootnode op <hash-apparaat>\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr ""
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr ""
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr ""
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr ""
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 #, fuzzy
 msgid "The size of the data integrity key"
 msgstr "De grootte van de encryptiesleutel"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 #, fuzzy
 msgid "Read the integrity key from a file"
 msgstr "De sleutel uit een bestand lezen."
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 #, fuzzy
 msgid "The size of the journal integrity key"
 msgstr "De grootte van de encryptiesleutel"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 #, fuzzy
 msgid "Read the journal integrity key from a file"
 msgstr "De sleutel uit een bestand lezen."
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr ""
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 #, fuzzy
 msgid "The size of the journal encryption key"
 msgstr "De grootte van de encryptiesleutel"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 #, fuzzy
 msgid "Read the journal encryption key from a file"
 msgstr "De sleutel uit een bestand lezen."
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr ""
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 #, fuzzy
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Optie --allow-discards wordt enkel toegestaan voor de open-operatie.\n"
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 #, fuzzy
 msgid "Invalid journal size specification."
 msgstr "Ongeldig apparaatsgrootte ingegeven."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr ""
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr ""
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Herencryptie is al bezig"
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Kan %s niet exclusief openen, apparaat wordt gebruikt."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Reservering van uitgelijnd geheugen gefaald."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Kan apparaat niet lezen: %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "LUKS1-apparaat %s wordt als onbruikbaar gemarkeerd."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Kan apparaat %s niet beschrijven."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Kan herencryptie-logbestand niet schrijven."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Kan herencryptie-logbestand niet lezen."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Logbestand %s bestaat reeds, herencryptie wordt herstart.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Activatie van tijdelijke apparaat met oude LUKS-koptekst."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Activatie van tijdelijke apparaat met nieuwe LUKS-koptekst."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Activatie van tijdelijke apparaten gefaald."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Nieuwe LUKS-koptekst voor apparaat %s aangemaakt."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 #, fuzzy
 msgid "Failed to write activation flags to new header."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 #, fuzzy
 msgid "Failed to read requirements from backup header."
 msgstr "Lezen uit sleutelopslag is mislukt."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Reservekopie van %s-koptekst op apparaat %s is aangemaakt."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Creatie van LUKS-reservekopteksten gefaald."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Kan %s-koptekst op apparaat %s niet herstellen."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "%s-koptekst op apparaat %s is hersteld."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Kan tijdelijk LUKS-apparaat niet openen."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Kan apparaatgrootte niet lezen."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Invoer/uitvoerfout tijdens herencryptie."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Opgegeven UUID is ongeldig."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Kan herencryptie-logbestand niet openen."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Er is geen ontsleutelingsproces aan de gang. Het opgegeven UUID kan enkel gebruikt worden om een geschorst ontsleutelingsproces opnieuw te starten."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Blokgrootte voor herencryptie"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Sleutel niet wijzigen; gegevensgebied wordt niet opnieuw versleuteld"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "De (hoofd)sleutel tot het opslagmedium uit een bestand lezen"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "PBKDF2 herhalingstijd voor LUKS (in ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "'direct-io' gebruiken bij het lezen van apparaten"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Na elk blok 'fsync' gebruiken"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Na elk blok het logbestand bijwerken"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Enkel deze plaats gebruiken (anderen worden uitgeschakeld)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Nieuwe koptekst op niet-versleuteld apparaat invoeren"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Apparaat permanent ontsleutelen (encryptie verwijderen)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Het UUID om de ontsleuteling te hervatten"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Soorten apparaat-metadata: luks, plain, loopaes, tcrypt"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPTIE...] <apparaat>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, fuzzy, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Herencryptie zal sleutel tot het opslagmedium %s%s%s%s wijzigen.\n"
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 #, fuzzy
 msgid "set hash to "
 msgstr ", stel hash in op "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", stel sleutelalgoritme in op "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argument is vereist."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Enkel waarden tussen 1 MB en 64 MB zijn toegestaan als herencryptieblokgrootte."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Maximum apparaatsverkleiningsgrootte is 64 MB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 #, fuzzy
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Optie --new moet samen met --reduce-device-size gebruikt worden."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 #, fuzzy
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Optie -- keep-key kan enkel samen met --hash of --iter-time gebruikt worden."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Optie --new kan niet samen met --decrypt gebruikt worden."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Optie --decrypt is niet verenigbaar met de verschafte parameters."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Optie --uuid kan enkel samen met --decrypt gebruikt worden."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr ""
 
@@ -3823,95 +3921,95 @@ msgstr ""
 msgid "Command failed with code %i (%s).\n"
 msgstr "Opdracht is mislukt met code %i"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, fuzzy, c-format
 msgid "Key slot %i created."
 msgstr "Sleutelplaats %d werd gewijzigd.\n"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, fuzzy, c-format
 msgid "Key slot %i unlocked."
 msgstr "Sleutelplaats %d is ontgrendeld.\n"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, fuzzy, c-format
 msgid "Key slot %i removed."
 msgstr "Sleutelplaats %d is ontgrendeld.\n"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr ""
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr ""
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr ""
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 #, fuzzy
 msgid "Failed to initialize device signature probes."
 msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, fuzzy, c-format
 msgid "Failed to stat device %s."
 msgstr "Kan status van sleutelbestand niet opvragen.\n"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr ""
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 #, fuzzy
 msgid "Failed to wipe device signature."
 msgstr "Schrijven naar sleutelopslag is mislukt.\n"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, fuzzy, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Kan geen map voor de apparaatstoewijzer verkrijgen."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr "Blokgrootte herencryptie"
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, fuzzy, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Kan wachtwoordkwaliteit niet nakijken: %s\n"
@@ -3930,46 +4028,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Wachtwoordkwaliteitscontrole gefaald: wachtwoord is van slechte kwaliteit (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Fout bij het lezen van het wachtwoord uit de terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Voer wachtwoord nogmaals in: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Wachtwoorden komen niet overeen."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Kan de gegevenspositie niet via terminalinvoer gebruiken."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Voer wachtwoord in: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Voer wachtwoord in voor %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Geen sleutel beschikbaar met dit wachtwoord."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, fuzzy, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Kan bestand %s niet openen.\n"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, fuzzy, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Kan sleutelbestand %s niet lezen.\n"
@@ -4011,6 +4109,14 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Openen van sleutelbestand is mislukt.\n"
 
+#, fuzzy
+#~ msgid "Wrong key size."
+#~ msgstr "Ongeldige sleutelgrootte.\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Ongeldige grootteparameters voor VERITY-apparaat."
+
+#, c-format
 #~ msgid "Cipher %s is not available."
 #~ msgstr "Versleutelalgoritme %s is niet beschikbaar."
 
@@ -4165,6 +4271,3 @@ msgstr "Openen van sleutelbestand is mislukt.\n"
 
 #~ msgid "(Obsoleted, see man page.)"
 #~ msgstr "(Verouderd, zie man-pagina.)"
-
-#~ msgid "%s is not LUKS device.\n"
-#~ msgstr "%s is geen LUKS-apparaat.\n"
index 2f12a75..84ef154 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index fd39611..0ce6083 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,14 +1,14 @@
 # Polish translation for cryptsetup.
 # Copyright (C) 2010 Free Software Foundation, Inc.
 # This file is put in the public domain.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2010-2020.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2010-2021.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-15 19:02+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-22 19:00+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
@@ -18,61 +18,62 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Nie można zainicjować device-mappera w czasie działania jako nie-root."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Nie można zainicjować device-mappera. Czy moduł jądra dm_mod jest wczytany?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Żądana flaga odroczona nie jest obsługiwana."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID dla urządzenia %s został skrócony."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Nieznany typ celu dm."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Żądane opcje dm-crypta dotyczące wydajności nie są obsługiwane."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Żądane opcje dm-verity dotyczące obsługi uszkodzenia danych nie są obsługiwane."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Żądane opcje FEC dm-verity nie są obsługiwane."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Żądane opcje integralności danych nie są obsługiwane."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Żądana opcja sector_size nie jest obsługiwana."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Żądane automatyczne przeliczenie znaczników integralności nie jest obsługiwane."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Porzucenie/TRIM nie jest obsługiwane."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Żądany tryb bitmapy dm-integrity nie jest obsługiwany."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Nie udało się odpytać segmentu dm-%s."
@@ -114,7 +115,7 @@ msgstr "Nie można zainicjować backendu kryptograficznego RNG."
 msgid "Cannot initialize crypto backend."
 msgstr "Nie można zainicjować backendu kryptograficznego."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Algorytm skrótu %s nie jest obsługiwany."
@@ -128,7 +129,7 @@ msgstr "Błąd przetwarzania klucza (użyto algorytmu skrótu %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Nie można określić rodzaju urządzenia. Niezgodny sposób uaktywniania urządzenia?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Ta operacja jest obsługiwana tylko dla urządzeń LUKS."
 
@@ -136,7 +137,7 @@ msgstr "Ta operacja jest obsługiwana tylko dla urządzeń LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Ta operacja jest obsługiwana tylko dla urządzeń LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Wszyskie miejsca na klucze są pełne."
 
@@ -150,7 +151,7 @@ msgstr "Numer klucza %d jest błędny, proszę wybrać wartość między 0 a %d.
 msgid "Key slot %d is full, please select another one."
 msgstr "Miejsce na klucz %d jest pełne, proszę wybrać inne."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Rozmiar urządzenia nie jest wyrównany do rozmiaru bloku logicznego urządzenia."
 
@@ -159,7 +160,8 @@ msgstr "Rozmiar urządzenia nie jest wyrównany do rozmiaru bloku logicznego urz
 msgid "Header detected but device %s is too small."
 msgstr "Wykryto nagłówek, ale urządzenie %s jest zbyt małe."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Ta operacja nie jest obsługiwana dla tego rodzaju urządzenia."
 
@@ -167,17 +169,13 @@ msgstr "Ta operacja nie jest obsługiwana dla tego rodzaju urządzenia."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Niedozwolona operacja w trakcie ponownego szyfrowania."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Nieobsługiwana wersja LUKS %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Osobne urządzenie metadanych nie jest obsługiwane dla tego rodzaju szyfrowania."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Urządzenie %s nie jest aktywne."
@@ -191,7 +189,7 @@ msgstr "Urządzenie stojące za urządzeniem szyfrowanym %s zniknęło."
 msgid "Invalid plain crypt parameters."
 msgstr "Błędne parametry szyfru plain."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Błędny rozmiar klucza."
 
@@ -199,12 +197,16 @@ msgstr "Błędny rozmiar klucza."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID nie jest obsługiwany dla tego rodzaju szyfrowania."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Osobne urządzenie metadanych nie jest obsługiwane dla tego rodzaju szyfrowania."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Nieobsługiwany rozmiar sektora szyfrowania."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Rozmiar urządzenia nie jest wyrównany do żądanego rozmiaru sektura."
 
@@ -248,8 +250,8 @@ msgstr "UWAGA: rozmiar metadanych LUKS2 zmienił się na %<PRIu64> (w bajtach).\
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "UWAGA: rozmiar obszaru kluczy LUKS2 zmienił się na %<PRIu64> (w bajtach).\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Urządzenie %s jest zbyt małe."
@@ -282,16 +284,16 @@ msgstr "Nie można sformatować urządzenia LUKSAES bez urządzenia."
 msgid "Can't format VERITY without device."
 msgstr "Nie można sformatować VERITY bez urządzenia."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Nieobsługiwany typ hasza VERITY %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Nieobsługiwany rozmiar bloku VERITY."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Nieobsługiwany offset hasza VERITY."
 
@@ -321,236 +323,236 @@ msgstr "UWAGA: żądany rozmiar znacznika %d B różni się od rozmiaru wyjścia
 msgid "Unknown crypt device type %s requested."
 msgstr "Nieznany typ żądanego urządzenia szyfrującego %s."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Nieobsługiwane parametry urządzenia %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Niezgodne parametry dla urządzenia %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Urządzenia szyfrowane nie zgadzają się."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Nie udało się przeładować urządzenia %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Nie udało się wstrzymać urządzenia %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Nie udało wznowić urządzenia %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Błąd krytyczny przy przeładowywaniu urządzenia %s (w oparciu o urządzenie %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Nie udało się przełączyć urządzenia %s na dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Nie można zmienić rozmiaru urządzenia loopback."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Czy na pewno zmienić UUID urządzenia?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Plik nagłówka kopii zapasowej nie zawiera zgodnego nagłówka LUKS."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Wolumen %s nie jest aktywny."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Wolumen %s już został wstrzymany."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Wstrzymywanie nie jest obsługiwane dla urządzenia %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Błąd podczas wstrzymywania urządzenia %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Wolumen %s nie jest wstrzymany."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Wznawianie nie jest obsługiwane dla urządzenia %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Błąd podczas wznawiania urządzenia %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Wolumen %s nie jest wstrzymany."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Klucz wolumenu nie pasuje do wolumenu."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Nie można dodać klucza, wszystkie miejsca na klucze wyłączone i nie podano klucza wolumenu."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Nie udało się podstawić nowego klucza."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Numer klucza %d jest nieprawidłowy."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Klucz %d nie jest aktywny."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Nagłówek urządzenia zachodzi na obszar danych."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Ponowne szyfrowanie trwa. Nie można uaktywnić urządzenia."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Nie udało się uzyskać blokady ponownego szyfrowania."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Odtwarzanie ponownego szyfrowania LUKS2 nie powiodło się."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Typ urządzenia nie został właściwie zainicjalizowany."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Nie można użyć urządzenia %s, nazwa jest nieprawidłowa lub nadal w użyciu."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Urządzenie %s już istnieje."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Nie można użyć urządzenia %s, nazwa jest nieprawidłowa lub nadal w użyciu."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Podano niewłaściwy klucz wolumenu dla zwykłego urządzenia."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Podano niewłaściwy hasz główny dla urządzenia VERITY."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Wymagany podpis hasza głównego."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Brak pęku kluczy w jądrze: wymagany do przekazania podpisu do jądra."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Nie udało się załadować klucza do pęku kluczy w jądrze."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Urządzenie %s jest nadal w użyciu."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Błędne urządzenie %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Bufor klucza wolumenu zbyt mały."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Nie można odtworzyć klucza wolumenu dla zwykłego urządzenia."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Nie można odtworzyć hasza głównego dla urządzenia VERITY."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Ta operacja nie jest obsługiwana dla urządzenia szyfrującego %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Operacja zrzutu nie jest obsługiwana dla tego rodzaju urządzenia."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Offset danych nie jest wielokrotnością liczby bajtów %u."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Nie można przekonwertować urządzenia %s, które jest nadal w użyciu."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Nie udało się przypisać klucza %u jako nowego klucza wolumenu."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Nie udało się zainicjować domyślnych parametrów klucza LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Nie udało się przypisać klucza %d do skrótu."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Pęk kluczy w jądrze nie jest obsługiwany przez jądro."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Nie udało się odczytać hasła z pęku kluczy (błąd %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Nie udało się uzyskać globalnej blokady serializacji dostępu ciężkiego pamięciowo."
 
@@ -578,8 +580,8 @@ msgstr "Nie udało się wykonać stat na pliku klucza."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Nie można przemieścić się do żądanego położenia pliku klucza."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Brak pamięci podczas odczytu hasła."
 
@@ -599,51 +601,56 @@ msgstr "Przekroczono maksymalny rozmiar pliku klucza."
 msgid "Cannot read requested amount of data."
 msgstr "Nie można odczytać żądanej ilości danych."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Urządzenie %s nie istnieje lub dostęp jest zabroniony."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Urządzenie %s nie jest zgodne."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Zignorowano niewłaściwy rozmiar optimal-io dla urządzenia danych (%u bajtów)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Urządzenie %s jest zbyt małe. Wymagane przynajmniej %<PRIu64> bajtów."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Nie można użyć urządzenia %s, które jest w użyciu (już podmapowane lub zamontowane)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Nie można użyć urządzenia %s, brak uprawnień."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Nie można uzyskać informacji o urządzeniu %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Nie można użyć urządzenia loopback w czasie działania jako nie-root."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Nie udało się podłączyć urządzenia loopback (wymagane urządzenie loop z flagą autoclear)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Żądany offset jest poza rzeczywistym rozmiarem urządzenia %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Urządzenie %s ma zerowy rozmiar."
@@ -717,16 +724,16 @@ msgstr "Blokowanie nie powiodło się. Ścieżka blokady %s/%s jest nieużywalna
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "UWAGA: brak katalogu blokad %s/%s!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Katalog blokujący %s/%s zostanie utworzony z domyślnymi wkompilowanymi uprawnieniami."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Blokowanie przerwane. Ścieżka blokady %s/%s jest nieużywalna (%s nie jest katalogiem)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Nie można przemieścić się we właściwe położenie urządzenia."
 
@@ -753,8 +760,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Określenie szyfru powinno być w formacie [szyfr]-[tryb]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Nie można zapisać na urządzenie %s, brak uprawnień."
@@ -773,12 +780,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Błąd we/wy podczas szyfrowania klucza."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Nie można otworzyć urządzenia %s."
@@ -799,43 +806,43 @@ msgstr "Urządzenie %s jest zbyt małe (LUKS1 wymaga przynajmniej %<PRIu64> bajt
 msgid "LUKS keyslot %u is invalid."
 msgstr "Numer klucza LUKS %u jest nieprawidłowy."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Urządzenie %s nie jest prawidłowym urządzeniem LUKS."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Żądany plik kopii zapasowej nagłówka %s już istnieje."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Nie można utworzyć pliku kopii zapasowej nagłówka %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Nie można zapisać pliku kopii zapasowej nagłówka %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Plik kopii zapasowej nie zawiera prawidłowego nagłówka LUKS."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Nie można otworzyć pliku kopii zapasowej nagłówka %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Nie można odczytać pliku kopii zapasowej nagłówka %s."
@@ -857,7 +864,7 @@ msgstr "nie zawiera nagłówka LUKS. Nadpisanie nagłówka może zniszczyć dane
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "już zawiera nagłówek LUKS. Nadpisanie nagłówka zniszczy istniejące klucze."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -869,101 +876,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Niestandardowy rozmiar klucza, wymagana ręczna naprawa."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Niestandardowe wyrównanie kluczy, wymagana ręczna naprawa."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Naprawianie kluczy."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Klucz %i: naprawiono offset (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Klucz %i: naprawiono pasy (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Klucz %i: błędna sygnatura partycji."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Klucz %i: zarodek wymazany."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Zapis nagłówka LUKS na dysk."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Naprawa nie powiodła się."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Żądany skrót LUKS %s nie jest obsługiwany."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "W nagłówku LUKS nie wykryto żadnych znanych problemów."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Błąd podczas uaktualniania nagłówka LUKS na urządzeniu %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Błęd podczas ponownego odczytu nagłówka LUKS po uaktualnieniu na urządzeniu %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Offset danych dla nagłówka LUKS musi wynosić 0 lub więcej niż rozmiar nagłówka."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Podano zły format LUKS UUID."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Nie można utworzyć nagłówka LUKS: odczyt losowego zarodka nie powiódł się."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Nie można utworzyć nagłówka LUKS: uzyskanie skrótu nagłówka nie powiodło się (przy użyciu algorytmu %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Klucz numer %d jest aktywny, należy go najpierw wyczyścić."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Klucz %d zawiera zbyt mało pasów. Zmieniony nagłówek?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Nie można otworzyć klucza (przy użyciu skrótu %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Numer klucza %d jest błędny, proszę wybrać numer od 0 do %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Nie można wymazać urządzenia %s."
@@ -999,11 +1006,11 @@ msgstr "Przekroczono maksymalną długość hasła TCRYPT (%zu)."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Algorytm skrótu PBKDF2 %s nie jest dostępny, pominięto."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Wymagany interfejs kryptograficzny jądra nie jest dostępny."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Proszę upewnić się, że moduł jądra algif_skcipher został załadowany."
 
@@ -1016,159 +1023,173 @@ msgstr "Uaktywnianie nie jest obsługiwane dla rozmiaru sektora %d."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Jądro nie obsługuje uaktywniania dla tego starego trybu TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Włączanie szyfrowania systemu TCRYPT dla partycji %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Jądro nie obsługuje odwzorowań zgodnych z TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Ta funkcja nie jest obsługiwana bez załadowanego nagłówka TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Przy analizie obsługiwanego Głównego Klucza Wolumenu napotkano nieoczekiwany wpis metadanych typu '%u'."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Przy analizie Głównego Klucza Wolumenu napotkano błędny ciąg znaków."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Przy analizie obsługiwanego Głównego Klucza Wolumenu napotkano nieoczekiwany ciąg znaków ('%s')."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Przy analizie obsługiwanego Głównego Klucza Wolumenu napotkano nieoczekiwaną wartość wpisu metadanych '%u'."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Nie udało się odczytać sygnatury BITLK z %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Błędna lub nieznana sygnatura urządzenia BITLK."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK w wersji 1 nie jest obecnie obsługiwany."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Błędna lub nieznana sygnatura rozruchowa urządzenia BITLK."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Błędna lub nieznana sygnatura urządzenia BITLK."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Nieobsługiwany rozmiar sektora %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Nie udało się odczytać nagłówka BITLK z %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Nie udało się odczytać metadanych BITLK FVE z %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Nieznany lub nieobsługiwany rodzaj szyfrowania."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Nie udało się odczytać wpisów metadanych BITLK z %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Przy analizie zewnętrznego klucza napotkano nieoczekiwany wpis metadanych typu '%u'."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Przy analizie zewnętrznego klucza napotkano nieoczekiwaną wartość wpisu metadanych '%u'."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Przy analizie klucza początkowego napotkano nieoczekiwany wpis metadanych."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Ta operacja nie jest obsługiwana."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Błędny rozmiar klucza."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Nieoczekiwany rozmiar danych klucza."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "To urządzenie BITLK jest w nieobsługiwanym stanie i może być uaktywnione."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Urządzenia BITLK o typie '%s' nie mogą być uaktywnione."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Uaktywnianie częściowo odszyfrowanych urządzeń BITLK nie jest obsługiwane."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Nie można uaktywnić urządzenia, brak obsługi BITLK IV w module dm-crypt jądra."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Nie można uaktywnić urządzenia, brak obsługi dyfuzora BITLK Elephant w module dm-crypt jądra."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Urządzenie Verity %s nie używa nagłówka na dysku."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Urządzenie %s nie jest prawidłowym urządzeniem VERITY."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Nieobsługiwana wersja VERITY %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Uszkodzony nagłówek VERITY."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Podano zły format UUID-a VERITY na urządzeniu %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Błąd podczas uaktualniania nagłówka VERITY na urządzeniu %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Weryfikacja podpisu hasza głównego nie jest obsługiwana."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Błędów nie można naprawić z urządzeniem FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Znaleziono %u błędów możliwych do naprawienia z urządzeniem FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Jądro nie obsługuje odwzorowań dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Jądro nie obsługuje opcji podpisu dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Urządzenie VERITY wykryło uszkodzenie po uaktywnieniu."
 
@@ -1177,41 +1198,37 @@ msgstr "Urządzenie VERITY wykryło uszkodzenie po uaktywnieniu."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Nie wyzerowane miejsce zapasowe na pozycji %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Przepełnienie offsetu urządzenia."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Weryfikacja nie powiodła się na pozycji %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Błędne parametry rozmiaru dla urządzenia VERITY."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Przepełnienie obszaru skrótu."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Weryfikacja obszaru danych nie powiodła się."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Weryfikacja głównego hasza nie powiodła się."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Błąd wejścia/wyjścia podczas tworzenia obszaru haszy."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Tworzenie obszaru haszy nie powiodło się."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "UWAGA: Jądro nie może uaktywnić urządzenia, jeśli rozmiar bloku danych przekracza rozmiar strony (%u)."
@@ -1220,53 +1237,61 @@ msgstr "UWAGA: Jądro nie może uaktywnić urządzenia, jeśli rozmiar bloku dan
 msgid "Failed to allocate RS context."
 msgstr "Nie udało się przydzielić kontekstu RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Nie udało się przydzielić bufora."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Nie udało się odczytać bloku RS %<PRIu64> bajt %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Nie udało się odczytać parzystości dla bloku RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Nie udało się naprawić parzystości dla bloku %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Nie udało się zapisać parzystości dla bloku RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Dla FEC rozmiary bloków muszą się zgadzać."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Błędna liczba bajtów parzystości."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Błędna długość segmentu FEC."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Nie udało się określić rozmiaru urządzenia %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Jądro nie obsługuje odwzorowań dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Jądro nie obsługuje stałego wyrównania metadanych dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Jądro odmawia uaktywnienia niebezpiecznej opcji przeliczenia (p. stare opcje aktywacji, aby wymusić)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Nie udało się uzyskać blokady dla zapisu na urządzeniu %s."
@@ -1287,45 +1312,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Żądany offset danych jest zbyt mały."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "UWAGA: obszar kluczy (%<PRIu64> bajtów) bardzo mały, dostępna liczba kluczy LUKS2 jest bardzo ograniczona.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Nie udało się uzyskać blokady do odczytu na urządzeniu %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Wykryto zabronione wymagania LUKS2 w kopii zapasowej %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Offset danych różni się między urządzeniem a kopią zapasową; przywrócenie nie powiodło się."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Nagłówek binarny z rozmiarem obszarów kluczy różni się między urządzeniem a kopią zapasową; przywrócenie nie powiodło się."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Urządzenie %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "nie zawiera nagłówka LUKS2. Nadpisanie nagłówka może zniszczyć dane na tym urządzeniu."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "już zawiera nagłówek LUKS2. Nadpisanie nagłówka zniszczy istniejące klucze."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1335,7 +1360,7 @@ msgstr ""
 "UWAGA: wykryto nieznane wymagania LUKS2 w nagłówku prawdziwego urządzenia!\n"
 "Nadpisanie nagłówka kopią zapasową może uszkodzić dane na tym urządzeniu!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1345,58 +1370,58 @@ msgstr ""
 "UWAGA: wykryto nie zakończone ponowne szyfrowanie offline na urządzeniu!\n"
 "Nadpisanie nagłówka kopią zapasową może uszkodzić dane."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Zignorowano nieznaną flagę %s."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Brak klucza dla segmentu dm-crypt %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Nie udało się ustawić segmentu dm-crypt."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Nie udało się ustawić segmentu dm-linear."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Nieobsługiwana konfiguracja integralności urządzenia."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Podobne szyfrowanie trwa. Nie można dezaktywować urządzenia."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Nie udało się zastąpić wstrzymanego urządzenia %s celem dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Nie udało się odczytać wymagań LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Wykryto nie spełnione wymagania LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Operacja niezgodna z urządzeniem oznaczonym do ponownego szyfrowania starym szyfrem. Przerwano."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Operacja niezgodna z urządzeniem oznaczonym do ponownego szyfrowania LUKS2. Przerwano."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Za mało dostępnej pamięci, aby otworzyć klucz."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Nie udało się otworzyć klucza."
 
@@ -1426,7 +1451,7 @@ msgstr "Nie można przenieść obszaru kluczy. Brak miejsca."
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Nie można przenieść obszaru kluczy. Obszar kluczy LUKS2 zbyt mały."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Nie można przenieść obszaru kluczy."
 
@@ -1463,281 +1488,293 @@ msgstr "Nie można przekonwertować do formatu LUKS1 - klucz %u (powyzej maksimu
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Nie można przekonwertować do formatu LUKS1 - klucz %u nie jest zgodny z LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Rozmiar strefy hotzone musi być wielokrotnością wyliczonego wyrównania strefy (bajtów: %zu)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Rozmiar urządzenia musi być wielokrotnością wyliczonego wyrównania strefy (bajtów: %zu)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Nieobsługiwany tryb odporności %s"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Nie udało się zainicjować obudowania przestrzeni starego segmentu."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Nie udało się zainicjować obudowania przestrzeni nowego segmentu."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Nie udało się odczytać sum kontrolnych dla aktualnej strefy hotzone."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Nie udało się odczytać obszaru hotzone zaczynającego się od %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Nie udało się odszyfrować sektora %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Nie udało się odtworzyć sektora %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Rozmiary urządzenia źródłowego i docelowego różnią się. Źródłowe %<PRIu64>, docelowe: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Nie udało się uaktywnić urządzenia hotzone %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Nie udało się uaktywnić urządzenia nakładkowego %s z aktualną tablicą źródła."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Nie udało się załadować nowego odwzorowania dla urządzenia %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Nie udało się odświeżyć stosu urządzenia ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Nie udało się ustawić nowego rozmiaru obszaru kluczy."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Przesunięcie danych nie jest wyrównane do żądanego rozmiaru sektora szyfrowania (bajtów: %<PRIu32>)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Urzędzenie danych nie jest wyrównane do żądanego rozmiaru sektora szyfrowania (bajtów: %<PRIu32>)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Przesunięcie danych (sektorów: %<PRIu64>) jest mniejsze niż przyszły offset danych (sektorów: %<PRIu64>)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Nie udało się otworzyć %s w trybie wyłączności (już odwzorowano lub zamontowano)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Urządzenie nie jest oznaczone do ponownego szyfrowania LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Nie udało się załadować kontekstu ponownego szyfrowania LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Nie udało się pobrać stanu ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Urządzenie nie jest w trakcie ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Proces ponownego szyfrowania już trwa."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Nie udało się uzyskać blokady dla ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Nie można kontynuować ponownego szyfrowania. Należy najpierw uruchomić odtworzenie ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Rozmiar urządzenia aktywnego oraz żądany rozmiar ponownego szyfrowania różnią się."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "W parametrach ponownego szyfrowania zażądano niedozwolonego rozmiaru urządzenia."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Ponowne szyfrowanie trwa. Nie można wykonać odzyskiwania."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "Ponowne szyfrowanie LUKS2 jest już zainicjowane w metadanych."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Nie udało się zainicjować ponownego szyfrowania LUKS2 w metadanych."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Nie udało się ustawić segmentów urządzeń dla następnej strefy hotzone ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Nie udało się zapisać metadanych odporności ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Odszyfrowanie nie powiodło się."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Nie udało się zapisać obszaru hotzone zaczynającego się od %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Nie udało się zsynchronizować danych."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Nie udało się uaktualnić metadanych po zakończeniu aktualnej strefy hotzone ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Nie udało się zapisać metadanych LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Nie udało wymazać danych segmentu zapasowego."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Nie udało się wyłączyć flagi wymagania ponownego szyfrowania."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Nie udało się przypisać tokenu %d do klucza %d."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Nie udało się uzyskać blokady ponownego szyfrowania."
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Błąd krytyczny podczas ponownego szyfrowania fragmentu zaczynającego się od %<PRIu64> o długości w sektorach %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Proszę nie wznawiać urządzenia dopóki nie zostanie zastąpione celem błędnym ręcznie."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Nie można kontynuować ponownego szyfrowania. Nieoczekiwany stan ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Brak lub błędny kontekst ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Nie udało się zainicjować stosu urządzenia ponownego szyfrowania."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Nie udało się uaktualnić kontekstu ponownego szyfrowania."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Numer klucza %d jest nieprawidłowy."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Brak wolnego miejsca na token."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Nie udało się utworzyć wbudowanego tokenu %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Nie można wykonać weryfikacji hasła, jeśli wejściem nie jest terminal."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Parametry szyfrowania kluczy mogą być ustawione tylko dla urządzeń LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Nie wykryto znanego wzorca określającego szyfr."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "UWAGA: Parametr --hash jest ignorowany w trybie zwykłym z podanym plikiem klucza.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "UWAGA: Opcja --keyfile-size jest ignorowana, rozmiar odczytu jest taki sam, jak rozmiar klucza szyfrującego.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Wykryto sygnatury urządzeń na %s. Dalsze operacje mogą uszkodzić istniejące dane."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operacja przerwana.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Wymagana jest opcja --key-file."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Proszę wprowadzić PIM VeraCrypt: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Błędna wartość PIM: błąd składni."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Błędna wartość PIM: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Błędna wartość PIM: poza zakresem."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Nie wykryto nagłówka urządzenia z tym hasłem."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Urządzenie %s nie jest prawidłowym urządzeniem BITLK."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1748,88 +1785,96 @@ msgstr ""
 "Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n"
 "w bezpiecznym miejscu."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Urządzenie %s jest nadal aktywne i zaplanowane do odroczonego usunięcia.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Zmiana rozmiaru aktywnego urządzenia wymaga klucza wolumenu w pęku, ale ustawiono opcję --disable-keyring."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Test szybkości przerwany."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/D\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iteracji/sekundę dla klucza %zu-bitowego\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/D\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iteracji, pamięć: %5u, równoległe wątki (CPU): %1u dla klucza %zu-bitowego (żądany czas %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Wynik testu wydajności nie jest wiarygodny."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Testy są przybliżone tylko z użyciem pamięci (bez we/wy na dysk).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s  Algorytm |     Klucz |     Szyfrowanie | Odszyfrowywanie\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Szyfr %s (rozmiar klucza w bitach: %i) nie jest dostępny."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#      Algorytm |     Klucz |     Szyfrowanie | Odszyfrowywanie\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/D"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Wygląda na to, że urządzenie nie wymaga odtwarzania ponownego szyfrowania.\n"
-"Czy mimo to kontynuować?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Hasło do odtwarzania ponownego szyfrowania: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Naprawdę kontynuować odtwarzanie ponownego szyfrowania LUKS2?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Hasło do odtwarzania ponownego szyfrowania: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Hasło do odtwarzania ponownego szyfrowania: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Naprawdę próbować naprawić nagłówek urządzenia LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1837,104 +1882,108 @@ msgstr ""
 "Czyszczenie urządzenia w celu zainicjowania sumy kontrolnej integralności.\n"
 "Można przerwać ten proces wciskając Ctrl+C (reszta nie wymazanego urządzenia będzie zawierać błędną sumę kontrolną).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Nie można dezaktywować urządzenia tymczasowego %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Opcja integralności może być używana tylko dla formatu LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Nieobsługiwane opcje rozmiaru metadanych LUKS2."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Plik nagłówka nie istnieje, czy utworzyć go?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Nie można utworzyć pliku nagłówka %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Nie wykryto znanego wzorca określającego integralność."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Nie można użyć %s jako nagłówka na dysku."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "To nieodwołalnie nadpisze dane na %s."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Nie udało się ustawić parametrów PBKDF."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
-msgstr "Offset zmniejszonych danych jest dozwolony tylko dla osobnego nagłówka LUKS."
+msgstr "Offset zmniejszonych danych jest dozwolony tylko dla odłączonego nagłówka LUKS."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Nie można określić rozmiaru klucza wolumenu dla LUKS bez kluczy, proszę użyć opcji --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Urządzenie uaktywnione, ale nie można uczynić flag trwałymi."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Klucz %d jest wybrany do usunięcia."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "To jest ostatni klucz. Urządzenie stanie się bezużyteczne po usunięciu tego klucza."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Dowolne pozostałe hasło: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operacja przerwana, klucz NIE został wymazany.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Hasło do usunięcia: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Nowe hasło dla klucza: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Dowolne istniejące hasło: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Hasło, które ma być zmienione: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Nowe hasło: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Hasło dla klucza do konwersji: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Dla operacji isLuks obsługiwany jest tylko jeden argument będący urządzeniem."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1945,12 +1994,12 @@ msgstr ""
 "Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n"
 "w bezpiecznym miejscu."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Miejsce %d nie zawiera niepowiązanego klucza."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1959,30 +2008,40 @@ msgstr ""
 "Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n"
 "w bezpiecznym miejscu."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s nie jest nazwą aktywnego urządzenia %s."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s nie jest nazwą aktywnego urządzenia LUKS lub brak nagłówka."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Wymagana jest opcja --header-backup-file."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s nie jest urządzeniem zarządzanym przez cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Odświeżanie nie jest obsługiwane dla typu urządzenia %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Nie rozpoznany typ urządzenia metadanych %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Polecenie wymaga urządzenia i nazwy odwzorowywanej jako argumentów."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1991,95 +2050,95 @@ msgstr ""
 "Ta operacja usunię wszystkie klucze na urządzeniu %s.\n"
 "Urządzenie po tej operacji stanie się bezużyteczne."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operacja przerwana, klucze NIE zostały wymazane.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Błędny typ LUKS, obsługiwane są tylko luks1 i luks2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Urządzenie już ma typ %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Ta operacja przekonwertuje %s do formatu %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operacja przerwana, urządzenie NIE zostało skonwertowane.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Brak opcji --priority, --label lub --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Token %d jest błędny."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Token %d jest w użyciu."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Nie udało się dodać tokenu %d do pęku kluczy luks2."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Nie udało się przypisać tokenu %d do klucza %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Token %d nie jest w użyciu."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Nie udało się zaimportować tokenu z pliku."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Nie udało się pobrać tokenu %d do eksportu."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Parametr --key-description jest wymagany do akcji dodania tokenu."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Akcja wymaga określonego tokenu. Należy użyć parametru --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Błędna operacja na tokenie %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Wykryto aktywne urządzenie dm '%s' dla urządzenia danych %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Urządzenie %s nie jest urządzeniem blokowym.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Nie udało się wykryć właścicieli urządzenia %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2093,233 +2152,242 @@ msgstr ""
 "Aby uruchomić ponowne szyfrowanie w trybie online, należy użyć parametru\n"
 "--active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Błędny typ urządzenia LUKS."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Szyfrowanie bez odłączonego nagłówka (--header) jest niemożliwe bez ograniczenia rozmiaru urządzenia danych (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Żądany offset danych musi być mniejszy lub równy połowie parametru --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Modyfikowanie wartości --reduce-device-size do dwukrotności parametru --offset %<PRIu64> (w sektorach).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Szyfrowanie jest obsługiwane tylko w formacie LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Wykrytu urządzenie LUKS na %s. Czy zaszyfrować to urządzenie LUKS jeszcze raz?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Plik nagłówka %s już istnieje. Przerwano."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Nie można utworzyć pliku tymczasowego nagłówka %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s jest teraz aktywne i gotowe do szyfrowania w locie.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "Odszyfrowanie LUKS2 jest obsługiwane tylko z urządzeniem z odłączonym nagłówkiem."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Za mało wolnych kluczy do ponownego szyfrowania."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Rozmiaru klucza można użyć tylko z --key-slot albo przy dokładnie jednym aktywnym kluczu."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Hasło dla klucza %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Hasło dla klucza %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Zmiana szyfru do szyfrowania danych na %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Polecenie wymaga urządzenia jako argumentu."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Obecnie obsługiwany jest tylko format LUKS2. Dla LUKS1 proszę użyć narzędzia cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Tradycyjne ponowne szyfrowanie offline juz trwa. Proszę użyć narzędzia cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Ponowne szyfrowanie urządzenia z profilem integralności nie jest obsługiwane."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Ponowne szyfrowanie LUKS2 jest już zainicjowane. Przerywanie operacji."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "Urządzenie LUKS2 nie jest w trakcie ponownego szyfrowania."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<uządzenie> [--type <typ>] [<nazwa>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "otwarcie urządzenia jako <nazwa>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nazwa>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "zamknięcie urządzenia (usunięcie odwzorowania)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "zmiana rozmiaru aktywnego urządzenia"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "pokazanie stanu urządzenia"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <szyfr>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "test szybkości szyfru"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<urządzenie>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "próba naprawy metadanych na dysku"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "ponowne szyfrowanie urządzenia LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "usunięcie wszystkich kluczy (usunięcie klucza szyfrującego)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "przekonwertowanie formatu LUKS z/do LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "ustawienie opcji trwałej konfiguracji dla LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<urządzenie> [<nowy plik klucza>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "sformatowanie urządzenia LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "dodanie klucza do urządzenia LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<urządzenie> [<plik klucza>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "usunięcie podanego klucza lub pliku klucza z urządzenia LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "zmiana podanego klucza lub pliku klucza urządzenia LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "konwersja klucza na nowe parametry pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<urządzenie> <numer klucza>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "wymazanie klucza o numerze <numer klucza> z urządzenia LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "wypisanie UUID-a urządzenia LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "sprawdzenie <urządzenia> pod kątem nagłówka partycji LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "zrzut informacji o partycji LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "zrzut informacji o urządzeniu TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "zrzut informacji o urządzeniu BITLK"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Wstrzymanie urządzenia LUKS i wymazanie klucza (zamraża wszystkie operacje we/wy)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Wznowienie zatrzymanego urządzenia LUKS"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Kopia zapasowa nagłówka i kluczy urządzenia LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Odtworzenie nagłówka i kluczy urządzenia LUKS z kopii zapasowej"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <urządzenie>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Operacja na tokenach LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2327,7 +2395,7 @@ msgstr ""
 "\n"
 "<akcja> to jedno z:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2339,7 +2407,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2354,7 +2422,7 @@ msgstr ""
 "<numer klucza> to numer klucza LUKS do zmiany\n"
 "<plik klucza> to opcjonalny plik nowego klucza dla akcji luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2363,7 +2431,7 @@ msgstr ""
 "\n"
 "Domyślny wkompilowany format metadanych to %s (dla akcji luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2380,7 +2448,7 @@ msgstr ""
 "Domyślny PBKDF dla LUKS2: %s\n"
 "\tCzas iteracji: %d, wymagana pamięć: %dkB, liczba wątków: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2395,443 +2463,451 @@ msgstr ""
 "\tplain: %s, bitów klucza: %d, skrót hasła: %s\n"
 "\tLUKS: %s, bitów klucza: %d, skrót nagłówka LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: Domyślny rozmiar klucza z trybem XTS (dwa klucze wewnętrzne) będzie podwojony.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: wymaga %s jako argumentów"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Wyświetlenie tego opisu"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Wyświetlenie krótkiej informacji o składni"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Wypisanie wersji pakietu"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Opcje pomocnicze:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Wyświetlanie bardziej szczegółowych komunikatów błędów"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Wyświetlanie informacji diagnostycznych"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Wyświetlanie informacji diagnostycznych wraz z metadanymi JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Szyfr używany do zaszyfrowania dysku (p. /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Skrót używany do utworzenia klucza szyfrującego z hasła"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Sprawdzenie poprawności hasła poprzez dwukrotne pytanie"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Odczyt klucza z pliku"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Odczyt klucza wolumenu (klucza głównego) z pliku."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Zrzut (głównego) klucza wolumenu zamiast informacji o kluczach"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Rozmiar klucza szyfrującego"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITÓW"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Ograniczenie odczytu z pliku klucza"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "bajty"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Liczba bajtów do pominięcia w pliku klucza"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Ograniczenie odczytu z nowo dodanego pliku klucza"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Liczba bajtów do pominięcia w nowo dodanym kluczu"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Numer dla nowego klucza (domyślny: pierwszy wolny)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Rozmiar urządzenia"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTORÓW"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Użycie tylko określonego rozmiaru urządzenia (zignorowanie pozostałej części). NIEBEZPIECZNE!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Offset początku na urządzeniu przechowującym"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Liczba sektorów zaszyfrowanych danych do pominięcia"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Utworzenie odwzorowania tylko do odczytu"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Bez pytań o potwierdzenie"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Limit czasu przy interaktywnym pytaniu o hasło (w sekundach)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "s"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Uaktualnianie wiersza postępu (w sekundach)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Jak często można powtarzać próby wprowadzenia hasła"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Wyrównanie danych do granicy <n> sektorów - dla luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Plik z kopią zapasową nagłówka LUKS i kluczy"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Użycie /dev/random do wygenerowania klucza wolumenu"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Użycie /dev/urandom do wygenerowania klucza wolumenu"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Współdzielenie urządzenia z innym, nie zachodzącym segmentem szyfrowanym"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID dla urządzenia, które ma być użyte"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Zezwolenie na żądania porzucenia (TRIM) dla urządzenia"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Urządzenie lub plik z osobnym nagłówkiem LUKS"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Sprawdzenie hasła bez uaktywniania urządzenia"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Użycie nagłówka ukrytego (ukrytego urządzenia TCRYPT)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Urządzenie jest napędem systemowym TCRYPT (z bootloaderem)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Użycie zapasowego (drugiego) nagłówka TCRYPT"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Wyszukiwanie także urządzeń zgodnych z VeraCryptem"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "PIM (osobisty mnożnik iteracji) dla urządzenia zgodnego z VeraCryptem"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Odpytanie PIM (osobistego mnożnika iteracji) pod kątem urządzenia zgodnego z VeraCryptem"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Typ metadanych urządzenia: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Wyłączenie sprawdzania jakości hasła (jeśli włączone)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Użycie opcji zgodności wydajności dm-crypta same_cpu_crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Użycie opcji zgodności wydajności dm-crypta submit_from_crypt_cpus"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Pominięcie kolejki zadań dm-crypt i przetwarzanie żądań odczytu synchronicznie"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Pominięcie kolejki zadań dm-crypt i przetwarzanie żądań zapisu synchronicznie"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Usunięcie urządzenia jest odroczone do czasu zamknięcia przez ostatniego użytkownika"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Użycie globalnej blokady do serializacji ciężkich pamięciowo PBKDF (obejście OOM)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Czas iteracji PBKDF dla LUKS (w milisekundach)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algorytm PBKDF (dla LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Limit kosztu pamięciowego PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobajty"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Koszt zrównoleglenia PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "wątki"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Koszt iteracji PBKDF (wymuszony, wyłącza test wydajności)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Priorytet klucza: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Wyłączenie blokowania metadanych na dysku"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Wyłączenie ładowania kluczy wolumenu przez pęk kluczy w jądrze"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algorytm integralności danych (tylko LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Wyłączenie kroniki dla urządzenia integralności"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Bez wymazania urządzenia po formatowaniu"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Użycie niewydajnego starego wyrównania (stare jądra)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Bez pytania o hasło, jeśli uaktywnienie przy użyciu tokenu się nie powiedzie"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Numer tokenu (domyślnie: dowolny)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Opis klucza"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Rozmiar sektora szyfrowania (domyślnie: 512 bajtów)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Użycie IV liczonego w rozmiarze sektora (nie w 512 bajtach)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Trwałe ustawienie flag uaktywniania dla urządzenia"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Ustawienie etykiety dla urządzenia LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Ustawienie etykiety podsystemu dla urządzenia LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Utworzenie niepowiązanego (bez przypisanego segmentu danych) klucza LUKS2"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Odczyt lub zapis danych JSON z/do pliku"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Rozmiar obszaru metadanych nagłówka LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Rozmiar obszaru kluczy nagłówka LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Odświeżenie (ponowne uaktywnienie) urządzenia z nowymi parametrami"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Klucz LUKS2: rozmiar klucza szyfrującego"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Klucz LUKS2: szyfr używany do szyfrowania kluczy"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Szyfrowanie urządzenia LUKS2 (w miejscu)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Odszyfrowanie urządzenia LUKS2 (usunięcie szyfrowania)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Zainicjowanie ponownego szyfrowania LUKS2 wyłącznie w metadanych."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Wyłącznie wznowienie zainicjowanego ponownego szyfrowania LUKS2."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Ograniczenie rozmiaru urządzenia danych (przesunięcie położenia danych). NIEBEZPIECZNE!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Maksymalny rozmiar strefy hotzone ponownego szyfrowania."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Typ odporności strefy hotzone ponownego szyfrowania (checksum, journal, none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Skrót sum kontrolknych strefy hotzone ponownego szyfrowania"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Nadpisanie wykrytego urządzenia dla urządzenia dm do ponownego szyfrowania"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPCJA...] <akcja> <parametry-akcji>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Brak argumentu <akcja>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Nieznana akcja."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Opcje --refresh i --test-passphrase wykluczają się wzajemnie."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Opcja --deferred jest dozwolona tylko dla operacji zamknięcia."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Opcja --shared jest dozwolona tylko dla operacji otwarcia zwykłego urządzenia."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Opcja --allow-discards jest dozwolona tylko dla operacji otwarcia."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Opcja --persistent jest dozwolona tylko dla operacji otwarcia."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Opcja --serialize-memory-hard-pbkdf jest dozwolona tylko dla operacji otwarcia."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Opcja --persistent nie jest dozwolona z --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2840,260 +2916,259 @@ msgstr ""
 "open i benchmark. Aby ograniczyć odczyt z pliku klucza, należy użyć\n"
 "--keyfile-size=(bajty)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Opcja --integrity jest dozwolona tylko dla operacji luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Opcja --integrity-no-wipe może być użyta tylko do akcji formatowania z rozszerzeniem integralności."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Opcje --label i --subsystem są dozwolone tylko dla operacji LUKS2 luksFormat i config."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Opcja --test-passphrase jest dozwolona tylko przy otwieraniu urządzeń LUKS, TRCYPT i BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Rozmiar klucza musi być wielokrotnością 8 bitów"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Numer klucza jest nieprawidłowy."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Opcja --key-file ma priorytet nad podanym argumentem pliku klucza."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Liczba ujemna nie jest dozwolona dla tej opcji."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Dozwolony jest tylko jeden argument --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Dozwolona jest tylko jedna z opcji --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Opcja --use-[u]random jest dozwolona tylko dla operacji luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Opcja --uuid jest dozwolona tylko dla operacji luksFormat i luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Opcja --align-payload jest dozwolona tylko dla operacji luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Opcje --luks2-metadata-size i --opt-luks2-keyslots-size są dozwolone tylko dla operacji luksFormat z LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Błędne określenie rozmiaru metadanych LUKS2."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Błędne określenie rozmiaru kluczy LUKS2."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Opcji --align-payload i --offset nie można łączyć."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Opcja --skip jest obsługiwana tylko przy otwieraniu urządzeń plain i loopaes."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Opcja --offset jest obsługiwana tylko przy otwieraniu urządzeń plain i loopaes oraz dla operacji luksFormat i ponownego szyfrowania."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Opcje --tcrypt-hidden, --tcrypt-system i --tcrypt-backup są obsługiwane tylko dla urządzeń TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Opcji --tcrypt-hidden nie można łączyć z --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Opcja --veracrypt jest obsługiwana tylko dla typu urządzeń TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Podano błędny argument dla parametru --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Opcja --veracrypt-pim jest obsługiwana tylko dla urządzeń zgodnych z VeraCryptem."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Opcja --veracrypt-query-pim jest obsługiwana tylko dla urządzeń zgodnych z VeraCryptem."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Opcje --veracrypt-pim i --veracrypt-query-pim wykluczają się wzajemnie."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Opcja --priority może mieć wartości tylko ignore/normal/prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Wymagane jest określenie klucza."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Funkcja pochodna klucza oparta na haśle (PBKDF) może być tylko pbkdf2 lub argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Wymuszonych iteracji PBKDF nie można łączyć z opcją czasu iteracji."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "Opcja rozmiaru sektora nie jest obsługiwana dla tego polecenia."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "Opcja dużych rozmiarów sektorów IV jest obsługiwana tylko przy otwieraniu urządzeń typu plain z sektorem większym niż 512 bajtów."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "Przy opcji --unbound wymagany jest rozmiar klucza."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Opcja --unbound może być użyta tylko z akcjami luksAddKey i luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Opcja --refresh może być użyta tylko dla akcji otwierania."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Nie można wyłączyć blokowania metadanych."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Błędne określenie maksymalnego rozmiaru strefy hotzone ponownego szyfrowania."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Błędne określenie rozmiaru urządzenia."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Maksymalna wartość ograniczenia rozmiaru urządzenia to 1GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Rozmiar ograniczenia musi być wielokrotnością 512-bajtowego sektora."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Błędne określenie rozmiaru danych."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Zmniejszenie przepełnienia rozmiaru."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "Odszyfrowanie LUKS2 wymaga opcji --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Rozmiar urządzenia musi być wielokrotnością 512-bajtowego sektora."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Opcji --reduce-device-size i --data-size nie można łączyć."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Opcji --device-size i --size nie można łączyć."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Opcji --ignore-corruption oraz --restart-on-corruption nie można użyć naraz."
+msgstr "Opcje --keyslot-cipher i --keyslot-key-size muszą być użyte łącznie."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Podano błędny łańcuch zarodka."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Nie można utworzyć obrazu hasza %s do zapisu."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Nie można utworzyć obrazu FEC %s do zapisu."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Podano błędny łańcuch głównego hasza."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Błędny plik podpisu %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Nie można odczytać pliku klucza %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<urządzenie_danych> <urządzenie_haszy>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "sformatowanie urządzenia"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<urządzenie_danych> <urządzenie_haszy> <główny_hasz>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "weryfikacja urządzenia"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<urządzenie_danych> <nazwa> <urządzenie_haszy> <główny_hasz>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "pokazanie stanu aktywnego urządzenia"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<urządzenie_haszy>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "wyświetlenie informacji z dysku"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3108,7 +3183,7 @@ msgstr ""
 "<urządzenie_haszy> to urządzenie zawierające dane weryfikacyjne\n"
 "<główny_hasz> to hasz głównego węzła na <urządzeniu_haszy>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3119,126 +3194,139 @@ msgstr ""
 "Domyślnie wkompilowane parametry dm-verity:\n"
 "\tHasz: %s, blok danych (bajtów): %u, blok haszy (bajtów): %u, rozmiar zarodka: %u, format haszy: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Nieużywanie superbloku VERITY"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Typ formatu (1 - normalny, 0 - oryginalny Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "liczba"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Rozmiar bloku na urządzeniu z danymi"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Rozmiar bloku na urządzeniu z haszami"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "bajty parzystości FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Liczba bloków w pliku danych"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "bloki"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Ścieżka do urządzenia z danymi korekcji błędów"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "ścieżka"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Offset początku na urządzeniu z haszami"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Offset początku na urządzeniu FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Algorytm skrótu"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "łańcuch"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Zarodek"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "Łańcuch szesnastkowy"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Ścieżka pliku podpisu hasza głównego"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Restart jądra po wykryciu uszkodzenia"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Panika jądra po wykryciu uszkodzenia"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Zignotowanie uszkodzenia, jedynie logowanie"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Bez weryfikacji wyzerowanych bloków"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Sprawdzenie bloku danych tylko przy pierwszym odczycie"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Opcje --ignore-corruption, --restart-on-corruption oraz --ignore-zero-blocks są dozwolone tylko przy operacji otwierania."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Opcja --root-hash-signature może być użyta tylko dla akcji otwierania."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Opcji --ignore-corruption oraz --restart-on-corruption nie można użyć naraz."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Opcji --panic-on-corruption oraz --restart-on-corruption nie można użyć naraz."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Błędny rozmiar klucza. Maksimum to %u bajtów."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Nie można odczytać pliku klucza %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Nie można odczytać %d bajtów z pliku klucza %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Sformatowano z rozmiarem znacznika %u, wewnętrzna integralność %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<urządzenie_integralności>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<urządzenie_integralności> <nazwa>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3249,403 +3337,409 @@ msgstr ""
 "<nazwa> to urządzenie do utworzenia pod %s\n"
 "<urządzenie_integralności> to urządzenie zawierające dane ze znacznikami integralności\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Domyślnie wkompilowane parametry dm-integrity:\n"
 "\tAlgorytm sumy kontrolnej: %s\n"
+"\tMaksymalny rozmiar pliku klucza: %dkB\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Ścieżka do urządzenia danych (jeśli osobne)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Rozmiar kroniki"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Sektory przeplotu"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Znak wodny kroniki"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "procent"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Czas zatwierdzania kroniki"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Liczba 512-bajtowych sektorów na bit (tryb bitmapy)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Czas zrzutu trybu bitmapy"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Rozmiar znacznika (na sektor)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Rozmiar sektora"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Rozmiar buforów"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algorytm integralności danych"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Rozmiar klucza integralności danych"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Odczyt klucza integralności z pliku"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algorytm integralności kroniki"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Rozmiar klucza integralności kroniki"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Odczyt klucza integralności z pliku"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algorytm szyfrowania kroniki"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Rozmiar klucza szyfrowania kroniki"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Odczyt klucza szyfrującego kroniki z pliku"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Tryb odtwarzania (bez kroniki, bez sprawdzania znaczników)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Użycie bitmapy do śledzenia zmian i wyłączenie kroniki dla urządzenia integralności"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Automatyczne przeliczenie znaczników początkowych."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Bez zabezpieczania superbloku przy użyciu HMAC (stare jądra)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Zezwolenie na przeliczanie wolumenów z kluczami HMAC (stare jądra)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Opcja --integrity-recalculate może być użyta tylko dla akcji otwierania."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Opcje --journal-size, --interleave-sectors, --sector-size, --tag-size oraz --no-wipe mogą być użyte tylko dla akcji formatowania."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Błędne określenie rozmiaru kroniki."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Muszą być podane obie opcje: pliku klucza i rozmiaru klucza."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Algorytm integralności musi być podany, jeśli używany jest klucz integralności."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Muszą być podane obie opcje: pliku klucza integralności i rozmiaru klucza."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Algorytm integralności kroniki musi być podany, jeśli używany jest klucz integralności kroniki."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Muszą być podane obie opcje: pliku szyfrowania kroniki i rozmiaru klucza."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Algorytm szyfrowania kroniki musi być podany, jeśli używany jest klucz szyfrowania kroniki."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Opcje trybu odtwarzania i bitmapy wykluczają się wzajemnie."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Opcji kroniki nie można używać w trybie bitmapy."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Opcje bitmapy mogą być używane tylko w trybie bitmapy."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Ponowne szyfrowanie już trwa."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Nie można otworzyć %s w trybie wyłącznym, urządzenie jest w użyciu."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Przydzielenie wyrównanego obszaru pamięci nie powiodło się."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Nie można odczytać urządzenia %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Oznaczanie urządzenia LUKS1 %s jako bezużytecznego."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Ustawianie flagi ponownego szyfrowania offline LUKS2 na urządzeniu %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Nie można zapisać na urządzenie %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Nie można zapisać pliku logu ponownego szyfrowania."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Nie można odczytać pliku logu ponownego szyfrowania."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Plik logu %s istnieje, wznowienie ponownego szyfrowania.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Uaktywnianie urządzenia tymczasowego przy użyciu starego nagłówka LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Uaktywnianie urządzenia tymczasowego przy użyciu nowego nagłówka LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Uaktywnianie urządzeń tymczasowych nie powiodła się."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Nie udało się ustawić offsetu danych."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Nie udało się ustawić rozmiaru metadanych."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Utworzono nowy nagłówek LUKS dla urządzenia %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Ta wersja cryptsetup-reencrypt nie obsługuje nowego typu tokenu wewnętrznego %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Nie udało się odczytać flag uaktywniania z nagłówka zapasowego."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Nie udało się zapisać flag uaktywniania w nowym nagłówku."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Nie udało się odczytać wymagań z nagłówka zapasowego."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Utworzono kopię zapasową nagłówka %s urządzenia %s."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Tworzenie kopii zapasowych nagłówków LUKS nie powiodło się."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Nie można odtworzyć nagłówka %s na urządzeniu %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Odtworzono nagłówek %s na urządzeniu %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Nie można otworzyć tymczasowego urządzenia LUKS."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Nie można pobrać rozmiaru urządzenia."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Błąd we/wy podczas ponownego szyfrowania."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Dostarczony UUID jest nieprawidłowy."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Nie można otworzyć pliku logu ponownego szyfrowania."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Nie w trakcie odszyfrowywania; dostarczony UUID może być użyty tylko do wznowienia wstrzymanego procesu odszyfrowywania."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Zmieniono parametry PBKDF dla klucza %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Rozmiar bloku ponownego szyfrowania"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Bez zmiany klucza i ponownego szyfrowania obszaru danych"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Odczyt nowego klucza wolumenu (klucza głównego) z pliku"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Czas iteracji PBKDF2 dla LUKS (w milisekundach)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Użycie bezpośredniego we/wy przy dostępie do urządzeń"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Użycie fsync po każdym bloku"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Uaktualnianie pliku logu po każdym bloku"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Użycie tylko tego slotu (wyłączenie pozostałych)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Utworzenie nowego nagłówka na nieszyfrowanym urządzeniu"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Trwałe odszyfrowanie urządzenia (usunięcie szyfrowania)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "UUID używany do wznowienia odszyfrowywania"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Typ metadanych LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPCJA...] <urządzenie>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Ponowne szyfrowanie zmieni: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "klucz wolumenu"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "hasz na "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", szyfr na"
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Wymagany argument."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Jako rozmiar bloku ponownego szyfrowania dozwolone są jedynie wartości od 1 MiB do 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Maksymalna wartość ograniczenia rozmiaru urządzenia to 64MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Opcja --new musi być użyta wraz z --reduce_device_size lub --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Opcja --keep-key może być użyta tylko z --hash, --iter-time lub --pbkdf-force-iterations.."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Opcja --new nie może być użyta wraz z --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Opcja --decrypt jest niezgodna z podanymi parametrami."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Opcja --uuid jest dozwolona tylko wraz z --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Błędny typ LUKS - musi być jednym z 'luks', 'luks1' lub 'luks2'."
 
@@ -3686,32 +3780,32 @@ msgstr "nieznany błąd"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Polecenie nie powiodło się z kodem %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Klucz numer %i utworzony."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Klucz numer %i odblokowany."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Klucz numer %i usunięty."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i utworzony."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i usunięty."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3719,55 +3813,55 @@ msgstr ""
 "\n"
 "Wymazywanie przerwane."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "UWAGA: urządzenie %s już zawiera sygnaturę partycji '%s'.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "UWAGA: urządzenie %s już zawiera sygnaturę superbloku '%s'.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Nie udało się zainicjować sond sygnatur urządzeń."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Nie udało się wykonać stat na urządzeniu %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Urządzenie %s jest w użyciu. Nie można kontynuować operacji formatowania."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Nie udało się otworzyć pliku %s do odczytu i zapisu."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Istniejąca sygnatura partycji '%s' (offset w bajtach: %<PRIi64>) na urządzeniu %s zostanie wymazana."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Istniejąca sygnatura superbloku '%s' (offset w bajtach: %<PRIi64>) na urządzeniu %s zostanie wymazana."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Nie udało się wymazać sygnatury urządzenia."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Nie udało się sprawdzić sygnatury urządzenia %s."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3775,7 +3869,7 @@ msgstr ""
 "\n"
 "Ponowne szyfrowanie przerwane."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Nie można sprawdzić jakości hasła: %s"
@@ -3794,46 +3888,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Sprawdzenie jakości hasła nie powiodło się: błędne hasło (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Błąd podczas odczytu hasła z terminala."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Weryfikacja hasła: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Hasła nie zgadzają się."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Nie można użyć offsetu, jeśli wejściem jest terminal."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Hasło: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Hasło dla %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Dla tego hasła nie ma dostępnego klucza."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Brak dostępnego miejsca na klucz."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Nie można otworzyć pliku klucza %s do zapisu."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Nie można zapisać pliku klucza %s."
@@ -3875,3 +3969,13 @@ msgstr ""
 #: src/utils_luks2.c:126
 msgid "Failed to write JSON file."
 msgstr "Nie udało się zapisać pliku JSON."
+
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Nie udało się wyłączyć flagi wymagania ponownego szyfrowania."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Wygląda na to, że urządzenie nie wymaga odtwarzania ponownego szyfrowania.\n"
+#~ "Czy mimo to kontynuować?"
index d2fc1c5..211e32f 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index 49739c7..981e27d 100644 (file)
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup 2.1.0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2019-01-28 07:58-0200\n"
 "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
@@ -30,63 +30,64 @@ msgstr ""
 "X-Generator: Virtaal 1.0.0-beta1\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Não foi possível inicializar o mapeador de dispositivo, executando como usuário não-root."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Não foi possível inicializar o mapeador de dispositivo. O módulo de kernel dm_mod está carregado?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Não há suporte ao sinalizador atrasado requisitado."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID para o dispositivo \"%s\" estava truncada."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 #, fuzzy
 msgid "Unknown dm target type."
 msgstr "Tipo %s de PBKDF desconhecido."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Não há suporte às opções de desempenho de dm-crypt requisitadas."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Não há suporte à tratamento de corrompimento de dados de dm-verify requisitada."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Não há suporte às opções FEC dm-verity requisitadas."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Não há suporte às opções de integridade de dados requisitadas."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Não há suporte à opção sector_size requisitada."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Não há suporte à recalculação automática de tags de integridade requisitada."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Não há suporte a descarte/TRIM."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Não há suporte às opções de integridade de dados requisitadas."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Falha ao consultar o segmento dm-%s."
@@ -128,7 +129,7 @@ msgstr "Não foi possível inicializar o backend RNG de criptografia."
 msgid "Cannot initialize crypto backend."
 msgstr "Não foi possível inicializar o backend de criptografia."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Não há suporte ao algoritmo hash %s."
@@ -142,7 +143,7 @@ msgstr "Erro de processamento de chave (usando hash %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Não foi possível determinar o tipo do dispositivo. Ativação de dispositivo incompatível?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Há suporte a esta operação apenas para dispositivo LUKS."
 
@@ -150,7 +151,7 @@ msgstr "Há suporte a esta operação apenas para dispositivo LUKS."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Há suporte a esta operação apenas para dispositivo LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Todos os slots de chave estão cheios."
 
@@ -164,7 +165,7 @@ msgstr "Slot de chave %d é inválido, por favor selecione entre 0 e %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Slot de chave %d está cheio, por favor selecione outro."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado."
@@ -174,7 +175,8 @@ msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requis
 msgid "Header detected but device %s is too small."
 msgstr "Cabeçalho detectado, mas o dispositivo %s é muito pequeno."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Não há suporte a esta operação para este tipo de dispositivo."
 
@@ -183,17 +185,13 @@ msgstr "Não há suporte a esta operação para este tipo de dispositivo."
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Recriptografia offline em progresso. Abortando."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Não há suporte ao LUKS versão %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Não há suporte ao dispositivo de metadados desanexado para este tipo de criptografia."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "O dispositivo \"%s\" não está ativado."
@@ -207,7 +205,7 @@ msgstr "O dispositivo subjacente para o dispositivo de criptografia %s desaparec
 msgid "Invalid plain crypt parameters."
 msgstr "Parâmetros de criptografia clara inválidos."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Tamanho de chave inválida."
 
@@ -215,12 +213,16 @@ msgstr "Tamanho de chave inválida."
 msgid "UUID is not supported for this crypt type."
 msgstr "Não há suporte ao UUID para este tipo de criptografia."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Não há suporte ao dispositivo de metadados desanexado para este tipo de criptografia."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Não há suporte ao tamanho de setor de criptografia."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado."
 
@@ -264,8 +266,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "O dispositivo %s é muito pequeno."
@@ -298,16 +300,16 @@ msgstr "Não foi possível formatar LOOPAES sem dispositivo."
 msgid "Can't format VERITY without device."
 msgstr "Não foi possível formatar VERITY sem dispositivo."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Não há suporte ao tipo de hash VERITY %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Não há suporte ao tamanho de bloco VERITY."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Não há suporte à posição de hash VERITY."
 
@@ -337,243 +339,243 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Tipo de dispositivo de criptografia requisitado %s desconhecido."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Não há suporte aos parâmetros no dispositivo %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Parâmetros incompatíveis no dispositivo %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Não foi possível redimensionar o dispositivo de loop."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Você realmente deseja alterar o UUID do dispositivo?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Arquivo de cópia de segurança de cabeçalho não contém um cabeçalho LUKS compatível."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "O volume %s não está ativado."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "O volume %s já está suspenso."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "A suspensão não oferece suporte ao dispositivo %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Ocorreu um erro ao suspender o dispositivo %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "O volume %s não estava suspenso."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "O resumo não oferece suporte a este dispositivo %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Ocorreu um erro ao resumir o dispositivo %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "O volume %s não estava suspenso."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "A chave de volume não corresponde ao volume."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Não foi possível adicionar slot de chave, todos slots desabilitados ou nenhuma chave de volume fornecida."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Falha ao trocar novo slot de chave."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "O slot de chave %d é inválido."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "O slot de chave %d não está ativo."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "O cabeçalho do dispositivo se sobrepõe à área de dados."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 #, fuzzy
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Recriptografia já está em progresso."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Falha ao obter trava de dispositivo de escrita."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Não há suporte ao tamanho de setor de criptografia."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 #, fuzzy
 msgid "Device type is not properly initialized."
 msgstr "O tipo de dispositivo não foi inicializado corretamente."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Não foi possível usar o dispositivo %s, o nome é inválido ou ainda está em uso."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "O dispositivo %s já existe."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Não foi possível usar o dispositivo %s, o nome é inválido ou ainda está em uso."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Chave de volume incorreta especificada para dispositivo claro."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Hash raiz incorreta especificada para o dispositivo verity."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 #, fuzzy
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Não há suporte a chaveiro de kernel neste kernel."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Falha ao carregar chave no chaveiro de kernel."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "O dispositivo %s ainda está em uso."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Dispositivo inválido %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Buffer de chave de volume muito pequena."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Não foi possível obter chave de volume para dispositivo claro."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Hash raiz incorreta especificada para o dispositivo verity."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Não há suporte a esta operação para o dispositivo de criptografia %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Não há suporte à operação de despejo para este tipo de dispositivo."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Não foi possível converter o dispositivo %s, o qual ainda está em uso."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Falha ao atribuir o slot de chave %u como a nova chave de volume."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 #, fuzzy
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Falha ao inicializar os parâmetros padrão de slot de chave LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Falha ao atribuir o slot de chave %d ao resumo."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Não há suporte a chaveiro de kernel neste kernel."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Falha ao ler senha do chaveiro (erro %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -601,8 +603,8 @@ msgstr "Falha ao obter estado do arquivo."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Não foi possível buscar a posição do arquivo de chave requisitado."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Memória insuficiente para leitura da senha."
 
@@ -622,51 +624,56 @@ msgstr "Tamanho máximo de arquivo de chave excedido."
 msgid "Cannot read requested amount of data."
 msgstr "Não foi possível ler a quantidade requisitada de dados."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "O dispositivo %s não existe ou acesso negado."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "O dispositivo %s não é compatível."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Dispositivo %s é muito pequeno. Necessita de pelo menos %<PRIu64> bytes."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Não foi possível usar o dispositivo %s, o qual está em uso (já mapeado ou montado)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Não foi possível usar o dispositivo %s, permissão negada."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Não foi possível obter informação sobre o dispositivo %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Não foi possível usar um dispositivo de loopback, executando como usuário não-root."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Anexação de dispositivo loopback falhou (dispositivo de loop com sinalizador autoclear é necessário)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "A posição requisitada está além do tamanho real do dispositivo %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "O dispositivo %s possui tamanho zero."
@@ -740,16 +747,16 @@ msgstr "Trava abortada. O caminho de trava %s/%s não é usável (faltando ou n
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "AVISO: Diretório de trava %s/%s está faltando!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr ""
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Trava abortada. O caminho de trava %s/%s não é usável (%s não é um diretório)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Não foi possível ir à posição do dispositivo."
 
@@ -776,8 +783,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "A especificação de cifra deve estar no formato [cifra]-[modo]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Não foi possível escrever para o dispositivo %s, permissão negada."
@@ -796,12 +803,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Erro de E/S ao criptografar slot de chave."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Não foi possível abrir o dispositivo %s."
@@ -822,44 +829,44 @@ msgstr "Dispositivo %s é muito pequeno. (LUKS1 precisa de pelo menos %<PRIu64>
 msgid "LUKS keyslot %u is invalid."
 msgstr "O slot de chave LUKS %u é inválido."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "O dispositivo %s não é um dispositivo LUKS válido."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "O arquivo de cópia de segurança de cabeçalho requisitado %s já existe."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Não foi possível criar o arquivo de cópia de segurança de cabeçalho %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Não foi possível escrever o arquivo de cópia de segurança de cabeçalho %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Arquivo de cópia de segurança não contém cabeçalho LUKS válido."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Não foi possível abrir o arquivo de cópia de segurança de cabeçalho %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Não foi possível ler o arquivo de cópia de segurança de cabeçalho %s."
@@ -881,7 +888,7 @@ msgstr "não contém cabeçalho LUKS. A substituição do cabeçalho pode destru
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "já contém cabeçalho LUKS. A substituição do cabeçalho vai destruir slots de chave existentes."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -893,101 +900,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Tamanho de chave fora do padrão, correção manual necessária."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Alinhamento de slots de chave fora do padrão, correção manual necessária."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Corrigindo slots de chave."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Slot de chave %i: posição corrigida (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Slot de chave %i: barras corrigidas (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Slot de chave %i: assinatura de partição é falsa."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Slot de chave %i: sal apagado."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Escrevendo cabeçalho LUKS para disco."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Correção falhou."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Não há suporte ao hash LUKS requisitado %s."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Nenhum problema conhecido foi detectado no cabeçalho LUKS."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Erro durante atualização de cabeçalho LUKS no dispositivo %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Erro ao reler cabeçalho LUKS após atualização no dispositivo %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "A posição de dados para cabeçalho LUKS deve ser 0 ou maior do que o tamanho do cabeçalho."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Formato de UUID LUKS incorreto foi fornecido."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Não foi possível criar cabeçalho LUKS: leitura de sal aleatório falhou."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Não foi possível criar cabeçalho LUKS: resumo de cabeçalho falhou (usando hash %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Slot de chave %d ativado, apagar primeiro."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "O material do slot de chave %d inclui muito poucas barras. Manipulação do cabeçalho?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Erro de processamento de chave (usando hash %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Slot de chave %d é inválido, por favor selecione um slot de chave entre 0 e %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Não foi possível apagar o dispositivo %s."
@@ -1024,11 +1031,11 @@ msgstr "Tamanho máximo de senha TCRYPT (%d) excedido."
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Algoritmo hash PBKDF2 %s não disponível, ignorando."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Interface necessário de criptografia do kernel não disponível."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Certifique-se de que você tenha o módulo de kernel algif_skcipher carregado."
 
@@ -1042,167 +1049,180 @@ msgstr "Não há suporte a ativação para o tamanho de setor %d."
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "O kernel não oferece suporte a ativação para este modo legado TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Ativando criptografia de sistema TCRYPT para partição %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 #, fuzzy
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "O kernel não oferece suporte a mapeamento compatível com TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Não há suporte a esta função sem carga de cabeçalho TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Não há suporte ao tamanho de setor de criptografia."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, fuzzy, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "Não há suporte ao tamanho de setor de criptografia."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, fuzzy, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Não há suporte a esta operação para o dispositivo de criptografia %s."
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Tamanho de chave inválida."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 #, fuzzy
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "A ativação de dispositivos temporários falhou."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Dispositivo verity %s não usa cabeçalho em disco."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "O dispositivo %s não é um dispositivo VERITY válido."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Não há suporte ao VERITY versão %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Cabeçalho VERITY corrompido."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Formato de UUID VERITY inválido fornecido no dispositivo %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Erro durante a atualização do cabeçalho verity no dispositivo %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "Não há suporte ao hash requisitado %s."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Os erros não puderam ser consertados com dispositivo FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Localizados %u erros corrigíveis com dispositivo FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "O kernel não oferece suporte a mapeamento dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "O kernel não oferece suporte a mapeamento dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "O dispositivo verity detectou corrompimento após ativação."
 
@@ -1211,41 +1231,37 @@ msgstr "O dispositivo verity detectou corrompimento após ativação."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Área disponível não está zerada na posição %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Excesso na posição do dispositivo."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Verificação falhou na posição %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Parâmetros de tamanho inválido para dispositivo verity."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Estouro de área de hash."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Verificação da área de dados falhou."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Verificação do hash raiz falhou."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Erro de entrada/saída enquanto criava área de hash."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Criação da área de hash falhou."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "AVISO: O kernel não pode ativar um dispositivo se o tamanho do bloco de dados exceder o tamanho da página (%u)."
@@ -1254,55 +1270,63 @@ msgstr "AVISO: O kernel não pode ativar um dispositivo se o tamanho do bloco de
 msgid "Failed to allocate RS context."
 msgstr "Falha ao alocar contexto de RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Falha ao alocar buffer."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Falha ao ler byte %2$d de bloco RS %1$<PRIu64>."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Falha ao ler paridade para o bloco RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Falha ao corrigir paridade para o bloco %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Falha ao escrever paridade para o bloco RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Tamanhos de bolcos devem corresponder para FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Número inválido de paridade de bytes."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Falha ao determinar o tamanho para dispositivo %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "O kernel não oferece suporte a mapeamento dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "O kernel não oferece suporte a mapeamento dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Falha ao obter trava de escrita no dispositivo %s."
@@ -1323,45 +1347,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "A posição dos dados requisitados é muito pequena."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "AVISO: área de slot de chaves  (%<PRIu64> bytes) é muito pequena, a contagem de slot de chaves LUKS2 disponível é muito limitada.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Falha ao obter trava de leitura no dispositivo %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Requisitos LUKS2 proibidos detectados na cópia de segurança %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Posição de dados diverge entre dispositivo e cópia de segurança, restauração falhou."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Cabeçalho binário com áreas de slot de chave diverge entre dispositivo e cópia de segurança, restauração falhou."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Dispositivo %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "não contém cabeçalho LUKS2. A substituição do cabeçalho pode destruir dados naquele dispositivo."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "já contém cabeçalho LUKS2. A substituição do cabeçalho vai destruir slots de chave existentes."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1372,7 +1396,7 @@ msgstr ""
 "dispositivo real! Substituir cabeçalho com cópia de segurança pode\n"
 "corromper os dados naquele dispositivo!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1382,60 +1406,60 @@ msgstr ""
 "AVISO: recriptografia offline não finalizada detectada no dispositivo!\n"
 "Substituir cabeçalho com cópia de segurança pode corromper os dados."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Sinalizador desconhecido %s ignorado."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Falha ao consultar o segmento dm-%s."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 #, fuzzy
 msgid "Failed to set dm-linear segment."
 msgstr "Falha ao consultar o segmento dm-%s."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Requisitos LUKS2 não atendidos detectados."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Slot de chave %i: sal apagado."
@@ -1467,7 +1491,7 @@ msgstr "Não foi possível mover área de slot de chave. Espaço insuficiente."
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Não foi possível mover área de slot de chave. Espaço insuficiente."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Não foi possível mover área de slot de chave."
 
@@ -1505,303 +1529,314 @@ msgstr "Não foi possível converter para o formato LUKS1 - o slot %u (acima do
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Não foi possível converter ao formato LUKS1 - o slot de chave %u não é compatível com LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Não há suporte aos parâmetros no dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Falha ao inicializar as sondas de assinatura de dispositivo."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Falha ao inicializar as sondas de assinatura de dispositivo."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Falha ao ler requisitos do cabeçalho de cópia de segurança."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Falha ao ler paridade para o bloco RS %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Falha ao remover o token %d.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, fuzzy, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Falha ao sondar o dispositivo %s por uma assinatura."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Falha ao determinar o tamanho para dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 #, fuzzy
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Falha ao obter trava de leitura no dispositivo %s."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Falha ao trocar novo slot de chave."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, fuzzy, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, fuzzy, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Tamanho do dispositivo %s não está alinhado com o tamanho de setor requisitado (%u bytes)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Não foi possível usar o dispositivo %s, o qual está em uso (já mapeado ou montado)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 #, fuzzy
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Falha ao alocar contexto de RS."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Falha ao obter o token %d para exportação."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "O dispositivo \"%s\" não está ativado."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 #, fuzzy
 msgid "Reencryption process is already running."
 msgstr "Recriptografia já está em progresso."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "Falha ao obter trava de dispositivo de escrita."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 #, fuzzy
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Tamanho do dispositivo não está alinhado com o tamanho de setor requisitado."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 #, fuzzy
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Recriptografia já está em progresso."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 #, fuzzy
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Falha ao inicializar os parâmetros padrão de slot de chave LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 #, fuzzy
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Falha ao sondar o dispositivo %s por uma assinatura."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Falha ao escrever sinalizadores de ativação para novo cabeçalho."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "Correção falhou."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Falha ao escrever paridade para o bloco RS %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "Falha ao definir a posição de dados."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Falha ao ler requisitos LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 #, fuzzy
 msgid "Failed to wipe backup segment data."
 msgstr "Falha ao apagar assinatura do dispositivo."
 
-#: lib/luks2/luks2_reencrypt.c:3174
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Falha ao remover o token %d.\n"
+
+#: lib/luks2/luks2_reencrypt.c:3398
 #, fuzzy
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Falha ao ler requisitos LUKS2."
+msgid "Failed to remove reencryption keyslot."
+msgstr "Falha ao remover o token %d.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Falha ao inicializar as sondas de assinatura de dispositivo."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "Falha ao alocar contexto de RS."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "O slot de chave %d é inválido."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Nenhum slot de token livre."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Falha ao criar um token incorporado %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Não é possível fazer verificação de senha em entradas diferente de tty."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Parâmetros de criptografia de slot de chaves só pode ser definido para dispositivo LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Nenhum padrão de especificação de cifra conhecida foi detectada."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "AVISO: O parâmetro de --hash está sendo ignorado claro com o arquivo de chave especificado.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "AVISO: A opção --keyfile-size está sendo ignorada, o tamanho lido é o mesmo que o tamanho da chave de criptografia.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Detectada assinatura(s) de dispositivo em %s. Prosseguir pode danificar dados existentes."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Operação abortada.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "A opção --key-file é necessária."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Insira o PIM VeraCrypt: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Valor de PIM inválido: erro de análise."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Valor de PIM inválido: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Valor de PIM inválido: fora do intervalo."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Nenhum cabeçalho de dispositivo detectado com esta senha."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "O dispositivo %s não é um dispositivo LUKS válido."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1811,87 +1846,97 @@ msgstr ""
 "que permite acesso a uma partição criptografada sem senha.\n"
 "Este despejo deve sempre ser armazenado criptografado em um local seguro."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "O dispositivo %s ainda está ativo e agendado para a remoção atrasada.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Redimensionamento de dispositivo ativo requer chave de volume no chaveiro, mas a opção --disable-keyring está definida."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Teste interrompido."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/A\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iterações por segundo para chave de %zu bits\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/D\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iterações, %5u memória, %1u threads paralelas (CPUs) para chave de %zu bits (requisitado tempo de %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "O resultado do teste não é confiável."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Testes são aproximados usando apenas memória (sem E/S de armazenamento).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algoritmo |     Chave |    Criptografia | Descriptografia\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "A cifra %s-%s (tamanho de chave %zd bits) não está disponível."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#     Algoritmo |     Chave |    Criptografia | Descriptografia\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/D"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Digite a senha para ser excluída: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Digite a senha para ser excluída: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Digite uma senha para slot de chave a ser convertido: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Realmente tentar corrigir o cabeçalho do dispositivo LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1899,104 +1944,108 @@ msgstr ""
 "Apando dispositivo para inicializar a verificação de soma de integridade.\n"
 "Você pode interromper isso pressionando CTRL+C (o resto dos dispositivo não apagado conterão verificação de soma inválida).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Não foi possível desativar o dispositivo temporário %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Não há suporte às opções de tamanho de metadados LUKS."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Não foi possível criar o arquivo de cabeçalho %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Nenhum padrão de especificação de integridade conhecida foi detectado."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Não foi possível usar %s como um cabeçalho em disco."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Isto vai sobrescrever dados em %s permanentemente."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Falha ao definir os parâmetros de pbkdf."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Posição de dados reduzida é permitido apenas cabeçalho LUKS desanexado."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Dispositivo ativado, mas não foi possível tornar os sinalizadores persistentes."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Slot de chave %d selecionado para exclusão."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Este é o último slot de chave. O dispositivo se tornará não usável após apagar esta chave."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Digite qualquer senha remanescente: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Operação abortada, o slot de chave NÃO foi apagado.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Digite a senha para ser excluída: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Digite uma senha para o slot de chave: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Digite qualquer senha existente: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Digite a senha para ser alterada: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Digite uma nova senha: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Digite uma senha para slot de chave a ser convertido: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Há suporte apenas a um argumento de dispositivo para a operação isLuks."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -2007,12 +2056,12 @@ msgstr ""
 "que permite acesso a uma partição criptografada sem senha.\n"
 "Este despejo deve sempre ser armazenado criptografado em um local seguro."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "O slot de chave %d não está ativo."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -2022,30 +2071,40 @@ msgstr ""
 "que permite acesso a uma partição criptografada sem senha.\n"
 "Este despejo deve sempre ser armazenado criptografado em um local seguro."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s não é um dispositivo cryptsetup gerenciado."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "A opção --header-backup-file é necessária."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s não é um dispositivo cryptsetup gerenciado."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "A renovação não oferece suporte a este tipo de dispositivo %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Tipo de dispositivo de metadados %s não reconhecido."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "O comando requer um dispositivo e nome mapeado como argumentos."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2054,95 +2113,95 @@ msgstr ""
 "Esta operação vai apagar todos os slots de chave no dispositivo %s.\n"
 "O dispositivo se tornará não usável após esta operação."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Operação abortada, os slots de chave NÃO foram apagados.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Tipo de LUKS inválido, há suporte apenas a luks1 e luks2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "O dispositivo já é do tipo %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Essa operação vai converter %s para o formato %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Operação abortada, o dispositivo NÃO foi convertido.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Está faltando a opção --priority, --label ou --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "O token %d é inválido."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "O token %d em uso."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Falha ao adicionar o token de chaveiro luks2 %d."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Falha ao atribuir o token %d ao slot de chave %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "O token %d não está em uso."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Falha ao abrir arquivo de chave."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Falha ao obter o token %d para exportação."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "O parâmetro --key-description é obrigatório para ação de adicionar token."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "A ação requer um token específico. Use o parâmetro --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Operação de token inválida %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "O dispositivo %s não é um dispositivo LUKS válido."
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2151,240 +2210,249 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Dispositivo inválido %s."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "O arquivo de cópia de segurança de cabeçalho requisitado %s já existe."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Não foi possível criar o arquivo de cabeçalho %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "Não altera chave, nenhuma área de dados de recriptografia"
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "O arquivo de chave pode ser usado apenas com --key-slot ou com exatamente um slot de chave ativado."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Digite uma senha para o slot de chave %u: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Digite uma senha para o slot de chave %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "O comando requer um dispositivo e nome mapeado como argumentos."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Não há suporte a recriptografia de dispositivo com perfil de integridade."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "Arquivo log %s existe, resumindo recriptografia.\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<dispositivo> [--type <tipo>] [<nome>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "abre dispositivo como <nome>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<nome>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "fecha dispositivo (remove mapeamento)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "redimensiona dispositivo ativado"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "mostra o estado do dispositivo"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <cifra>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "testa a cifra"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<dispositivo>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "tente corrigir os metadados em disco"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "adiciona uma chave ao dispositivo LUKS"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "apaga todos os slots de chave (remove a chave de criptografia)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "converte formato LUKS de/para LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "define opções de configuração permanentes para LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<dispositivo> [<novo arquivo de chave>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "formata um dispositivo LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "adiciona uma chave ao dispositivo LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<dispositivo> [<arquivo de chave >]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "remove a chave ou arquivo chave fornecidos do dispositivo LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "altera a chave ou arquivo chave fornecidos do dispositivo LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "converte uma chave aos novos parâmetros de pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<dispositivo> <slot de chave>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "apaga chave com número <slot de chave> do dispositivo LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "emite UUID do dispositivo LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "testa <dispositivo> por cabeçalho de partição LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "despeja informação da partição LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "despeja informação do dispositivo TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "despeja informação do dispositivo TCRYPT"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Suspende dispositivo LUKS e apaga chave (todas E/S ficam congeladas)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Resume dispositivo LUKS suspenso"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Faz uma cópia de segurança de slots de chave e cabeçalho de dispositivo LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Restaura slots de chave e cabeçalho de dispositivo LUKS"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <dispositivo>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Manipula tokens LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2392,7 +2460,7 @@ msgstr ""
 "\n"
 "<ação> é um entre:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2405,7 +2473,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2420,7 +2488,7 @@ msgstr ""
 "<slot de chave> é o número do slot de chave LUKS a ser modificado\n"
 "<arquivo de chave> arquivo de chave opcional para a nova chave para a ação luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2429,7 +2497,7 @@ msgstr ""
 "\n"
 "O formato padrão de metadados compilados é %s (para a ação luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2446,7 +2514,7 @@ msgstr ""
 "PBKDF padrão para LUKS2: %s\n"
 "\tTempo de iteração: %d: memória exigida: %dkB, Threads paralelas: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2461,459 +2529,467 @@ msgstr ""
 "\tplain: %s, Chave: %d bits, Hash de senha: %s\n"
 "\tLUKS: %s, Chave: %d bits, Hash de cabeçalho LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: keysize padrão com modo XTS (duas chaves internas) será duplicado.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: necessita %s como argumentos"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Mostra essa mensagem de ajuda"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Exibe instrução de uso"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Emite a versão do pacote"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Opções de ajuda:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Mostra mensagens de erro mais detalhadas"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Mostra mensagens de depuração"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Mostra mensagens de depuração incluindo metadados JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "A cifra usada para criptografar o disco (veja /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "A hash usada para criar a chave de criptografia a partir da senha"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifica a senha perguntando-a duas vezes"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Lê a chave de um arquivo"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Lê a chave do volume (mestre) a partir do arquivo."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Despeja a chave de volume (mestre) ao invés da informação de slots de chave"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "O tamanho da chave de criptografia"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITS"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Limita a leitura do arquivo de chave"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "bytes"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Número de bytes a ignorar no arquivo de chave"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Limita a leitura do arquivo de chave recém-adicionado"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Número de bytes a ignorar em arquivo de chave recém-adicionado"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Número de slot para a nova chave (padrão é a primeira livre)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "O tamanho do dispositivo"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SETORES"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Usa apenas o tamanho de dispositivo especificado (ignora o resto do dispositivo). PERIGOSO!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "A posição inicial do dispositivo de backend"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Quantos setores dos dados criptografados ignorar no começo"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Cria um mapeamento somente leitura"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Não solicitar confirmação"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Tempo limite para a solicitação interativa de senha (em segundos)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "s"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Atualização de linha de progresso (em segundos)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Com qual frequência a entrada da senha pode ser tentada novamente"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Alinha a carga em <n> limites de setores - para luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Arquivo cópia de segurança de slots de chave e cabeçalho LUKS"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Usa /dev/random para gerar chave de volume"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Usa /dev/urandom para gerar chave de volume"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Compartilha o dispositivo com um outro segmento de criptografia sem sobreposição"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID para dispositivo a ser usado"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Permite requisições de descartes (i.e. TRIM) para dispositivo"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Dispositivo ou arquivo com cabeçalho LUKS separado"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Não ativa o dispositivo, apenas verifica a senha"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Usa cabeçalho oculto (dispositivo TCRYPT oculto)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "O dispositivo é uma unidade TCRYPT de sistema (com carregador de inicialização)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Usa o cabeçalho TRCYPT secundário (cópia de segurança)"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Verifica também por dispositivo compatível com VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Multiplicador de Iteração Pessoal (PIM) por dispositivo compatível com VeraCrypt"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Consulta Multiplicador de Iteração Pessoal (PIM) por dispositivo compatível com VeraCrypt"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Tipo de metadados de dispositivo: luks, plain, loopaes, tcrypt"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Desabilita a verificação de qualidade da senha (se habilitada)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Usa a opção de compatibilidade de desempenho same_cpu_crypt do dm-crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Usa a opção de compatibilidade de desempenho submit_from_crypt_cpus do dm-crypt"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "A remoção de dispositivo está adiada até o último usuário fechá-lo"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Tempo de iteração PBKDF para LUKS (em ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
 # argon2i, argon2id, pbkdf2 são opções, não traduzir.
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Algoritmo PBKDF (para LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "limite de custo de memória de PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobytes"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Custo paralelo de PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "threads"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Custo de iterações de PBKDF (forçado, desabilita teste)"
 
 # ignore, normal e prefer são opções, não traduzir.
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Prioridade de slot de chave: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Desabilita travamento de metadados em disco"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Desabilita carregamento de chaves de volume via chaveiro do kernel"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algoritmo de integridade de dados (LUKS2 apenas)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Desabilita jornal para dispositivo de integridade"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Não apaga o dispositivo após formatar"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Não pede por senha se ativação por token falhar"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Número de token (padrão: qualquer)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Descrição da chave"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Tamanho do setor de criptografia (padrão: 512 bytes)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 #, fuzzy
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Tamanho do setor de criptografia (padrão: 512 bytes)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Define sinalizadores de ativação persistentes para o dispositivo"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Define o rótulo para o dispositivo LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Define o rótulo de subsistema para o dispositivo LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 #, fuzzy
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Cria slot de chave LUKS2 não associado (nenhum segmento de dados atribuído)"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Lê ou escreve o json de ou para um arquivo"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Tamanho de área de metadados de cabeçalho LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Tamanho de área de slots de chave de cabeçalho LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Renova (reativa) dispositivo com novos parâmetros"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Slot de chave LUKS2: O tamanho da chave de criptografia"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Slot de chave LUKS2: A cifra usada para criptografia de slot de chave"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Reduz tamanho do dispositivo de dados (move opção dos dados). PERIGOSO!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "Tamanho do bloco de recriptografia"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "Tamanho do bloco de recriptografia"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[OPÇÃO...] <ação> <ação-específica>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Faltando o argumento de <ação>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Ação desconhecida."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 #, fuzzy
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "As opções --refresh e --test-passphrase são mutuamente exclusivas.\n"
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "A opção --deferred é apenas permitida para o comando de fechamento.\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "A opção --shared é permitida apenas para abertura de dispositivo claro.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "A opção --allow-discards é permitida apenas para a operação de abertura.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "A opção --persistent é permitida apenas para a operação de abertura.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "A opção --allow-discards é permitida apenas para a operação de abertura.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 #, fuzzy
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "A opção --persistent não é permitida com --test-passphrase.\n"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -2923,292 +2999,292 @@ msgstr ""
 "ações de abertura e teste. Para limitar a leitura do arquivo de chave,\n"
 "use --keyfile-size=(bytes)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "A opção --integrity é permitida apenas para luksFormat (LUKS2).\n"
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 #, fuzzy
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "A opção --integrity-no-wipe só pode ser usada para ação de formato com extensão de integridade.\n"
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "As opções --label e --subsystem são permitidas apenas para luksFormat e operações de configuração de LUKS2.\n"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "A opção --test-passphrase é permitida apenas para abertura de dispositivos LUKS e TCRYPT.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Tamanho de chave deve ser um múltiplo de 8 bits"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "O slot de chave é inválido."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "A opção --key-file tem precedência sobre um argumento de arquivo de chave especificado."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Número negativo para opção não permitido."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Apenas um argumento de --key-file é permitido."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Apenas uma das opções --use-[u]random são permitidas."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "A opção --use-[u]random é permitida apenas para luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "A opção --uuid é permitida apenas para luksFormat e luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "A opção --align-payload é permitida apenas para luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "As opçãos --luks2-metadata-size e --opt-luks2-keyslots-size são permitidas apenas para luksFormat com LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Especificação inválida de tamanho de metadados LUKS2."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Especificação inválida de tamanho de slots de chave LUKS2."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "As opções --align-payload e --offset não podem ser combinadas."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Há suporte a --skip apenas para abertura de dispositivos claro e loopaes.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Há suporte a --offset apenas para abertura de dispositivos claro e loopaes. e para luksFormat.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Há suporte à opção --tcrypt-hidden, --tcrypt-system ou --tcrypt-backup apenas para dispositivo TCRYPT.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "A opção --tcrypt-hidden não pode ser combinada com --allow-discards.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Há suporte à opção --veracrypt apenas para o tipo de dispositivo TCRYPT.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 #, fuzzy
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Argumento inválido para o parâmetro --veracrypt-pim fornecido.\n"
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Há suporte à opção --veracrypt-pim apenas para dispositivos compatíveis com VeraCrypt.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Há suporte à opção --veracrypt-query-pim apenas para dispositivos compatíveis com VeraCrypt.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 #, fuzzy
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "As opções --veracrypt-pim e --veracrypt-query-pim são mutuamente exclusivas.\n"
 
 # ignore, normal, prefer são opções, não traduzir.
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 #, fuzzy
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "A opção --priority só pode ser ignore/normal/prefer.\n"
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 #, fuzzy
 msgid "Keyslot specification is required."
 msgstr "A especificação de slot de chave é exigido.\n"
 
 # argon2i, argon2id, pbkdf2 são opções, não traduzir.
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 #, fuzzy
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "A função de derivação de chave baseada em senha (PBKDF) só pode ser pbkdf2 ou argon2i/argon2id.\n"
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 #, fuzzy
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Iterações forçadas de PBKDF não podem ser compiladas com opção de tempo de iteração.\n"
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Não há suporte a opção de tamanho de setor para este comando.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 #, fuzzy
 msgid "Key size is required with --unbound option."
 msgstr "Tamanho de chave é necessário com a opção --unbound.\n"
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 #, fuzzy
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "A opção --unbound só pode ser usada com a ação luksAddKey.\n"
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "A opção --refresh só pode ser usada com a ação de abrir.\n"
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 #, fuzzy
 msgid "Cannot disable metadata locking."
 msgstr "Não foi possível desabilitar trava de metadados.\n"
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Especificação inválida de tamanho de dispositivo."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Especificação inválida de tamanho de dispositivo."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Tamanho máximo de redução do dispositivo é 64 MB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Tamanho da redução deve ser múltiplo de 512 bytes (setores)."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "Especificação inválida de tamanho de dispositivo."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "Excesso na posição do dispositivo."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Tamanho da redução deve ser múltiplo de 512 bytes (setores)."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 #, fuzzy
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "As opções --align-payload e --offset não podem ser combinadas."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 #, fuzzy
 msgid "Options --device-size and --size cannot be combined."
 msgstr "As opções --align-payload e --offset não podem ser combinadas."
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 #, fuzzy
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr "As opções --ignore-corruption e --restart-on-corruption não podem ser usadas em conjunto.\n"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Uma string salgada inválida foi especificada."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Não foi possível criar imagem hash %s para escrita."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Não foi possível criar imagem FEC %s para escrita."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Uma string hash raiz inválida foi especificada."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Dispositivo inválido %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Não foi possível ler o arquivo de chave %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<dispositivo-dados> <dispositivo-hash>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "formata o dispositivo"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<dispositivo-dados> <dispositivo-hash> <hash-raiz>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "verifica o dispositivo"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<dispositivo-dados> <nome> <dispositivo-hash> <hash-raiz>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "mostra o estado do dispositivo ativado"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<dispositivo-hash>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "mostra informação em disco"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3223,7 +3299,7 @@ msgstr ""
 "<dispositivo-hash> é o dispositivo contendo dados de verificação\n"
 "<hash-raiz> hash do nó raiz no <dispositivo-hash>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3234,130 +3310,145 @@ msgstr ""
 "Parâmetros dm-verity pré-compilados por padrão:\n"
 "\tHash: %s, Bloco de dados (bytes): %u, Bloco de hash (bytes): %u, Tamanho salgado: %u, Formato hash: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Não usa superbloco verity"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Tipo de formato (1 - normal, 0 - Chrome OS original)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "número"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Tamanho de bloco no dispositivo de dados"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Tamanho de bloco no dispositivo de hash"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Bytes de paridade FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "O número de blocos no arquivo de dados"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "blocos"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Caminho para dispositivo com dados de correção de erro"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "caminho"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Posição inicial no dispositivo de hash"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Posição inicial no dispositivo FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Algoritmo hash"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "string"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Sal"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "string hexa"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "Criação da área de hash falhou."
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Reinicia o kernel, se um corrompimento for detectado"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+#, fuzzy
+msgid "Panic kernel if corruption is detected"
+msgstr "Reinicia o kernel, se um corrompimento for detectado"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignora corrompimento, apenas registra no log"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Não verifica por blocos zerados"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Verifica bloco de dados apenas na primeira vez que é lido"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "O uso da opção --ignore-corruption, --restart-on-corruption ou --ignore-zero-blocks é permitido apenas para operação de abertura.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "A opção --integrity-recalculate só pode ser usada para ação de abrir."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "As opções --ignore-corruption e --restart-on-corruption não podem ser usadas em conjunto.\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "As opções --ignore-corruption e --restart-on-corruption não podem ser usadas em conjunto.\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Tamanho de chave inválida."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Não foi possível ler o arquivo de chave %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Não foi possível ler %d bytes do arquivo de chave %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formatado com tamanho de tag %u, integridade interna %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<dispositivo_integridade>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<dispositivo_integridade> <nome>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3368,409 +3459,414 @@ msgstr ""
 "<nome> é o dispositivo a ser criado sob %s\n"
 "<dispositivo_integridade> é o dispositivo com dados com tags de integridade\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Parâmetros dm-integrity compilados por padrão:\n"
 "\tTamanho Tag: %u bytes, Algoritmo de soma de verificação: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Caminho para dispositivo de dados (se separado)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Tamanho do journal"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Intercalar setores"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Marca d'água do jornal"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "porcentagem"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Tempo de commit do journal"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Tamanho de tag (por setor)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Tamanho do setor"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Tamanho de buffers"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Algoritmo de integridade de dados"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "O tamanho da chave de integridade de dados"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Lê a chave de integridade de um arquivo"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Algoritmo de integridade de journal"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "O tamanho da chave de integridade de journal"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Lê a chave de integridade de journal de um arquivo"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Algoritmo de criptografia de journal"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "O tamanho da chave de criptografia de journal"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Lê a chave de criptografia de journal de um arquivo"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Modo de recuperação (sem journal, sem verificação de tag)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 #, fuzzy
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Desabilita jornal para dispositivo de integridade"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Recalcula tags iniciais automaticamente."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "A opção --integrity-recalculate só pode ser usada para ação de abrir."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 #, fuzzy
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "As opções --journal-size, --interleave-sectors, --sector-size, --tag-size e --no-wipe só podem ser usadas para ação de formatação.\n"
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Especificação inválida de tamanho de journal."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "As opções de arquivo de chave e tamanho de chave devem ser especificadas."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Um algoritmo de integridade deve ser especificado se uma chave de integridade é usada."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "As opções de arquivo de chave de integridade de journal e tamanho de chave devem ser especificadas."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Um algoritmo de integridade de journal deve ser especificado se uma chave de integridade de journal é usada."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "As opções de arquivo de chave de criptografia de journal e tamanho de chave devem ser especificadas."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Um algoritmo de criptografia de journal deve ser especificado se uma chave de criptografia de journal é usada."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 #, fuzzy
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "As opções --refresh e --test-passphrase são mutuamente exclusivas.\n"
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 #, fuzzy
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "A opção de integridade pode ser usada apenas para o formato LUKS2."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Recriptografia já está em progresso."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Não foi possível abrir exclusivamente %s, dispositivo em uso."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "A alocação de memória alinhada falhou."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Não foi possível ler o dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Marcando o dispositivo LUKS1 %s como não usável."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Definindo o sinalizador de recriptografia offline do LUKS2 no dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Não foi possível escrever o dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Não foi possível escrever o arquivo log de recriptografia."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Não foi possível abrir o arquivo log de recriptografia."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Arquivo log %s existe, resumindo recriptografia.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Ativando dispositivo temporário usando antigo cabeçalho LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Ativando dispositivo temporário usando novo cabeçalho LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "A ativação de dispositivos temporários falhou."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Falha ao definir a posição de dados."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "Falha ao definir a posição de dados."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Novo cabeçalho LUKS para dispositivo %s criado."
 
 # "cryptsetup-reencrypt" é o nome do programa, não traduzir.
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Essa versão de cryptsetup-reencrypt não sabe lidar com o novo tipo de token interno %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Falha ao ler sinalizadores de ativação do cabeçalho de cópia de segurança."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Falha ao escrever sinalizadores de ativação para novo cabeçalho."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Falha ao ler requisitos do cabeçalho de cópia de segurança."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Cópia de segurança de cabeçalho %s para dispositivo %s criado."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "A criação de cópia de segurança de cabeçalhos LUKS falhou."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Não foi possível restaurar o cabeçalho %s no dispositivo %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Cabeçalho %s no dispositivo %s restaurado."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Não foi possível abrir o dispositivo LUKS temporário."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Não foi possível obter o tamanho do dispositivo."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Erro de E/S durante a recriptografia."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "O UUID fornecido é inválido."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Não foi possível abrir o arquivo log de recriptografia."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Nenhuma descriptografia em progresso, UUID fornecido pode ser usado apenas para resumir um processo de descriptografia suspendido."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Alterados os parâmetros de pbkdf no slot de chave %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Tamanho do bloco de recriptografia"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Não altera chave, nenhuma área de dados de recriptografia"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Lê nova chave do volume (mestre) a partir do arquivo"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Tempo de iteração PBKDF2 para LUKS (em ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Usa direct-io ao acessar dispositivos"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Usa fsync após cada bloco"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Atualiza o arquivo log após todo bloco"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Usa apenas este slot (outros serão desabilitados)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Cria um novo cabeçalho em dispositivo não criptografado"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Descriptografa permanentemente o dispositivo (remove criptografia)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "A UUID usada para resumir a descriptografia"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Tipo de metadados LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[OPÇÃO...] <dispositivo>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Recriptografia vai alterar: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "chave de volume"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "definir hash para "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", definir cifra para "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Argumento necessário."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Apenas valores entre 1 MB e 64 MB são permitidos para tamanho de bloco de recriptografia."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Tamanho máximo de redução do dispositivo é 64 MB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "A opção --new deve ser usada junto de --reduce-device-size ou --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "A opção --keep-key pode ser usada apenas com --hash, --iter-time ou --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "A opção --new não pode ser usada junto de --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "A opção --decrypt é incompatível com os parâmetros especificados."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "A opção --uuid é permitida apenas junto de --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Tipo de luks inválido. Use um desses: \"luks\", \"luks1\" ou \"luks2\"."
 
@@ -3811,32 +3907,32 @@ msgstr "erro desconhecido"
 msgid "Command failed with code %i (%s).\n"
 msgstr "O comando falhou com código %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Slot de chave %i criado."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Slot de chave %i desbloqueado."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Slot de chave %i removido."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i criado."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i removido."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 #, fuzzy
 msgid ""
 "\n"
@@ -3845,55 +3941,55 @@ msgstr ""
 "\n"
 "Escrita interrompida."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "AVISO: O dispositivo %s já contém uma assinatura de partição \"%s\".\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "AVISO: O dispositivo %s já contém uma assinatura de superbloco \"%s\".\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Falha ao inicializar as sondas de assinatura de dispositivo."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Falha ao obter estado do dispositivo %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "O dispositivo %s está em uso. Não é possível proceder com a operação de formatação."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Falha ao abrir o arquivo %s no modo leitura/escrita."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Falha ao apagar assinatura do dispositivo."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Falha ao sondar o dispositivo %s por uma assinatura."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
@@ -3902,7 +3998,7 @@ msgstr ""
 "\n"
 "Leitura interrompida."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Não foi possível verificar qualidade da senha: %s"
@@ -3921,46 +4017,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Verificação de qualidade da senha falhou: Senha incorreta (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Erro ao ler senha do terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Verificar senha: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "As senhas não conferem."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Não foi possível usar posição com a entrada do terminal."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Digite a senha: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Digite a senha para %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Nenhuma chave disponível com esta senha."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Não foi possível abrir o arquivo de chave %s para escrita."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Não foi possível escrever no arquivo de chave %s."
@@ -4006,18 +4102,29 @@ msgstr "Falha ao escrever arquivo JSON."
 #~ msgid "Requested dmcrypt performance options are not supported."
 #~ msgstr "Não há suporte às opções de desempenho de dmcrypt requisitadas."
 
+#, c-format
 #~ msgid "Cannot format device %s which is still in use."
 #~ msgstr "Não foi possível formatar o dispositivo %s, o qual ainda está em uso."
 
+#, c-format
 #~ msgid "Key slot %d is not used."
 #~ msgstr "O slot de chave %d não está sendo usado."
 
 #~ msgid "Function not available in FIPS mode."
 #~ msgstr "Função não disponível no modo FIPS."
 
+#, c-format
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "AVISO: Diretório de trava %s/%s está faltando!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Parâmetros de tamanho inválido para dispositivo verity."
+
+#, c-format
 #~ msgid "Cipher %s is not available."
 #~ msgstr "A cifra %s não está disponível."
 
+#, c-format
 #~ msgid "Key slot %d selected for deletion."
 #~ msgstr "Slot de chave %d selecionado para exclusão."
 
@@ -4033,6 +4140,9 @@ msgstr "Falha ao escrever arquivo JSON."
 #~ msgid "close device (deactivate and remove mapping)"
 #~ msgstr "fecha dispositivo (desativa e remove mapeamento)"
 
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Um algoritmo de integridade deve ser especificado se uma chave de integridade é usada."
+
 #~ msgid "Failed to set PBKDF parameters."
 #~ msgstr "Falha ao definir os parâmetros de sessão PBKDF."
 
index 44a34d6..2efd0fb 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index 8b6a4b6..355fa16 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -4,13 +4,13 @@
 #
 # Rosetta Contributors and Canonical Ltd <EMAIL@ADDRESS>, 2007.
 # Eugene Roskin <Unknown>, 2016.
-# Yuri Kozlov <yuray@komyakino.ru>, 2018, 2019, 2020.
+# Yuri Kozlov <yuray@komyakino.ru>, 2018, 2019, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-21 07:25+0300\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-23 22:35+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
@@ -19,64 +19,65 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Launchpad-Export-Date: 2018-12-03 15:52+0000\n"
-"X-Generator: Lokalize 2.0\n"
+"X-Generator: Lokalize 20.12.0\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Не удалось инициализировать device-mapper, выполняется без прав суперпользователя."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Не удалось инициализировать device-mapper. Загружен ли модуль ядра dm_mod?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Запрошенный флаг отсрочки не поддерживается."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "У устройства %s был обрезан DM-UUID."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Неизвестный тип цели dm."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Запрошенные параметры производительности dm-crypt не поддерживаются."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Запрошенные параметры обработки повреждённых данных dm-verify не поддерживаются."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Запрошенные параметры FEC dm-verify не поддерживаются."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Запрошенные параметры целостности данных не поддерживаются."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Запрошенный параметр sector_size не поддерживается."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Запрошенный автоматический пересчёт тегов целостности не поддерживается."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM не поддерживается."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Запрошенный режим битовой карты dm-integrity не поддерживается."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Ошибка при запросе сегмента dm-%s."
@@ -118,7 +119,7 @@ msgstr "Невозможно инициализировать внутренни
 msgid "Cannot initialize crypto backend."
 msgstr "Невозможно инициализировать внутренний интерфейс crypto."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Алгоритм хэширования %s не поддерживается."
@@ -132,7 +133,7 @@ msgstr "Ошибка обработки ключа (используется х
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Невозможно определить тип устройства. Несовместимая активация устройства?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Эта операция поддерживается только для устройства LUKS."
 
@@ -140,7 +141,7 @@ msgstr "Эта операция поддерживается только для
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Эта операция поддерживается только для устройства LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Заполнены все слоты ключей."
 
@@ -154,7 +155,7 @@ msgstr "Некорректный слот ключа %d, укажите знач
 msgid "Key slot %d is full, please select another one."
 msgstr "Слот ключа %d заполнен, выберите другой."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Размер устройства не выровнен к размеру логического блока устройства."
 
@@ -163,7 +164,8 @@ msgstr "Размер устройства не выровнен к размер
 msgid "Header detected but device %s is too small."
 msgstr "Обнаружен заголовок, но устройство %s слишком маленькое."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Эта операция не поддерживается для этого типа устройств."
 
@@ -171,17 +173,13 @@ msgstr "Эта операция не поддерживается для это
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Недопустимая операция во время работы перешифрования."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Неподдерживаемая версия LUKS %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Отсоединение устройства метаданных не поддерживается для этого типа crypt."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Устройство %s не активно."
@@ -195,7 +193,7 @@ msgstr "Исчезло нижележащее устройство у устро
 msgid "Invalid plain crypt parameters."
 msgstr "Неверные параметры plain crypt."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Неверный размер ключа."
 
@@ -203,12 +201,16 @@ msgstr "Неверный размер ключа."
 msgid "UUID is not supported for this crypt type."
 msgstr "Для данного типа crypt UUID не поддерживается."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Устройство с отсоединёнными метаданными не поддерживается для этого типа crypt."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Неподдерживаемый размер сектора шифрования."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Размер устройства не выровнен к запрошенному размеру сектора."
 
@@ -252,8 +254,8 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ: размер метаданных LUKS2 и
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: размер слотов ключа LUKS2 изменился и стал %<PRIu64> байт.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Устройство %s слишком маленькое."
@@ -286,16 +288,16 @@ msgstr "Невозможно отформатировать LOOPAES без ус
 msgid "Can't format VERITY without device."
 msgstr "Невозможно отформатировать VERITY без устройства."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Неподдерживаемый тип хэша %d для VERITY."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Неподдерживаемый размер блока для VERITY."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Неподдерживаемое смещение хэша для VERITY."
 
@@ -325,236 +327,236 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ: запрошенный размер тег
 msgid "Unknown crypt device type %s requested."
 msgstr "Запрошен неизвестный тип устройства crypt %s."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Неподдерживаемые параметры для устройства %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Несовпадение параметров для устройства %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Несоответствие устройств crypt."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Ошибка при перезагрузке устройства %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Ошибка при приостановке устройства %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Ошибка при возобновлении работы устройства %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Критическая ошибка при перезагрузке устройства %s (поверх устройства %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Ошибка при переключении устройства %s на dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Невозможно изменить размер закольцованного (loop) устройства."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Вы действительно хотите изменить UUID устройства?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Файл резервного заголовка не содержит заголовка совместимого с LUKS."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Том %s не активен."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Том %s уже приостановлен."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Приостановка не поддерживается устройством %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Ошибка во время приостановки устройства %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Том %s не приостановлен."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Возобновление не поддерживается устройством %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Ошибка во время возобновления устройства %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Том %s не приостановлен."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Ключ тома не подходит к тому."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Невозможно добавить слот ключа, все слоты отключены и не предоставлен ключ тома."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Ошибка при переключении на новый слот ключа."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Некорректный слот ключа %d."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Слот ключа %d не активен."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Заголовок устройства перекрывает область данных."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Выполняется перешифрование. Невозможно активировать устройство."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Ошибка при получении блокировки перешифрования."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Ошибка восстановления перешифрования LUKS2."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Тип устройства инициализирован неправильно."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Невозможно использовать устройство %s, некорректное имя или оно всё ещё используется."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Устройство %s уже существует."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Невозможно использовать устройство %s, некорректное имя или оно всё ещё используется."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Для устройства plain указан некорректный ключ тома."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Некорректный корневой хэш для указанного устройства verity."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Требуется подпись корневого хэша."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Отсутствует связка ключей ядра: требуется для передачи подписи в ядро."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Ошибка при загрузке ключа в связку ключей ядра."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Устройство %s всё ещё используется."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Неверное устройство %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Буфер ключа тома слишком мал."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Невозможно получить ключ тома для устройства plain."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Невозможно получить корневой хэш для устройства verity."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Эта операция не поддерживается для устройства crypt %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Операция дампа не поддерживается для устройства этого типа."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Смещение данных не кратно %u байтам."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Невозможно преобразовать устройство %s, которое всё ещё используется."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Ошибка при назначении слота ключа %u в качестве нового ключа тома."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Ошибка при инициализации параметров слота ключа по умолчанию LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Ошибка при назначении слота ключа %d дайджесту."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Связка ключей ядра не поддерживается ядром."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Не удалось прочитать парольную фразу из связки ключей (ошибка %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Не удалось захватить глобальную блокировку сериализации доступа на скорости памяти (memory-hard)."
 
@@ -582,8 +584,8 @@ msgstr "Не удалось выполнить stat для файла ключа
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Невозможно переместиться по запрошенному смещению в файле ключа."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Не хватило памяти при чтении парольной фразы."
 
@@ -603,51 +605,56 @@ msgstr "Превышен максимальный размер файла клю
 msgid "Cannot read requested amount of data."
 msgstr "невозможно прочитать запрошенное количество данных."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Устройство %s не существует или отказано в доступе."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Устройство %s несовместимо."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Игнорируется фиктивный размер optimal-io для устройства данных (%u байт)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Устройство %s слишком маленькое. Требуется не менее %<PRIu64> байт."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Невозможно использовать устройство %s, которое используется (отображено или примонтировано)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Невозможно использовать устройство %s, недостаточно прав."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Невозможно получить информацию об устройстве %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Невозможно использовать закольцованное устройство, выполняется без прав суперпользователя."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Ошибка при присоединении закольцованного устройства (требуется закольцованное устройство с флагом autoclear)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Запрошенный размер вне реального размера устройства %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Устройство %s имеет нулевой размер."
@@ -721,16 +728,16 @@ msgstr "Блокировка прервана. Путь блокировки %s/
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\96Ð\94Ð\95Ð\9dÐ\98Ð\95: Ð\9aаÑ\82алог Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки %s/%s Ð¾Ñ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Ð\91Ñ\83деÑ\82 Ñ\81оздан Ð±Ð»Ð¾ÐºÐ¸Ñ\80Ñ\83Ñ\8eÑ\89ий ÐºÐ°Ñ\82алог %s/%s Ñ\81 Ð¿Ñ\80авами Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e, Ð·Ð°Ð´Ð°Ð½Ð½Ñ\8bми Ð¿Ñ\80и Ñ\81боÑ\80ке Ð¿Ñ\80огÑ\80аммÑ\8b."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Блокировка прервана. Путь блокировки %s/%s использовать невозможно (%s не является каталогом)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Невозможно перемещаться по устройству."
 
@@ -757,8 +764,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Шифр должен указываться в формате [шифр]-[режим]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Невозможно записать на устройство %s, недостаточно прав."
@@ -777,12 +784,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Ошибка ввода-вывода при шифровании слота ключа."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Невозможно открыть устройство %s."
@@ -803,43 +810,43 @@ msgstr "Устройство %s слишком маленькое (для LUKS1
 msgid "LUKS keyslot %u is invalid."
 msgstr "Некорректный слот ключа LUKS %u."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Устройство %s не является корректным устройством LUKS."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Запрошенный файл резервного заголовка %s уже существует."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Невозможно создать файл резервного заголовка %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Невозможно записать файл резервного заголовка %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Резервный файл не содержит корректный заголовок LUKS."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Невозможно открыть файл резервного заголовка %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Невозможно прочитать файл резервного заголовка %s."
@@ -861,7 +868,7 @@ msgstr "не содержит заголовка LUKS. Замена заголо
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "уже содержит заголовок LUKS. Замена заголовка уничтожит существующие слоты ключей."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -873,101 +880,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Нестандартный размер ключа, требуется исправление вручную."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Нестандартное выравнивание слотов ключей, требуется исправление вручную."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Исправление слотов ключей."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Слот ключа %i: исправлено смещение (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Слот ключа %i: исправлены полосы (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Слот ключа %i: фиктивная подпись раздела."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Слот ключа %i: соль затёрта."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Запись заголовка LUKS на диск."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Ошибка при исправлении."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Запрошенный хэш LUKS %s не поддерживается."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Известных неполадок в заголовке LUKS не обнаружено."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Ошибка при обновлении заголовка LUKS на устройстве %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Ошибка при повторном считывании заголовка LUKS после обновления на устройстве %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Смещение данных заголовка LUKS должно быть равно 0 или быть больше размера заголовка."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Указан неправильный формат LUKS UUID."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Невозможно создать заголовок LUKS: ошибка при чтении случайной соли."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Невозможно создать заголовок LUKS: ошибка подсчёта дайджеста заголовка (используйте хэш %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Активен слот ключа %d, сначала нужна вычистка."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Данный слота ключа %d содержат несколько полос. Подделка заголовка?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Невозможно открыть слот ключа (используется хэш %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Некорректный слот ключа %d, значение слота ключа должно быть между 0 и %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Невозможно затереть устройство %s."
@@ -1003,11 +1010,11 @@ msgstr "Превышена максимальная длина парольно
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Алгоритм хэширования PBKDF2 %s недоступен, пропускается."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Требуемый интерфейс ядра crypto недоступен."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Убедитесь, что загружен ядерный модуль algif_skcipher."
 
@@ -1020,159 +1027,173 @@ msgstr "Активация не поддерживается при размер
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Ядро не поддерживает активацию для данного устаревшего режима TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Активируется система шифрования TCRYPT для раздела %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Ядро не поддерживает совместимое отображение TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "эта функция не поддерживается без загрузки заголовка TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "При анализе поддерживаемого главного ключа тома обнаружен неожиданный тип элемента метаданных «%u»."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "При анализе поддерживаемого главного ключа тома обнаружена некорректная строка."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "При анализе поддерживаемого главного ключа тома обнаружена неожиданная строка («%s»)."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "При анализе поддерживаемого главного ключа тома обнаружено неожиданное значение элемента метаданных «%u»."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Ошибка чтения подписи BITLK из %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Некорректная или неизвестная подпись устройства BITLK."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "BITLK версии 1 пока не поддерживается."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Некорректная или неизвестная подпись загрузчика устройства BITLK."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Некорректная или неизвестная подпись устройства BITLK."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Неподдерживаемый размер сектора %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Ошибка чтения заголовка BITLK из %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Ошибка чтения метаданных BITLK FVE из %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Неизвестный или неподдерживаемый тип шифрования."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Ошибка чтения элементов метаданных BITLK из %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "При анализе внешнего ключа обнаружен неожиданный тип элемента метаданных «%u»."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "При анализе внешнего ключа обнаружено неожиданное значение элемента метаданных «%u»."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "При анализе ключа запуска обнаружен неожиданный элемент метаданных."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Эта операция не поддерживается."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Ð\9dевеÑ\80нÑ\8bй Ñ\80азмеÑ\80 ÐºÐ»Ñ\8eÑ\87а."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Ð\9dеожиданнÑ\8bй Ñ\80азмеÑ\80 ÐºÐ»Ñ\8eÑ\87а Ð´Ð°Ð½Ð½Ñ\8bÑ\85."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Данное устройство BITLK находится в неподдерживаемом состоянии и не может быть включено."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Устройства BITLK с типом «%s» не могут быть включены."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Активация частично расширенного устройства BITLK не поддерживается."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Невозможно активировать устройство, в ядерном dm-crypt отсутствует поддержка BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Невозможно активировать устройство, в ядерном dm-crypt отсутствует поддержка BITLK Elephant diffuser."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Устройство verity %s не использует заголовок на диске."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Устройство %s не является корректным устройством VERITY."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Неподдерживаемая версия VERITY %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Повреждён заголовок VERITY."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Указан неправильный формат VERITY UUID на устройстве %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Ошибка при обновлении заголовка verity на устройстве %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Проверка подписи корневого хэша не поддерживается."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Невозможно исправить ошибки с устройством FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Найдено %u исправимых ошибок с устройством FEC."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Ядро не поддерживает отображение dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Ядро не поддерживает параметр подписи dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "После активации обнаружено повреждение устройства verity."
 
@@ -1181,41 +1202,37 @@ msgstr "После активации обнаружено повреждени
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Резервная область не заполнена нулями по адресу %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Переполнение смещения устройства."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Ошибка при проверке по адресу %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Неправильный размер параметров для устройства verity."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Переполнение области хэша."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Ошибка при сверке области данных."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Ошибка при сверке корневого хэша."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Ошибка ввода-вывода при создании области хэша."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Ошибка при создании области хэша."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "ПРЕДУПРЕЖДЕНИЕ: ядро не сможет активировать устройство, если размер блока данных превышает размер страницы (%u)."
@@ -1224,53 +1241,61 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ: ядро не сможет активир
 msgid "Failed to allocate RS context."
 msgstr "Ошибка при выделении контекста RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Ошибка при выделении буфера."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Не удалось прочитать блок RS %<PRIu64>, байт %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Не удалось прочитать чётность для блока RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Не удалось исправить чётность для блока %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Не удалось записать чётность для блока RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Для FEC размеры блока должны совпадать."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Неверное количество байт чётности."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Неправильная длина сегмента FEC."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Не удалось определить размер устройства %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Ядро не поддерживает отображение dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Ядро не поддерживает выравнивание фиксированных метаданных dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Ядро не позволяет задействовать небезопасный параметр пересчёта (для отключения ищите параметры включения старого режима)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Не удалось захватить блокировку на запись на устройстве %s."
@@ -1291,45 +1316,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Запрошенное смещение данных слишком мало."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: очень маленькая область слотов ключа (%<PRIu64> байт), количество доступных слотов ключа LUKS2 очень ограничено.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Не удалось захватить блокировку устройства %s на чтение."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "В резервной копии %s обнаружены запрещённые требования LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Смещение данных различается на устройстве и в резервной копии, восстановление невозможно."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Двоичный заголовок с областями слота ключа различается на устройстве и в резервной копии, восстановление невозможно."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Устройство %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "не содержит заголовка LUKS2. Замена заголовка может уничтожить данные на этом устройстве."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "уже содержит заголовок LUKS2. Замена заголовка уничтожит существующие слоты ключей."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1340,7 +1365,7 @@ msgstr ""
 "действующего устройства! Замена заголовка из резервной копии может повредить\n"
 "данные на этом устройстве!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1350,58 +1375,58 @@ msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: на устройстве обнаружено незаконченное внесистемное (offline)\n"
 "перешифрование! Замена заголовка из резервной копии может повредить данные."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Неизвестный флаг %s игнорируется."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Отсутствует ключ для сегмента dm-crypt %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Ошибка при задании сегмента dm-crypt."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Ошибка при задании сегмента dm-linear."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Неподдерживаемые настройки целостности устройства."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Выполняется перешифрование. Невозможно деактивировать устройство."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Не удалось заменить приостановленное устройство %s на цель dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Ошибка при чтении требований LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Обнаружены неудовлетворяемые требования LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Операция не совместима с устройством, отмеченным для устаревшего перешифрования. Прерываемся."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Операция не совместима с устройством, отмеченным для перешифрования LUKS2. Прерываемся."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Недостаточно памяти для открытия слота ключа."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Ошибка открытия слота ключа."
 
@@ -1431,7 +1456,7 @@ msgstr "Невозможно переместить область слота к
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Невозможно переместить область слота ключа. Слишком маленькие слоты ключа LUKS2."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Невозможно переместить область слота ключа."
 
@@ -1468,281 +1493,293 @@ msgstr "Невозможно преобразовать в формат LUKS1 
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Невозможно преобразовать в формат LUKS1 — слот ключа %u несовместим с LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Размер hotzone должен быть кратен вычисленному выравниванию зоны (%zu байт)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Размер устройства должен быть кратен вычисленному выравниванию зоны (%zu байт)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Неподдерживаемый режим устойчивости %s."
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Ошибка при инициализации старой сегментной обёртки хранилища."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Ошибка при инициализации новой сегментной обёртки хранилища."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Ошибка чтения контрольных сумм текущей hotzone."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Не удалось прочитать область hotzone начиная с %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Не удалось расшифровать сектор %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Не удалось восстановить сектор %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Размеры устройств источника и назначения не совпадают. Источник %<PRIu64>, назначение: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Ошибка при активации устройства hotzone %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Ошибка при активации оверлейного устройства %s с действительной исходной таблицей."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Ошибка при загрузке нового отображения устройства %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Ошибка при обновлении стека устройств перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Ошибка при задании нового размера области слотов ключей."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Сдвиг данные не выровнен к запрошенному размеру сектора шифрования (%<PRIu32> байт)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Устройство данных не выровнено к запрошенному размеру сектора шифрования (%<PRIu32> байт)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Сдвиг данных (%<PRIu64> секторов) меньше чем будущее смещение данных (%<PRIu64> секторов)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Ошибка при открытии %s в монопольном режиме (уже отображено или примонтировано)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Устройство не отмечено для перешифрования LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Ошибка при загрузке контекста перешифрования LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Ошибка при получении состояния перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Устройство не перешифровывается."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Процесс перешифрования уже запущен."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Ошибка при захвате блокировки перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Невозможно продолжить с перешифрованием. Сначала запустите восстановление перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Активный размер устройства и запрошенный размер перешифрования не совпадают."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "В параметрах перешифрования запрошен некорректный размер устройства."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Выполняется перешифрование. Восстановление выполнить невозможно."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "Перешифрование LUKS2 уже инициализировано в метаданных."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Не удалось инициализировать перешифрование LUKS2 в метаданных."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Ошибка при назначении сегментов устройства для следующей hotzone перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Ошибка при записи метаданных устойчивости перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Не удалось расшифровать."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Не удалось записать область hotzone начиная с %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Ошибка синхронизации данных."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Ошибка при обновлении метаданных после завершения текущей hotzone перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Ошибка при записи метаданных LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Ошибка при затирании резервной копии сегмента данных."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Не удалось выключить флаг требования перешифрования."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Ошибка при назначении токена %d слоту ключа %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Ошибка при получении блокировки перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Критическая ошибка при перешифровании куска начиная с %<PRIu64>, длиной в %<PRIu64> секторов."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Устройство не возобновит работу пока не будет заменено вручную с целью error."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Невозможно продолжить с перешифрованием. Неожиданное состояние перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Контекст перешифрования отсутствует или неверен."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Ошибка при инициализации стека устройства перешифрования."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Ошибка при обновлении контекста перешифрования."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Некорректный слот ключа %d."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Нет свободного слота под токен."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Ошибка при создании встроенного токена %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Невозможно проверить парольную фразу не с входных tty."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Параметры шифрования слота ключа могут задаваться только для устройства LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Обнаружено указание неизвестного шаблона шифра."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: параметр --hash игнорируется в режиме plain с указанным файлом ключа.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: параметр --keyfile-size игнорируется, размер для чтения приравнивается размеру ключа шифрования.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Обнаружены подпись(и) устройства на %s. Продолжение работы может повредить существующие данные."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Операция прервана.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Параметр --key-file является обязательным."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Введите VeraCrypt PIM: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Недопустимое значение PIM: ошибка при разборе."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Недопустимое значение PIM: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Недопустимое значение PIM: вышло за границы диапазона."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "С этой парольной фразой заголовка устройства не обнаружено."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Устройство %s не является корректным устройством BITLK."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1752,90 +1789,98 @@ msgstr ""
 "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n"
 "Этот дамп следует всегда хранить зашифрованным в надёжном месте."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Устройство %s всё ещё активно и запланировано к отложенному удалению.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Для изменения размера активного устройства требуется ключ тома в связке ключей, но указан параметр --disable-keyring."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Оценка производительности прервана."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     Н/Д\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u итераций в секунду для %zu-битного ключа\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s Н/Д\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u итераций, %5u памяти, %1u параллельных нитей (ЦП) для %zu-битного ключа (запрашивался %u мс)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Результат оценки производительности ненадёжен."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Тесты, использующие практически только память (без ввода-вывода на хранилище).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s  Алгоритм |      Ключ |      Шифрование |     Расшифровка\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Шифр %s (%i-битный ключ) недоступен."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr ""
 "#     Algorithm |       Key |      Encryption |      Decryption\n"
 "#      Алгоритм |      Ключ |      Шифрование |     Расшифровка\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "Н/Д"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Кажется, что устройству не требуется восстановление перешифрования.\n"
-"Продолжить?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Введите пароль для восстановления перешифрования: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Действительно продолжить восстановление перешифрования LUKS2?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Введите пароль для восстановления перешифрования: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Введите пароль для восстановления перешифрования: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Действительно попробовать восстановить заголовок устройства LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1843,104 +1888,108 @@ msgstr ""
 "Затирается устройство для инициализации целостности контрольной суммы.\n"
 "Вы можете прервать процесс нажав CTRL+c (остаток незатёртого устройства будет содержать некорректную контрольную сумму).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Невозможно деактивировать временное устройство %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Параметр целостности можно использовать только в формате LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Неподдерживаемый размер параметров метаданных LUKS2."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Файл заголовка не существует, создать?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Невозможно создать файл заголовка %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Обнаружено указание неизвестного шаблона целостности."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Невозможно использовать %s в качестве заголовка для диска."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Данные на %s будут перезаписаны без возможности восстановления."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Ошибка при задании параметров pbkdf."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Сокращение смещения данных допускается только для отсоединённого заголовка LUKS."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Невозможно определить размер ключа тома LUKS без слотов ключа, укажите параметр --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Устройство активировано, но нельзя сделать флаги постоянными."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Для удаления выбран слот ключа %d."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Это последний слот ключа. Устройство станет неработоспособным после вычистки этого ключа."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Введите любую оставшуюся парольную фразу: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Операция прервана, слот ключа НЕ затёрт.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Введите удаляемую парольную фразу: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Введите новую парольную фразу для слота ключа: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Введите любую существующую парольную фразу: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Введите изменяемую парольную фразу: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Введите новую парольную фразу: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Введите парольную фразу для преобразуемого слота ключа: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Только одно устройство можно указать для операции isLuks."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1950,12 +1999,12 @@ msgstr ""
 "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n"
 "Этот дамп нужно хранить зашифрованным в надёжном месте."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Слот ключа %d не содержит непривязанного ключа."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1964,30 +2013,40 @@ msgstr ""
 "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n"
 "Этот дамп нужно хранить зашифрованным в надёжном месте."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s не является именем активного устройства %s."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s не является именем активного устройства LUKS или отсутствует заголовок."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Параметр --header-backup-file является обязательным."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s не является управляемым устройством cryptsetup."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Обновление не поддерживается для устройств типа %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Нераспознанный тип метаданных устройства %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Для команды требуется задать устройство и имя отображения."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1996,95 +2055,95 @@ msgstr ""
 "Эта операция сотрёт все слоты ключей на устройстве %s.\n"
 "Устройство станет неработоспособным после этой операции."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Операция прервана, слоты ключа НЕ затёрты.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Некорректный тип LUKS, поддерживаются только luks1 и luks2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Устройство уже имеет тип %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Данная операция преобразует формат %s в %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Операция прервана, устройство НЕ преобразовано.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Отсутствует параметр --priority, --label или --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Некорректный токен %d."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Используется токен %d."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Ошибка при добавлении токена luks2-keyring %d."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Ошибка при назначении токена %d слоту ключа %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Токен %d не используется."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Ошибка при импорте токена из файла."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Ошибка при получении токена %d для экспорта."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Для добавления токена требуется параметр --key-description."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Для действия требуется указать токен. Используйте параметр --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Некорректная операция с токеном %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Автоматически обнаруженное активное устройство dm «%s» для устройства данных %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Устройство %s не является блочным.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Не удалось автоматически обнаружить держателей устройства %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2097,233 +2156,242 @@ msgstr ""
 "Это может привести к потере данных, если устройство всё же активно.\n"
 "Для запуска перешифрования в оперативном режиме укажите параметр --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Неверный тип устройства LUKS."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Шифрование без отсоединённого заголовка (--header) невозможно без сокращения размера устройства данных (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Запрошенное смещение данных должно быть меньше или равно половине значения параметра --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Подгоняется значение --reduce-device-size под двукратный размер --offset %<PRIu64> (секторов).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Шифрование поддерживается только для формата LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "На %s обнаружено устройство LUKS. Хотите снова зашифровать это устройство LUKS?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Временный файл заголовка %s уже существует. Прекращение работы."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Невозможно создать временный файл заголовка %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s теперь активен и готов для оперативного шифрования.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "Расшифровка LUKS2 поддерживается только для устройства с отсоединённым заголовком."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Для шифрования недостаточно свободных слотов ключей."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Файл ключа можно использовать только с --key-slot или только при одном активном слоте."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Введите парольную фразу для слота ключа %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Введите парольную фразу для слота ключа %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Переходим на алгоритм шифрования данных %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Для команды требуется в аргументе указать устройство."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "В настоящий момент поддерживается только формат LUKS2. Для LUKS1 используйте программу cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Уже выполняется устаревшее внесистемное (offline) перешифрование. Используйте программу cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Перешифрование устройства с профилем целостности не поддерживается."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Перешифрование LUKS2 уже инициализировано. Прекращение работы."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "Устройство LUKS2 не перешифровывается."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<устройство> [--type <тип>] [<имя>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "открыть устройство как <имя>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<имя>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "закрыть устройство (удалить отображение)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "изменить размер активного устройства"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "показать состояние устройства"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <шифр>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "оценка производительности шифра"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<устройство>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "попытаться исправить метаданные на диске"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "перешифровать устройство LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "стереть все слоты ключей (удалить ключ шифрования)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "преобразовать LUKS из/в формат LUKS2"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "задать постоянные параметры настройки LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<устройство> [<новый файл ключа>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "форматировать устройство LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "добавить ключ к устройству LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<устройство> [<файл ключа>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "удалить заданный ключ или файл ключа с устройства LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "изменить заданный ключ или файл ключа устройства LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "преобразовать ключ в новые параметры pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<устройство> <слот ключа>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "затереть ключ с номером <слот ключа> с устройства LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "напечатать UUID устройства LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "проверить <устройство> на наличие заголовка раздела LUKS"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "выгрузить в дамп информацию о разделе LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "выгрузить в дамп информацию об устройстве TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "выгрузить в дамп информацию об устройстве BITLK"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Приостановить устройство LUKS и затереть ключ (заморозка операций ввода-вывода)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Возобновить работу приостановленного устройства LUKS"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Сделать резервную копию заголовка и слотов ключей устройства LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Восстановить заголовок и слоты ключей устройства LUKS"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <устройство>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Управление токенами LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2331,7 +2399,7 @@ msgstr ""
 "\n"
 "<действие> может быть:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2343,7 +2411,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2358,7 +2426,7 @@ msgstr ""
 "<слот ключа> - номер слота ключа LUKS для изменения\n"
 "<файл ключа> - необязательный файл ключа для нового ключа для действия luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2367,7 +2435,7 @@ msgstr ""
 "\n"
 "Встроенным форматом по умолчанию для метаданных является %s (для действия luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2384,7 +2452,7 @@ msgstr ""
 "PBKDF по умолчанию для LUKS2: %s\n"
 "\tВремя итерации: %d, Требуемая память: %dКБ, Кол-во параллельных нитей: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2399,443 +2467,451 @@ msgstr ""
 "\tplain: %s, Ключ: %d бит, хэширование пароля: %s\n"
 "\tLUKS: %s, Ключ: %d бит, хэширование заголовка LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: Размер ключа по умолчанию в режиме XTS (два внутренних ключа) будет удвоен.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: требуется %s в качестве аргументов"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Показать это сообщение"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Показать краткие инструкции"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Показать версию пакета"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Параметры справки:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Показывать подробные сообщения об ошибках"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Показывать отладочные сообщения"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Показывать отладочные сообщения включая метаданные JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Шифр, используемый для шифрования диска (смотрите /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Хэш, используемый для создания ключа шифрования из парольной фразы"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Проверить правильность парольной фразы, запрашивая её дважды"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Прочитать ключ из файла"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Прочитать (главный) ключ тома из файла."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Создать дамп (главного) ключа, а не информации слотов ключей"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Размер ключа шифрования"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "БИТ"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Ограничить чтение из файла ключа"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "байт"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Количество пропускаемых байтов в файле ключа"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Ограничить чтение из только что добавленного файла ключа"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Количество пропускаемых байтов в только что добавленном файле ключа"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Номер слота для нового ключа (по умолчанию первый свободный)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Размер устройства"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "СЕКТОРОВ"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Использовать только заданный размер устройства (игнорировать остаток устройства). ОПАСНО!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Начальное смещение в нижележащем (backend) устройстве"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Сколько секторов зашифрованных данных пропускать от начала"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Создать отображение в режиме только для чтения"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Не запрашивать подтверждение"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Время ожидания при ручном вводе парольной фразы (в секундах)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "сек"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Обновление строки хода выполнения (в секундах)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Как часто можно повторять попытку ввода парольной фразы"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Выравнивать полезные данные по границам <n> секторов — для luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Файл резервной копии заголовка и слотов ключей LUKS"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Использовать /dev/random для генерации ключа тома"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Использовать /dev/urandom для генерации ключа тома"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Совместно использовать устройство с другим неперекрывающимся шифрованным сегментом"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "Используемый для устройства UUID"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Разрешить отбрасывать запросы (так называемые TRIM) к устройству"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Устройство или файл с отдельным заголовком LUKS"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Не активировать устройство, только проверить парольную фразу"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Использовать скрытый заголовок (спрятанное устройство TCRYPT)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Устройство является системным диском TCRYPT (с загрузчиком)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Использовать резервный (вторичный) заголовок TCRYPT"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Также искать устройство совместимое с VeraCrypt"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Персональный умножитель итерации для устройства, совместимого с VeraCrypt"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Запрос персонального умножителя итерации для устройства, совместимого с VeraCrypt"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Тип метаданных устройства: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Выключить проверку качество пароля (если включена)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Использовать параметр производительности same_cpu_crypt для dm-crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Использовать параметр производительности submit_from_crypt_cpus для dm-crypt"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Пропускать dm-crypt workqueue и обрабатывать запросы чтения одновременно"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Пропускать dm-crypt workqueue и обрабатывать запросы записи одновременно"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Удаление устройства отложено, пока его не закроет последний пользователь"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Использовать глобальную блокировку для сериализации доступа на скорости памяти (memory-hard) PBKDF (для обхода OOM)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Время итерации PBKDF для LUKS (в мс)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "мс"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Алгоритм PBKDF (для LUKS2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Ограничение стоимости памяти PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "килобайт"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Стоимость параллельности PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "нити"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Стоимость итераций PBKDF (принудительная, оценка производительности отключена)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Приоритет слота ключа: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Выключить блокировку метаданных на диске"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Выключить загрузку ключей томов через связку ключей ядра"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Алгоритм целостности данных (только для LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Выключить журналирование для устройства целостности"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Не затирать устройство после форматирования"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Использовать неэффективное устаревшее дополнение (старые ядра)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Не запрашивать парольную фразу, если активация токеном завершилась ошибкой"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Номер токена (по умолчанию: любой)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Описание ключа"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Размер сектора шифрования (по умолчанию: 512 байт)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Использовать вычисленное IV как размер сектора (не 512 байт)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Задать набор постоянных флагов активации устройства"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Задать метку устройства LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Задать метку подсистемы устройства LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Создать или сделать дапм непривязанного (без назначенного сегмента данных) слота ключа LUKS2"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Прочитать или записать json в файл"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Размер области метаданных заголовка LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Размер области слотов ключей заголовка LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Обновить (реактивировать) устройство с новыми параметрами"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Слот ключа LUKS2: Размер ключа шифрования"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Слот ключа LUKS2: Шифр, используемый для шифрования слота ключа"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Зашифровать устройство LUKS2 (шифрование по месту (in-place))"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Расшифровать устройство LUKS2 (удалить шифрование)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Инициализировать перешифрование LUKS2 только метаданных."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Возобновить только инициализированное перешифрование LUKS2."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Сократить размер данных устройства (переместить смещение данных). ОПАСНО!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Максимальный размер hotzone перешифрования."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Тип устойчивости перешифрования hotzone (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Контрольные хэш-суммы hotzone перешифрования"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Заменить автоопределение устройства dm для перешифруемого устройства"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[ПАРАМЕТР…] <действие> <данные для действия>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Не задан параметр <действие>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Неизвестное действие."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Параметры --refresh и --test-passphrase взаимно исключают друг друга."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Параметр --deferred допускается только для команды close."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Параметр --shared допускается только для открытия устройства plain."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Параметр --allow-discards допускается только для операции open."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Параметр --persistent допускается только для операции open."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Параметр --serialize-memory-hard-pbkdf допускается только для операции open."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Параметр --persistent не допускается одновременно указывать с --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2843,260 +2919,259 @@ msgstr ""
 "Параметр --key-size допускается только для  luksFormat, luksAddKey,\n"
 "действий open и benchmark. Для ограничения чтения из файла ключа используйте --keyfile-size=(байт)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Параметр --integrity допускается только для luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Параметр --integrity-no-wipe можно использовать только для действия format с расширением целостности."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Параметры --label и --subsystem допускаются только для операций LUKS2 luksFormat и config."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Параметр --test-passphrase допускается только для открытия устройств LUKS, TCRYPT и BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Размер ключа должен быть кратен 8-ми битам"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Некорректный слот ключа."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Параметр --key-file имеет приоритет над указанным значением файла ключа."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "В параметре нельзя использовать отрицательные числа."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Разрешено указывать только один параметр --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Разрешено использовать только один параметр --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Параметр --use-[u]random допускается только для luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Параметр --uuid допускается только для luksFormat и luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Параметр --align-payload допускается только для luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Параметры --luks2-metadata-size и --opt-luks2-keyslots-size допускаются только для операции luksFormat с LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Неправильно указан размер метаданных LUKS2."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Неправильно указан размер слота ключа LUKS2."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Параметры --align-payload и --offset не допускается указывать вместе."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Параметр --skip поддерживается только для открытия устройств plain и loopaes."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Параметр --offset поддерживается только для открытия устройств plain и loopaes, luksFormat и перешифрования устройства."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Параметр --tcrypt-hidden, --tcrypt-system или --tcrypt-backup поддерживается только для устройства TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Параметр --tcrypt-hidden нельзя указывать вместе с --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Параметр --veracrypt поддерживается только для устройств TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Указано некорректное значение параметра --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Параметр --veracrypt-pim поддерживается только для устройств, совместимых с VeraCrypt."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Параметр --veracrypt-query-pim поддерживается только для устройств, совместимых с VeraCrypt."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Параметры --veracrypt-pim и --veracrypt-query-pim взаимно исключают друг друга."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Значением параметра --priority может быть только ignore/normal/prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Требуется указать слот ключа."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Производной функцией на основе пароля для ключа (PBKDF) может быть только pbkdf2 или argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Принудительные итерации PBKDF нельзя объединять вместе с параметром времени итерации."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "Параметр размера сектора не поддерживается этой командой."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "Параметр больших секторов IV поддерживается только для открытия устройств типа plain с размером сектора более 512 байт."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "С параметром --unbound требуется задать размер ключа."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Параметр --unbound можно использовать только в действиях luksAddKey и luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Параметр --refresh можно использовать только при действии open."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Невозможно выключить блокировку метаданных."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Неправильный максимальный размер перешифрования hotzone."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Неправильно указан размер устройства."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Максимальный размер сокращения устройства равен 1 ГиБ."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Размер сокращения должен быть кратен 512 байтовому сектору."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Неправильный размер устройства данных."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Переполнение размера сокращения."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "Для расшифровки LUKS2 требуется параметр --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Размер устройства должен быть кратен 512 байтовому сектору."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Параметры ---reduce-device-size и --data-size не допускается указывать вместе."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Параметры --device-size и --size не допускается указывать вместе."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Параметры --ignore-corruption и --restart-on-corruption нельзя использовать вместе."
+msgstr "Параметры --keyslot-cipher и --keyslot-key-size нельзя использовать вместе."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Указана недопустимая строка соли."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Невозможно создать образ хэша %s для записи."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Невозможно создать образ FEC %s для записи."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Указана недопустимая строка корневого хэша."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Неверный файл подписи %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Невозможно прочитать файл подписи %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<устройство_данных> <устройство_хэша>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "отформатировать устройство"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<устройство_данных> <устройство_хэша> <корневой_хэш>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "проверить устройство"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<устройство_данных> <имя> <устройство_хэша> <корневой_хэш>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "показать состояние активного устройства"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<устройство_хэша>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "показать информацию на диске"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3111,7 +3186,7 @@ msgstr ""
 "<устройство_хэша> — устройство, содержащее проверочные данные\n"
 "<корневой_хэш> — хэш корневого узла на <устройстве_хэша>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3122,126 +3197,139 @@ msgstr ""
 "Встроенные параметры dm-verity по умолчанию:\n"
 "\tХэш: %s, Блок данных (байт): %u, Блок хэша (байт): %u, Размер соли: %u, Формат хэша: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Не использовать проверочный суперблок"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Тип форматирования (1 - обычное, 0 - как в Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "число"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Размер блока устройства данных"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Размер блока устройства хэша"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "байты чётности FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Количество блоков в файле данных"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "блоков"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Путь к устройству с данными коррекции ошибок"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "путь"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Начальное смещение на устройстве хэша"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Начальное смещение на устройстве FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Алгоритм хэширования"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "строка"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Соль"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "шестн. строка"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Путь к файлу с подписью корневого хэша"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
-msgstr "Перезапустить ядро, если обнаружится ошибка"
+msgstr "Перезапустить ядро, если обнаружится повреждение"
+
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Включить панику в ядре, если обнаружится повреждение"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Игнорировать повреждение, только запротоколировать"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Не проверять обнулённые блоки"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Проверять блок данных только при первом чтении"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Параметр --ignore-corruption, --restart-on-corruption или --ignore-zero-blocks допускается только для операции open."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Параметр --root-hash-signature можно использовать только для действия open."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Параметры --ignore-corruption и --restart-on-corruption нельзя использовать вместе."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Параметры ---panic-on-corruption и --restart-on-corruption нельзя использовать вместе."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Неверный размер ключа. Максимальное значение (в байтах) равно %u."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Невозможно прочитать файл ключа %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Невозможно прочитать %d байт из файл ключа %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Отформатирован с размером тега %u, внутренняя целостность %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<устройство_целостности>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<устройство_целостности> <имя>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3252,403 +3340,409 @@ msgstr ""
 "<имя> — устройство, создаваемое на %s\n"
 "<устройство_целостности> — устройство, содержащее данные с тегами целостности\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Встроенные параметры dm-integrity:\n"
 "\tАлгоритм контрольной суммы: %s\n"
+"\tМаксимальный размер файла ключа: %dКБ\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Путь к устройству данных (при разделении устройств)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Размер журнала"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Чередующиеся секторы"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Отметка журнала"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "процент"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Время фиксации журнала"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "мс"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Количество 512-байтовых секторов на бит (режим битовой карты)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Время стирания в режиме битовой карты"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Размер тега (на сектор)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Размер сектора"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Размер буфера"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Алгоритм целостности данных"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Размер ключа целостности данных"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Прочитать ключ целостности из файла"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Алгоритм целостности журнала"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Размер ключа целостности журнала"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Прочитать ключ целостности журнала из файла"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Алгоритм шифрования журнала"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Размер ключа шифрования журнала"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Прочитать ключ шифрования журнала из файла"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Режим восстановления (без проверки журнала и тегов)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Использовать битовую карту для отслеживания изменений и выключить журналирование для устройства целостности"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
-msgstr "Автоматически вычислять начальные теги повторно."
+msgstr "Автоматически пересчитывать начальные теги."
+
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Не защищать суперблок с помощью HMAC (старые ядра)"
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Разрешить пересчёт томов с помощью ключей HMAC (старые ядра)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Параметр --integrity-recalculate можно использовать только для действия open."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Параметры --journal-size, --interleave-sectors, --sector-size, --tag-size и --no-wipe можно использовать только для действия format."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Неправильное задание размера журнала."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Должны быть указаны параметры файла ключа и размер ключа одновременно."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Если используется ключ целостности, то должен быть указан алгоритм целостности."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Должны быть указаны параметры файла ключа целостности и размер ключа одновременно."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Если используется ключ целостности журнала, то должен быть указан алгоритм целостности журнала."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Должны быть указаны параметры файла ключа шифрования и размер ключа одновременно."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Если используется ключ шифрования журнала, то должен быть указан алгоритм шифрования журнала."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Параметры восстановления и режима битовой карты взаимно исключают друг друга."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Параметры журнала нельзя использовать в режиме битовой карты."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Параметр битовой карты можно использовать только в режиме битовой карты."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Уже выполняется перешифрование."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Невозможно монопольно открыть устройство %s, оно уже используется."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Не удалось выделить выровненную память."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Невозможно прочитать с устройства %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Отметка устройства LUKS1 %s бесполезна."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Установка внесистемного (offline) флага перешифрования LUKS2 на устройстве %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Невозможно записать на устройство %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Невозможно записать в файл протокола перешифрования."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Невозможно прочитать файл протокола перешифрования."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Файл протокола %s существует, подразумевается перешифрование.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Активируется временное устройство, задействуется старый заголовок LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Активируется временное устройство, задействуется новый заголовок LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Ошибка при активации временного устройства."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Не удалось задать смещение данных."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Не удалось задать размер метаданных."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Создан новый заголовок LUKS для устройства %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Эта версия cryptsetup-reencrypt не работает с новым типом внутреннего токена %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Ошибка чтения флагов активации из резервной копии заголовка."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Ошибка записи флагов активации в новый заголовок."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Ошибка чтения требований из резервной копии заголовка."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Создана резервная копия заголовка %s для устройства %s."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Ошибка при создании резервных копий заголовка LUKS."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Невозможно восстановить заголовок %s устройства %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Заголовок %s устройства %s восстановлен."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Невозможно открыть временное устройство LUKS."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Невозможно получить размер устройства."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Ошибка ввода-вывода при перешифровании."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Указан некорректный UUID."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Невозможно открыть файл протокола перешифрования."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Расшифровка не выполняется, указанный UUID можно использовать только для возобновления приостановленного процесса расшифровки."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Изменённые параметры pbkdf в слоте ключа %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Размер блока перешифрования"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "МиБ"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Не изменять ключ, нет области перешифрования данных"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Прочитать новый (главный) ключ тома из файла"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Время итерации PBKDF2 для LUKS (мс)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Использовать direct-io для доступа к устройствам"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Вызывать fsync после каждого блока"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Обновлять файл протокола после каждого блока"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Использовать только этот слот (остальные будут выключены)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Создать новый заголовок на не шифрованном устройстве"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Окончательно расшифровать устройство (удалить шифрование)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Используемый для возобновления шифрования UUID"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Тип метаданных LUKS: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[ПАРАМЕТР…] <устройство>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Перешифрование изменит: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "ключ тома"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "установить хэш равным"
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", установить шифр равным"
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Требуется аргумент."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Значение размера блока перешифрования должно быть в диапазоне от 1 МиБ до 64 МиБ."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Максимальный размер сокращения устройства равен 64 МиБ."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Параметр --new должен использоваться вместе с --reduce-device-size или --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Параметр --keep-key можно использовать только с --hash, --iter-time или --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Параметр --new нельзя использовать вместе с --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Параметр --decrypt несовместим с указанными параметрами."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Параметр --uuid можно использовать только вместе с --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Некорректный тип luks. Возможные значения: «luks», «luks1» или «luks2»."
 
@@ -3689,32 +3783,32 @@ msgstr "неизвестная ошибка"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Сбой команды, код %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Создан слот ключа %i."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Слот ключа %i разблокирован."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Слот ключа %i удалён."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Создан токен %i."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Токен %i удалён."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3722,55 +3816,55 @@ msgstr ""
 "\n"
 "Затирание прервано."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Устройство %s уже содержит подпись раздела «%s».\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Устройство %s уже содержит подпись суперблока «%s».\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Ошибка при инициализации определения подписей устройства."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Ошибка выполнения stat для устройства %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Устройство %s уже используется. Нельзя продолжать выполнение операции форматирования."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Ошибка при открытии файла %s в режиме чтения-записи."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Существующая подпись раздела «%s» (смещение: %<PRIi64> байт) на устройстве %s будет затёрта."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Существующая подпись суперблока «%s» (смещение: %<PRIi64> байт) на устройстве %s будет затёрта."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Ошибка при затирании подписи устройства."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Ошибка при определении подписи устройства %s."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3778,7 +3872,7 @@ msgstr ""
 "\n"
 "Перешифрование прервано."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Невозможно проверить стойкость пароля: %s"
@@ -3797,46 +3891,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Ошибка при проверке стойкости пароля: некорректная парольная фраза (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Ошибка чтения парольной фразы с терминала."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Парольная фраза повторно: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Парольные фразы не совпадают."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Невозможно использовать смещение при вводе с терминала."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Введите парольную фразу: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Введите парольную фразу для %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Ключ недоступен с этой парольной фразой."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Не найдено подходящего слота ключа."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Невозможно открыть файл ключа %s для записи."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Невозможно записать в файл ключа %s."
@@ -3879,6 +3973,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Ошибка записи в файл JSON."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Не удалось выключить флаг требования перешифрования."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Кажется, что устройству не требуется восстановление перешифрования.\n"
+#~ "Продолжить?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "ПРЕДУПРЕЖДЕНИЕ: Каталог блокировки %s/%s отсутствует!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Неправильный размер параметров для устройства verity."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Если используется ключ целостности, то должен быть указан алгоритм целостности."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Неверный размер ключа."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "Параметр --refresh допускается только с командами open и refresh."
 
index df14b95..bbac274 100644 (file)
Binary files a/po/sr.gmo and b/po/sr.gmo differ
index 7562471..f9fc8ee 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,13 +1,13 @@
 # Serbian translation for cryptsetup.
 # Copyright © 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the cryptsetup package.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014–2020.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014–2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup-2.3.2-rc0\n"
+"Project-Id-Version: cryptsetup-2.3.5-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-02 22:38+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-03-28 09:55+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Virtaal 0.7.1\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Не могу да покренем мапера уређаја, радим као обичан корисник."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Не могу да покренем мапера уређаја. Да ли је учитан модул кернела „dm_mod“?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Затражена одложена заставица није подржана."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "ДМ-УЈИБ за уређај „%s“ је скраћен."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Непозната врста „dm“ мете."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Затражене опције перформанси дм-шифровања нису подржане."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Затражене опције рада оштећених података дм-веритија нису подржане."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Затражене „dm-verity FEC“ опције нису подржане."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Затражене опције целовитости података нису подржане."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Затражене опције величине одељка нису подржане."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Затражене опције самосталног прерачунавања ознака целовитости нису подржане."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Одбацивање/ОДСЕЦАЊЕ није подржано."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Затражени режим битмапе дм-целовитости није подржан."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Нисам успео да пропитам „dm-%s“ подеок."
@@ -114,7 +114,7 @@ msgstr "Не могу да покренем „RNG“ позадинца кри
 msgid "Cannot initialize crypto backend."
 msgstr "Не могу да покренем позадинца криптографије."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Хеш алгоритам „%s“ није подржан."
@@ -128,7 +128,7 @@ msgstr "Грешка обраде кључа (користим хеш %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Не могу да одредим врсту уређаја. Несагласно покретање уређаја?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Ова радња је подржана само за ЛУКС уређај."
 
@@ -136,7 +136,7 @@ msgstr "Ова радња је подржана само за ЛУКС уређ
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Ова радња је подржана само за ЛУКС2 уређај."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Сви утори кључева су пуни."
 
@@ -150,7 +150,7 @@ msgstr "Утор кључа %d није исправан, изаберите и
 msgid "Key slot %d is full, please select another one."
 msgstr "Утор кључа %d је пун, изаберите неки други."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Величина уређаја није поравната на величину логичког блока уређаја."
 
@@ -159,7 +159,8 @@ msgstr "Величина уређаја није поравната на вел
 msgid "Header detected but device %s is too small."
 msgstr "Заглавље је откривено али уређај „%s“ је премали."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Ова радња није подржана за ову врсту уређаја."
 
@@ -167,17 +168,13 @@ msgstr "Ова радња није подржана за ову врсту ур
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Неисправна радња са поновним шифровањем је у току."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Неподржано ЛУКС издање %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Откачени уређај метаподатака није подржан за ову врсту криптографије."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Уређај „%s“ није радан."
@@ -191,7 +188,7 @@ msgstr "Основни уређај за криптографски уређај
 msgid "Invalid plain crypt parameters."
 msgstr "Неисправни параметри обичне криптографије."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Неисправна величина кључа."
 
@@ -199,12 +196,16 @@ msgstr "Неисправна величина кључа."
 msgid "UUID is not supported for this crypt type."
 msgstr "УЈИБ није подржан за ову врсту криптографије."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Откачени уређај метаподатака није подржан за ову врсту криптографије."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Неподржана величина одељка шифровања."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Величина уређаја није поравната на затражену величину одељка."
 
@@ -248,8 +249,8 @@ msgstr "УПОЗОРЕЊЕ: Величина ЛУКС2 метаподатака
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "УПОЗОРЕЊЕ: Величина области ЛУКС2 утора кључева је промењена на %<PRIu64> бајта.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Уређај „%s“ је премали."
@@ -282,16 +283,16 @@ msgstr "Не могу да обликујем „LOOPAES“ без уређај
 msgid "Can't format VERITY without device."
 msgstr "Не могу да обликујем „VERITY“ без уређаја."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Неподржана врста „VERITY“ хеша %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Неподржана величина блока „VERITY“."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Неподржан померај хеша „VERITY“."
 
@@ -321,236 +322,236 @@ msgstr "УПОЗОРЕЊЕ: Затражена величина ознаке %d
 msgid "Unknown crypt device type %s requested."
 msgstr "Затражена је непозната врста „%s“ криптографског уређаја."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Неподржани параметри на уређају „%s“."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Неодговарајући параметри на уређају „%s“."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Криптографски уређаји се не поклапају."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Нисам успео поново да учитам уређај „%s“."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Нисам успео да обуставим уређај „%s“."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Нисам успео да наставим са уређајем „%s“."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Кобна грешка приликом поновног учитавања уређаја „%s“ (на врху уређаја „%s“)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Нисам успео да променим уређај „%s“ на дм-грешку."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Не могу да променим величину уређаја петље."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Да ли стварно желите да измените УЈИБ уређаја?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Датотека резерве заглавља не садржи сагласно ЛУКС заглавље."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Волумен „%s“ није радан."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Волумен „%s“ је већ обустављен."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Обустављање није подржано за уређај „%s“."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Грешка за време обустављања уређаја „%s“."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Волумен „%s“ није обустављен."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Настављање није подржано за уређај „%s“."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Грешка за време настављања уређаја „%s“."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Волумен „%s“ није обустављен."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Кључ волумена не одговара волумену."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Не могу да додам утор кључа, сви утори су искључени а није обезбеђен ниједан кључ волумена."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Нисам успео да разменим нови утор кључа."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Утор кључа „%d“ није исправан."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Утор кључа „%d“ није радан."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Заглавље уређаја се преклапа са облашћу података."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Поновно шифровање је у току. Не могу да активирам уређај."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Нисам успео да добавим закључавање поновног шифровања."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Опоравак ЛУКС2 поновног шифровања није успело."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Врста уређаја није исправно покренута."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Не могу да користим уређај „%s“, назив није исправан или је још у употреби."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Већ постоји уређај „%s“."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Не могу да користим уређај „%s“, назив није исправан или је још у употреби."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Наведен је неисправан кључ волумена за обичан уређај."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Наведен је неисправан хеш корена за уређај тачности."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Потпис хеша корена је потребан."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Привезак кључева кернела недостаје: потребан је за прослеђивање потписа кернелу."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Нисам успео да учитам кључ у привеску кључева кернела."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Уређај „%s“ је још увеку употреби."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Неисправан уређај „%s“."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Међумеморија кључа волумена је премала."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Не могу да довучем кључ волумена за обичан уређај."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Не могу да довучем хеш корена за уређај тачности."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Ова радња није подржана за криптографски уређај „%s“."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Радња исписа није подржана за ову врсту уређаја."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Померај података није умножак %u бајта."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Не могу да преобратим уређај „%s“ који је још увек у употреби."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Нисам успео да доделим утор кључа „%u“ као нови кључ волумена."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Нисам успео да покренем основне параметре ЛУКС2 утора кључа."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Нисам успео да доделим утор кључа „%d“ за преглед."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Привезак кључева кернела није подржан кернелом."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Нисам успео да прочитам пропусну реч из привеска кључа (грешка %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Нисам успео да остварим опште закључавање серијализације приступа чврстој меморији."
 
@@ -578,8 +579,8 @@ msgstr "Нисам успео да добавим податке датотек
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Не могу да премотам на затражени померај датотеке кључа."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Нестало је меморије приликом читања пропусне речи."
 
@@ -599,51 +600,56 @@ msgstr "Премашена је највећа величина датотеке
 msgid "Cannot read requested amount of data."
 msgstr "Не могу да прочитам затражену количину података."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Уређај „%s“ не постоји или је приступ одбијен."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Уређај „%s“ није сагласан."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Занемарујем лажну оптималну-уи величину за уређај података (%u бајта)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Уређај „%s“ је премали. Захтева барем %<PRIu64> бајта."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Не могу да користим уређај „%s“ који је у употреби (већ мапиран или прикачен)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Не могу да користим уређај „%s“, овлашћење је одбијено."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Не могу да добавим податке о уређају „%s“."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Не могу да користим уређај повратне петље, радим као обичан корисник."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Прикачињање уређаја повратне петље није успело (потребан је уређај петље са опцијом самочишћења)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Захтевани померај је изван стварне величине уређаја „%s“."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Уређај „%s“ има нулту величину."
@@ -717,16 +723,16 @@ msgstr "Закључавање је прекинуто. Путања закљу
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "УÐ\9fÐ\9eÐ\97Ð\9eРÐ\95Ð\8aÐ\95: Ð\94иÑ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð°ÐºÑ\99Ñ\83Ñ\87аваÑ\9aа â\80\9e%s/%sâ\80\9c Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\98е!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Ð\94иÑ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð°ÐºÑ\99Ñ\83Ñ\87аваÑ\9aа â\80\9e%s/%sâ\80\9c Ð±Ð¸Ñ\9bе Ð½Ð°Ð¿Ñ\80авÑ\99ен Ñ\81а Ð¾Ñ\81новним Ð¿Ñ\80еведеним Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Закључавање је прекинуто. Путања закључавања „%s/%s“ је неискористива („%s“ није директоријум)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Не могу да премотам на померај уређаја."
 
@@ -753,8 +759,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Спецификација шифрера треба бити у запису „[шифрер]-[режим]-[ив]“."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Не могу да пишем на уређај „%s“, овлашћење је одбијено."
@@ -773,12 +779,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Грешка УИ приликом шифровања утора кључа."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Не могу да отворим уређај „%s“."
@@ -799,43 +805,43 @@ msgstr "Уређај „%s“ је премали. (ЛУКС1 захтева б
 msgid "LUKS keyslot %u is invalid."
 msgstr "ЛУКС утор кључа „%u“ није исправан."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Уређај „%s“ није исправан ЛУКС уређај."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Затражена датотека резерве заглавља „%s“ већ постоји."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Не могу да направим резервну датотеку заглавља „%s“."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Не могу да запишем резервну датотеку заглавља „%s“."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Датотека резерве не садржи исправно ЛУКС заглавље."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Не могу да отворим резервну датотеку заглавља „%s“."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Не могу да прочитам резервну датотеку заглавља „%s“."
@@ -857,7 +863,7 @@ msgstr "не садржи ЛУКС заглавље. Замена заглављ
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "већ садржи ЛУКС заглавље. Замена заглавља ће уништити постојеће уторе кључева."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -869,101 +875,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Неуобичајена величина кључа, потребна је ручна поправка."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Неуобичајено поравнање утора кључева, потребна је ручна поправка."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Поправљам уторе кључева."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Утор кључа %i: померај је оправљен (%u —> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Утор кључа %i: траке су оправљене (%u —> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Утор кључа %i: лажан потпис партиције."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Утор кључа %i: присолак је обрисан."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Записујем ЛУКС заглавље на диск."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Поправка није успела."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Затражени ЛУКС хеш „%s“ није подржан."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Нису откривени познати проблеми за ЛУКС заглавље."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Грешка приликом освежавања ЛУКС заглавља на уређају „%s“."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Грешка поновног читања ЛУКС заглавља након освежења на уређају „%s“."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Померај података за ЛУКС заглавље мора бити или 0 или већи од величине заглавља."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Достављен је погрешан запис ЛУКС УЈИБ-а."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Не могу да направим ЛУКС заглавље: није успело читање насумичног присолка."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Не могу да направим ЛУКС заглавље: није успео преглед заглавља (користим хеш „%s“)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Утор кључа „%d“ је радан, прво прочистите."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Материјал утора кључа „%d“ обухвата премало трака. Да управљам заглављем?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Не могу да отворим утор кључа (користим хеш %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Утор кључа %d није исправан, изаберите га између 0 и %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Не могу да обришем уређај „%s“."
@@ -999,11 +1005,11 @@ msgstr "Премашена је највећа дужина „TCRYPT“ про
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "„PBKDF2“ алгоритам хеша „%s“ није доступан, прескачем."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Није доступно затражено сучеље криптографије језгра."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Уверите се да је учитан модул кернела „algif_skcipher“."
 
@@ -1016,159 +1022,173 @@ msgstr "Покретање није подржано за величину %d о
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Језгро не подржава покретање за овај стари „TCRYPT“ режим."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Покрећем „TCRYPT“ систем шифровања за партицију „%s“."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Кернел не подржава мапирање сагласно са „TCRYPT“-ом."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Ова функција није подржана без учитавања „TCRYPT“ заглавља."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Нађох неочекивану врсту уноса метаподатака „%u“ приликом обраде подржаног главног кључа волумена."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Нађох неисправну ниску приликом обраде главног кључа волумена."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Нађох неочекивану ниску („%s“) приликом обраде подржаног главног кључа волумена."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Нађох неочекивану вредност уноса метаподатака „%u“ приликом обраде подржаног главног кључа волумена."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Нисам успео да прочитам „BITLK“ потпис из „%s“."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Неисправан или непознат потпис за „BITLK“ уређај."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "„BITLK“ издање 1 тренутно није подржано."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Неисправан или непознат потпис учитавања за „BITLK“ уређај."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Неисправан или непознат потпис за „BITLK“ уређај."
-
-#: lib/bitlk/bitlk.c:510
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:538
+#, c-format
 msgid "Unsupported sector size %<PRIu16>."
-msgstr "Неподржана величина одељка шифровања."
+msgstr "Неподржана величина одељка „%<PRIu16>“."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Нисам успео да прочитам „BITLK“ заглавље из „%s“."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Нисам успео да прочитам „BITLK FVE“ метаподатаке из „%s“."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Непозната или неподржана врста криптографије."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Нисам успео да прочитам уносе „BITLK“ метаподатака из „%s“."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Нађох неочекивану врсту уноса метаподатака „%u“ приликом обраде спољног кључа."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Нађох неочекивану вредност уноса метаподатака „%u“ приликом обраде спољног кључа."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Нађох неочекивану врсту уноса метаподатака приликом обраде кључа почретања."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Радња није подржана."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Ð\9fогÑ\80еÑ\88на Ð²ÐµÐ»Ð¸Ñ\87ина кључа."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Ð\9dеоÑ\87екивана Ð²ÐµÐ»Ð¸Ñ\87ина Ð¿Ð¾Ð´Ð°Ñ\82ака кључа."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Овај „BITLK“ уређај је у неподржаном стању и не може бити активиран."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "„BITLK“ уређај са врстом „%s“ се не може активирати."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Активирање делимично дешифрованог „BITLK“ уређаја није подржано."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK IV“."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK Elephant“ дифузера."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Уређај тачности %s не користи заглавље на-диску."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Уређај „%s“ није исправан „VERITY“ уређај."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Неподржано издање „VERITY“ %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Заглавље „VERITY“ је оштећено."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Достављен је погрешан УЈИБ „VERITY“ запис на уређају „%s“."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Грешка приликом освежавања заглавља тачности на уређају „%s“."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Провера хеш потписа корена није подржана."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Грешке се не могу поправити са „FEC“ уређајем."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Нађох поправљиве грешке (%u) са „FEC“ уређајем."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Кернел не подржава мапирање дм-тачности."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Кернел не подржава опцију потписа дм-тачности."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Уређај тачности је открио оштећење након покретања."
 
@@ -1177,41 +1197,37 @@ msgstr "Уређај тачности је открио оштећење нак
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Сувишна област није нулирана на положају %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Прекорачење помераја уређаја."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Провера није успела на положају %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Неисправни параметри величине за уређај тачности."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Прекорачење области хеша."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Провера области података није успела."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Провера хеша корена није успела."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Улазно/излазна грешка приликом стварања области хеша."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Стварање области хеша није успело."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "УПОЗОРЕЊЕ: Језгро не може да покрене уређајако величина блока података премашује величину странице (%u)."
@@ -1220,53 +1236,61 @@ msgstr "УПОЗОРЕЊЕ: Језгро не може да покрене ур
 msgid "Failed to allocate RS context."
 msgstr "Нисам успео да доделим „RS“ контекст."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Нисам успео да доделим међумеморију."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Нисам успео да прочитам „RS“ блок %<PRIu64> бајта %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Нисам успео да прочитам паритет „RS“ блока %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Нисам успео да поправим паритет за блок %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Нисам успео да запишем паритет „RS“ блока %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Величине блокова морају одговарати за „FEC“."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Неисправан број бајтова паритета."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Неисправна дужина „FEC“ сегмента."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Нисам успео да одредим величину за уређај „%s“."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Кернел не подржава мапирање дм-целовитости."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Кернел не подржава поравнање фиксних метаподатака дм-целовитости."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Кернел одбија да покрене небезбедну опцију поновног израчунавања (видите старе опције покретања да избегнете ово)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Нисам успео да остварим закључавање писања на уређају „%s“."
@@ -1287,45 +1311,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Затражени померај података је премали."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "УПОЗОРЕЊЕ: област утора кључа (%<PRIu64> бајта) је врло мала, доступан број ЛУКС2 утора кључа врло ограничен.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Нисам успео да остварим закључавање читања на уређају „%s“."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Забрањени ЛУКС2 захтеви су откривени у резерви „%s“."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Померај података се разликује на уређају и резерви, враћање није успело."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Бинарно заглавље са областима утора кључа се разликује на уређају и резерви, враћање није успело."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Уређај %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "не садржи ЛУКС2 заглавље. Замена заглавља може да уништи податке на том уређају."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "већ садржи „LUKS2“ заглавље. Замена заглавља ће уништити постојеће уторе кључева."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1335,7 +1359,7 @@ msgstr ""
 "УПОЗОРЕЊЕ: непознати ЛУКС2 захтеви су откривени у стварном заглављу уређаја!\n"
 "Замена заглавља резервом може оштетити податке на том уређају!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1345,58 +1369,58 @@ msgstr ""
 "УПОЗОРЕЊЕ: Недовршено ван мрежно поновно шифровање је откривено на уређају!\n"
 "Замена заглавља резервом може оштетити податке."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Занемарена непозната заставица „%s“."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Недостаје кључ за „dm-crypt“ подеок %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Нисам успео да подесим „dm-crypt“ подеок."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Нисам успео да подесим „dm-linear“ подеок."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Неподржано подешавање целовитости уређаја."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Поновно шифровање је у току. Не могу да деактивирам уређај."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Нисам успео да заменим обустављени уређај „%s“ са метом „dm-error“."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Нисам успео да прочитам ЛУКС2 захтеве."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Неоствариви ЛУКС2 захтеви су откривени."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Радња је несагласна са уређајем означеним за старо поновно шифровање. Прекидам."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Радња је несагласна са уређајем означеним за ЛУКС2 поновно шифровање. Прекидам."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Нема довољно доступне меморије за отварање утора кључа."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Отварање утора кључа није успело."
 
@@ -1426,7 +1450,7 @@ msgstr "Не могу да преместим област утора кључа
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Не могу да преместим област утора кључа. Област ЛУКС2 утора кључа је премала."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Не могу да преместим област утора кључа."
 
@@ -1463,281 +1487,293 @@ msgstr "Не могу да претворим у ЛУКС1 запис – уто
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Не могу да претворим у ЛУКС1 запис – утор кључа %u није ЛУКС1 сагласан."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Величина вруће зоне мора бити умножак прорачунатог поравнања зоне (%zu бајта)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Величина уређаја мора бити производ прорачунатог поравнања зоне (%zu бајта)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Неподржан режим гипкости „%s“"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Нисам успео да покренем старог увијача смештаја подеока."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Нисам успео да покренем новог увијача смештаја подеока."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Нисам успео да прочитам суму провере за текућу врућу зону."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Нисам успео да прочитам област вруће зоне са почетком на %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Нисам успео да дешифрујем област %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Нисам успео да опоравим област %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Величине изворног и циљног уређаја не одговарају. Извор %<PRIu64>, мета: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Нисам успео да активирам уређај вруће зоне „%s“."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Нисам успео да активирам уређај преклапања „%s“ са стварном табелом порекла."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Нисам успео да учитам ново мапирање за уређај „%s“."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Нисам успео да освежим спремник уређаја поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Нисам успео да подесим нову величину области утора кључа."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Помак података није поравнат на захтевану величину одељка шифровања (%<PRIu32> бајта)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Уређај података није поравнат на захтевану величину одељка шифровања (%<PRIu32> бајта)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Помак података (%<PRIu64> одељка) је мањи од будућег помераја података (%<PRIu64> одељка)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Нисам успео да отворим „%s“ у искључивом режиму (већ мапиран или прикачен)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Уређај није означен за ЛУКС2 поновно шифровање."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Нисам успео да учитам контекст ЛУКС2 поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Нисам успео да добавим стање поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Уређај није у поновном шифровању."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Процес поновног шифровања је већ покренут."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Нисам успео да остварим закључавање поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Не могу да наставим са поновним шифровањем. Прво покрените опоравак поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Активна величина уређаја и величина затраженог поновног шифровања не одговарају."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "Неисправна величина уређаја је затражена у параметрима поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Поновно шифровање је у току. Не могу да обавим опоравак."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "ЛУКС2 поновно шифровање је већ покренуто у метаподацима."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Нисам успео да покренем ЛУКС2 поновно шифровање у метаподацима."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Нисам успео да поставим подеоке уређаја за следећу врућу зону поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Нисам успео да запишем метаподатаке гипкости поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Дешифровање није успело."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Нисам успео да запишем област вруће зоне са почетком на %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Нисам успео да усагласим податке."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Нисам успео да освежим метаподатке након тренутно завршеног поновног шифровања вруће зоне."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Нисам успео да запишем ЛУКС2 метаподатке."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Нисам успео да очистим податке подеока резерве."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Нисам успео да искључим заставицу захтева поновног шифровања."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Нисам успео да доделим скупину „%d“ утору кључа %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Нисам успео да добавим закључавање поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Кобна грешка приликом поновног шифровања комада који почиње на %<PRIu64>, %<PRIu64> подеока дуг."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Не наставља са уређајем осим ако није ручно замењен метом грешке."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Не могу да наставим са поновним шифровањем. Неочекивано стање поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Недостаје или неисправан контекст поновног шифровања."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Нисам успео да покренем поновно шифровање спремника уређаја."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Нисам успео да освежим контекст поновног шифровања."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Утор кључа „%d“ није исправан."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Нема слободног утора скупине."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Нисам успео да направим уграђену скупину „%s“."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Не могу да одрадим проверу пропусне речи на не-конзолним улазима."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Параметри шифровања утора кључа се могу поставити само за ЛУКС2 уређај."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Није откривен познат образац одреднице шифрера."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "УПОЗОРЕЊЕ: Параметар „--hash“ је занемарен у обичном режиму са наведеном кључном датотеком.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "УПОЗОРЕЊЕ: Опција „--keyfile-size“ је занемарена, величина читања је иста као величина кључа шифровања.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Открих потпис(е) уређаја на „%s“. Даље настављање може оштетити постојеће податке."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Радња је обустављена.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Захтевана је опција „--key-file“."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Унесите „VeraCrypt PIM“: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Неисправна „PIM“ вредност: грешка обраде."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Неисправна „PIM“ вредност: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Неисправна „PIM“ вредност: изван опсега."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Није откривено заглавље уређаја са овом пропусном речи."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Уређај „%s“ није исправан „BITLK“ уређај."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1747,88 +1783,96 @@ msgstr ""
 "који омогућава приступ шифрованој партицији без лозинке.\n"
 "Овај избачај треба увек бити смештен шифрован на безбедном месту."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Уређај „%s“ је још увек активан и заказан за одложено уклањање.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Сразмеравање активног уређаја захтева кључ волумена у привеску кључева али је постављена „--disable-keyring“ опција."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Оцењивање је прекинуто."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "„PBKDF2-%-9s“     Н/Д\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "„PBKDF2-%-9s“ %7u понављања у секунди за %zu-битни кључ\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s Н/Д\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u понављања, %5u меморије, %1u паралелних нити (процесора) за %zu-битни кључ (захтева се %u ms време)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Резултат оцењивања није поуздан."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Пробе су приближне користећи само меморију (без УИ смештаја).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s  Алгоритам |     Кључ |      Шифровање |      Дешифровање\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Шифрер „%s“ (са %i битним кључем) није доступан."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#      Алгоритам |      Кључ |      Шифровање |      Дешифровање\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "Недоступно"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Изгледа да уређај не захтева опоравак поновног шифровања.\n"
-"Да ли желите да наставите?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Унесите пропусну реч за опоравак поновног шифровања: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Да наставим са опоравком ЛУКС2 поновног шифровања?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Унесите пропусну реч за опоравак поновног шифровања: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Унесите пропусну реч за опоравак поновног шифровања: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Стварно да покушам да поправим заглавље ЛУКС уређаја?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1836,104 +1880,108 @@ msgstr ""
 "Бришем уређај да бих започео суму провере целовитости.\n"
 "Можете прекинути ово притиском на „CTRL+c“ (остатак необрисаног уређаја садржаће неисправну суму провере).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Не могу да деактивирам привремени уређај „%s“."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Опција целовитости се може користити само за ЛУКС2 запис."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Неподржана опција величине ЛУКС2 метаподатака."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Датотека заглавља не постоји, да ли желите да је направите?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Не могу да направим датотеку заглавља „%s“."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Није откривен познат образац одреднице целовитости."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Не могу да користим „%s“ као заглавље на-диску."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Ово ће неповратно да препише податке на „%s“."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Нисам успео да подесим „pbkdf“ параметре."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Смањени померај података је допуштен само за откачена ЛУКС заглавља."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Не могу да одредим величину кључа за ЛУКС без утора кључа, користите „--key-size“ опцију."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Уређај је активиран али не могу да учиним заставице трајним."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Утор кључа „%d“ је изабран за брисање."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Ово је последњи утор кључа. Уређај ће постати неупотребљив након чишћења овог кључа."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Унесите неку преосталу пропусну реч: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Радња је прекинута, утор кључа НИЈЕ обрисан.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Унесите пропусну реч за брисање: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Унесите нову пропусну реч за утор кључа: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Унесите неку постојећу пропусну реч: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Унесите пропусну реч за мењање: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Унесите нову пропусну реч: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Унесите пропусну реч за утор кључа за претварање: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Подржан је само један аргумент уређаја за радњу „isLuks“."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1943,12 +1991,12 @@ msgstr ""
 "који омогућава приступ шифрованој партицији без лозинке.\n"
 "Овај избачај треба бити смештен шифрован на безбедном месту."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Утор кључа %d не садржи несвезани кључ."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1956,30 +2004,40 @@ msgstr ""
 "Избачај заглавља са кључем волумена је осетљив податак\n"
 "Овај избачај треба увек бити смештен шифрован на безбедном месту."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "„%s“ није назив активног „%s“ уређаја."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "„%s“ није назив активног ЛУКС уређаја или недостаје заглавље."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Захтевана је опција „--header-backup-file“."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "„%s“ није уређај управљан криптоподешавањем."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Освежавање није подржано за врсту уређаја „%s“"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Непозната врста уређаја метаподатака „%s“."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Наредба захтева уређај и мапирани назив као аргумент."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1988,95 +2046,95 @@ msgstr ""
 "Ова радња ће обрисати све уторе кључева на уређају „%s“.\n"
 "Уређај ће постати неупотребљив након ове радње."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Радња је прекинута, утори кључева НИСУ обрисани.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Неисправна ЛУКС врста, само „luks1“ и „luks2“ су подржане."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Уређај је већ „%s“ врсте."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Ова радња ће претворити „%s“ у „%s“ запис.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Радња је прекинута, уређај НИЈЕ претворен.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Недостаје опција „--priority“, „--label“ или „--subsystem“."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Скупина „%d“ није исправна."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Скупина „%d“ је у употреби."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Нисам успео да додам „luks2-keyring“ скупину „%d“."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Нисам успео да доделим скупину „%d“ утору кључа %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Скупина „%d“ није у употреби."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Нисам успео да увезем скупину из датотеке."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Нисам успео да добавим скупину „%d“ за извоз."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "„--key-description“ параметар је обавезан за радњу додавања скупине."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Радња захтева нарочиту скупину. Користите параметар „--token-id“."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Неисправна радња скупине „%s“."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Самооткривени активан дм уређај „%sд за уређај података „%s“.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Уређај „%s“ није блок уређај.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Нисам успео да самооткријем држаче „%s“ уређаја."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2089,233 +2147,242 @@ msgstr ""
 "То може довести до оштећења података ако је уређај заправо активиран.\n"
 "Да покренете поновно шифровање у режиму на мрежи, користите параметар „--active-name“.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Неисправна врста ЛУКС уређаја."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Шифровање без откаченог заглавља (--header) није могуће без смањења величине уређаја података (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Затражени померај података мора бити мањи или једнак половини параметра „--reduce-device-size“."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Подешавам „--reduce-device-size“ вредност на двоструко од „--offset“ %<PRIu64> (подеока).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Шифровање је подржано само за ЛУКС2 запис."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Откривен је ЛУКС уређај на „%s“. Да ли желите опет да шифрујете тај ЛУКС уређај?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Привремена датотека заглавља „%s“ већ постоји. Прекидам."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Не могу да направим привремену датотеку заглавља „%s“."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "„%s/%s“ је сада активно и спремно за шифровање на мрежи.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Нема довољно слободних утора кључева за поновно шифровање."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Датотека кључа може бити коришћена само са „--key-slot“ или са тачно једним активним утором кључа."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Унесите пропусну реч за утор кључа %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Унесите пропусну реч за утор кључа %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Пребацујем шифрера података на „%s“.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Наредба захтева уређај као аргумент."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "Само је ЛУКС2 запис тренутно подржан. Користите алат „cryptsetup-reencrypt“ за ЛУКС1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Старо ванмрежно поновно шифровање је већ у току. Користите помагало „cryptsetup-reencrypt“."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Поновно шифровање уређаја са профилом целовитости није подржано."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "ЛУКС2 поновно шифровање је већ покренуто. Прекидам радњу."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "ЛУКС2 уређај није у поновном шифровању."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<уређај> [--type <врста>] [<назив>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "отвара уређај као <назив>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<назив>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "затвара уређај (уклања мапирање)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "мења величину радног уређаја"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "показује стање уређаја"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <шифрер>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "шифрер оцењивања"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<уређај>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "покушава да поправи метаподатке на-диску"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "ЛУКС2 уређај поновног шифровања"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "брише све уторе кључева (уклања кључ шифровања)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "претвара ЛУКС из/у ЛУКС2 запис"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "поставља трајне опције подешавања за ЛУКС2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<уређај> [<нова датотека кључа>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "форматира ЛУКС уређај"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "додаје кључ у ЛУКС уређај"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<уређај> [<датотека кључа>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "уклања достављени кључ или датотеку кључа из ЛУКС уређаја"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "мења достављени кључ или датотеку кључа ЛУКС уређаја"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "претвара кључ у нове „pbkdf“ параметре"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<уређај> <утор кључа>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "брише кључ са бројем <утор кључа> са ЛУКС уређаја"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "исписује УЈИБ ЛУКС уређаја"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "испробава <уређај> за заглављем ЛУКС партиције"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "исписује податке ЛУКС партиције"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "исписује податке ТКРИПТ уређаја"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "исписује податке „BITLK“ уређаја"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Обуставља ЛУКС уређај и брише кључ (сви УИ су замрзнути)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Наставља са обустављеним ЛУКС уређајем"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Прави резерву заглавља „LUKS“ уређаја и утора кључева"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Враћа заглавље „LUKS“ уређаја и уторе кључева"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<додај|уклони|увези|извези> <уређај>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Управља ЛУКС2 скупинама"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2323,7 +2390,7 @@ msgstr ""
 "\n"
 "<радња> је једна од следећих:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2335,7 +2402,7 @@ msgstr ""
 "\tотварање: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tзатвори: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2350,7 +2417,7 @@ msgstr ""
 "<утор кључа> је број ЛУКС утора кључа за мењање\n"
 "<датотека кључа> изборна датотека кључа за нови кључ за радњу „luksAddKey“\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2359,7 +2426,7 @@ msgstr ""
 "\n"
 "Основни уграђени запис метаподатака је „%s“ (за „luksFormat“ радњу).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2376,7 +2443,7 @@ msgstr ""
 "Основни „PBKDF“ за ЛУКС2: %s\n"
 "\tВреме понављања: %d, Захтевана меморија: %dkB, Паралелне нити: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2391,444 +2458,451 @@ msgstr ""
 "\tобично: %s, Кључ: %d бита, Хеширање лозинке: %s\n"
 "\tЛУКС: %s, Кључ: %d бита, Хеширање ЛУКС заглавља: %s, РНГ: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tЛУКС: Основна величина кључа са „XTS“ режимом (два унутрашња кључа) биће удвостручена.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: захтева „%s“ као аргумент"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Приказује ову поруку помоћи"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Прикажите кратку поруку о коришћењу"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Исписује издање пакета"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Опције помоћи:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Приказује опширније поруке о грешкама"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Приказује поруке прочишћавања"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Приказује поруке прочишћавања укључујући „JSON“ метаподатке"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Шифрер коришћен за шифровање диска (видите „/proc/crypto“)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Хеш коришћен за стварање кључа шифровања из лозинке"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Проверава лозинку тражећи је два пута"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Чита кључ из датотеке"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Чита (главни) кључ вочумена из датотеке."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Даје (главни) кључ волумена уместо података утора кључева"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Величина кључа шифровања"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "БИТА"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Ограничава читање из датотеке кључа"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "бајта"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Број бајтова за прескакање у датотеци кључа"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Ограничава читање из новододате датотеке кључа"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Број бајтова за прескакање у новододатој датотеци кључа"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Број утора за нови кључ (основно је први слободан)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Величина уређаја"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "ОДЕЉЦИ"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Користи само наведену величину уређаја (занемарује остатак уређаја). ОВО ЈЕ ОПСАНО!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Почетни померај у позадинском уређају"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Број одељака шифрованих података за прескакање на почетку"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Прави мапирање само за читање"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Не тражи потврђивање"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Време за упит међудејствене лозинке (у секундама)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "секунде"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Напредак освежења реда (у секундама)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Колико често унос лозинке може бити покушан"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Поравнава утовар на границе <n> одељка — за „luksFormat“"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Датотека са резервом „LUKS“ заглавља и уторима кључева"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Користи „/dev/random“ за стварање кључа волумена"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Користи „/dev/urandom“ за стварање кључа волумена"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Дели уређај са другим не-преклапајућим подеоком шифрера"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "УЈИБ уређаја за коришћење"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Допушта одбацивања (тј. СКРАЋЕЊЕ) захтева за уређај"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Уређај или датотека са одвојеним ЛУКС заглављем"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Не покреће уређај, само проверава лозинку"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Користи скривено заглавље (скривени ТКРИПТ уређај)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Уређај је ТКРИПТ диск система (са подизачем система)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Користи резервно (другоразредно) ТКРИПТ заглавље"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Лични умножавач понављања за „VeraCrypt“ сагласан уређај"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Пропитује лични умножавач понављања за „VeraCrypt“ сагласан уређај"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Врста метаподатака уређаја: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Искључује проверу квалитета лозинке (ако је укључена)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Користи опцију сагласности перформансе „same_cpu_crypt“ дм-крипта"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Користи опцију сагласности перформансе „submit_from_crypt_cpus“ дм-крипта"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Заобилази радни ред „dm-crypt“ и захтев читања процеса истовремено"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Заобилази радни ред „dm-crypt“ и захтев писања процеса истовремено"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Уклањање уређаја је одложено све док га последњи корисник не затвори"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Користи опште закључавање за серијализацију меморије чврстог „PBKDF“ („OOM“ заобилазница)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Време „PBKDF“ понављања за ЛУКС (у милисекундама)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "милисекунде"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "„PBKDF“ алгоритам (за ЛУКС2): argon2i, argon2id, pbkdf2"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Ограничење трошка „PBKDF“ меморије"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "килобајта"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Трошак „PBKDF“ паралеле"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "нити"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Трошак „PBKDF“ понављања (присилно, искључује оцењивање)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Првенство утора кључа: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Искључује закључавање метаподатака на-диску"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Искључује учитавање кључева волумена путем привеска кернела"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Алгоритам целовитости података (само ЛУКС2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Искључује журнал за уређај целовитости"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Не брише уређај након форматирања"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Користи неделотворно застарело допуњавање (стари кернели)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Не тражи пропусну реч ако активација скупином не успе"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Број скупине (основно: било који)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Опис кључа"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Величина одељка шифровања (основно: 512 бајта)"
 
-#: src/cryptsetup.c:3548
-#, fuzzy
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
-msgstr "Ð\92елиÑ\87ина Ð¾Ð´ÐµÑ\99ка Ñ\88иÑ\84Ñ\80оваÑ\9aа (оÑ\81новно: 512 бајта)"
+msgstr "УпоÑ\82Ñ\80еба IV Ñ\98е Ñ\83бÑ\80оÑ\98ано Ñ\83 Ð²ÐµÐ»Ð¸Ñ\87инÑ\83 Ð¾Ð´ÐµÑ\99ка (не Ñ\83 512 бајта)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Поставља трајним заставице активирања за уређај"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Поставља натпис за ЛУКС2 уређај"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Поставља натпис подсистема за ЛУКС2 уређај"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Ствара или избацује неувезане (не додељене подеоке података) ЛУКС2 уторе кључа"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Чита или записује „json“ из или у датотеку"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Величина области метаподатака ЛУКС2 заглавља"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Величина области утора кључева ЛУКС2 заглавља"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Освежава (поново активира) уређај са новим параметрима"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "ЛУКС2 утор кључа: Величина кључа шифровања"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "ЛУКС2 утор кључа: Шифрер коришћен за шифровање исека кључа"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Шифрује ЛУКС2 уређај (у месту шифровање)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Дешифрује ЛУКС2 уређај (уклања шифровање)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Покреће ЛУКС2 поновно шифровање само у метаподацима."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Наставља само са започетим ЛУКС2 поновним шифровањем."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Смањује величину уређаја података (премешта померај података). ОВО ЈЕ ОПАСНО!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Највећа величина вруће зоне поновног шифровања."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Врста гипкости вруће зоне поновног шифровања (checksum,journal,none)"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Хеш суме првере вруће зоне поновног шифровања"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Заобилази самооткривање уређаја дм уређаја за поновно шифровање"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[ОПЦИЈА...] <радња> <посебност-радње>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Недостаје аргумент <радња>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Непозната радња."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Опције „--refresh“ и „--test-passphrase“ се узајамно искључују."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Опција „--deferred“ је допуштена само за наредбу затварања."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Опција „--shared“ је допуштена само за отварање обичног уређаја."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Опција „--persistent“ је допуштена само за радњу отварања."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Опција „--serialize-memory-hard-pbkdf“ је допуштена само за радњу отварања."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Опција „--persistent“ није допуштена са опцијом „--test-passphrase“."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2836,260 +2910,259 @@ msgstr ""
 "Опција „--key-size“ је допуштена само за „luksFormat“, „luksAddKey“, отварање\n"
 "и оцењивање. Да ограничите читање из датотеке кључа користите „--keyfile-size=(бајтова)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Опција „--integrity“ је допуштена само за „luksFormat“ (ЛУКС2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Опција „--integrity-no-wipe“ се може користити само за радњу форматирања са проширењем целовитости."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Опције „--label“ и „--subsystem“ су допуштене само за „luksFormat“ и „config LUKS2“."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Опција „--test-passphrase“ је допуштена само за отварање ЛУКС, „TCRYPT“ и „BITLK“ уређаја."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Величина кључа мора бити умножак од 8 бита"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Утор кључа није исправан."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Опција „--key-file“ има првенство над наведеним аргументом датотеке кључа."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Негативан број за опцију није допуштен."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Дозвољен је само један аргумент „--key-file“."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Дозвољена је само једна опција „--use-[u]random“."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Опција „--use-[u]random“ је допуштена само за „luksFormat“."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Опција „--uuid“ је допуштена само за „luksFormat“ и „luksUUID“."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Опције „--luks2-metadata-size“ и „--opt-luks2-keyslots-size“ су допуштене само за „luksFormat“ са ЛУКС-ом2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Неисправна одредба величине ЛУКС2 метаподатака."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Неисправна одредба величине ЛУКС2 утора кључева."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Опције „--align-payload“ и „--offset“ се не могу комбиновати."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Опција „--skip“ је подржана само за отварање обичних и упетљаних уређаја."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Опција „--offset“ је подржана само за отварање обичних и упетљаних уређаја, „luksFormat“ и поновно шифровање уређаја."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Опција „--tcrypt-hidden“, „--tcrypt-system“ или „--tcrypt-backup“ је подржана само за ТКРИПТ уређај."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Опција „--tcrypt-hidden“ не може бити обједињена са „--allow-discards“."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Достављен је неисправан аргумент за параметар „--veracrypt-pim“."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Опција „--veracrypt-pim“ је подржана само за „VeraCrypt“ сагласне уређаје."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Опција „--veracrypt-query-pim“ је подржана само за „VeraCrypt“ сагласне уређаје."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Опције „--veracrypt-pim“ и „--veracrypt-query-pim“ се узајамно искључују."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Опција „--priority“ може бити само „ignore/normal/prefer“."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Одредба утора кључа је потребна."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Функција произилажења кључа заснованог на пропусној речи (PBKDF) може бити само „pbkdf2“ или „argon2i/argon2id“."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "„PBKDF“ присиљена понављања се не могу комбиновати са опцијом времена понављања."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "Опција величине сектора није подржана за ову наредбу."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
-msgstr ""
+msgstr "Опција великих IV одељака је подржана само за отварање обичних уређаја са величином одељка већом од 512 бајта."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "Величина кључа је потребна са опцијом „--unbound“."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Опција „--unbound“ се може користити само са радњама „luksAddKey“ и „luksDump“."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Опција „--refresh“ се може користити само са радњом отварања."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Не могу да искључим закључавање метаподатака."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Неисправна одредба највеће величине вруће зоне поновног шифровања."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Неисправна одредба величине уређаја."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Највећа величина смањења уређаја је 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Величина смањивања мора бити умножак одељка од 512 бајта."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Неисправна одредба величине података."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Прекорачење величине смањења."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "ЛУКС2 дешифровање захтева опцију „--header“."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Величина уређаја мора бити умножак одељка од 512 бајта."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Опције „--reduce-device-size“ и „--data-size“ се не могу комбиновати."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Опције „--device-size“ и „--size“ се не могу комбиновати."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Опције „--ignore-corruption“ и „--restart-on-corruption“ се не могу користити заједно."
+msgstr "Опције „--keyslot-cipher“ и „--keyslot-key-size“ се морају користити заједно."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Наведена је неисправна ниска присолка."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Не могу да направим хеш слику „%s“ ради уписа."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Не могу да направим „FEC“ слику „%s“ ради уписа."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Наведена је неисправна ниска хеша корена."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Неисправна датотека потписа „%s“."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Не могу да прочитам датотеку потписа „%s“."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<уређај_података> <уређај_хеша>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "форматира уређај"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<уређај_података> <уређај_хеша> <хеш_корена>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "проверава уређај"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<уређај_података> <назив> <уређај_хеша> <хеш_корена>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "показује стање радног уређаја"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<уређај_хеша>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "приказује податке на-диску"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3104,7 +3177,7 @@ msgstr ""
 "<уређај_хеша> јесте уређај који садржи податке проверавања\n"
 "<хеш_корена> хеш кореног чвора на <уређају_хеша>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3115,126 +3188,139 @@ msgstr ""
 "Основни преведени параметри дм-тачности:\n"
 "\tХеш: %s, Блок података (бајта): %u, Блок хеша (бајта): %u, Величина присолка: %u, Запис хеша: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Не користи суперблок тачности"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Врста записа (1 — обично, 0 — изворни Хром ОС)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "број"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Величина блока на уређају података"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Величина блока на уређају хеша"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Бајтови „FEC“ парности"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Број блокова у датотеци података"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "блокови"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Путања до уређаја са подацима исправке грешке"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "путања"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Почетни померај на уређају хеша"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Почетни померај на „FEC“ уређају"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Алгоритам хеша"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "ниска"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Присолак"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "ниска хеша"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Путања до датотеке потписа хеша корена"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Поново покреће језгро ако је откривено оштећење"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Успаничи језгро ако је откривено оштећење"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Занемарује оштећење, само га бележи у дневник"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Не проверава нулиране блокове"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Проверава блок података само приликом првог читања"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Опције „--ignore-corruption“, „--restart-on-corruption“ или „--ignore-zero-blocks“ су дозвољене само за радње отварања."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Опција „--root-hash-signature“ се може користити само за радњу отварања."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Опције „--ignore-corruption“ и „--restart-on-corruption“ се не могу користити заједно."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Опције „--panic-on-corruption“ и „--restart-on-corruption“ се не могу користити заједно."
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Неисправна величина кључа."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Не могу да прочитам датотеку кључа „%s“."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Не могу да прочитам %d бајта из датотеке кључа „%s“."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Форматирано ознаком величине %u, унутрашња целовитост „%s“.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<уређај_целовитости>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<уређај_целовитости> <назив>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3245,403 +3331,408 @@ msgstr ""
 "<назив> јесте уређај за стварање под „%s“\n"
 "<уређај_целовитости> јесте уређај који садржи податке са ознакама целовитости\n"
 
-#: src/integritysetup.c:507
-#, c-format
+#: src/integritysetup.c:520
+#, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Основни уграђени параметри дм-целовитости:\n"
 "\tАлгоритам провере суме: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Путања до уређаја података (ако је одвојен)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Величина журнала"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Подеоци преплетања"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Жиг журнала"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "проценат"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Време предаје журнала"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Број 512-битних подеока по биту (режим битмапе)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Време испирања режима битмапе"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Величина ознаке (по подеоку)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Величина сектора"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Величина међумеморија"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Алгоритам целовитости података"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Величина кључа целовитости података"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Чита кључ целовитости из датотеке"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Алгоритам целовитости журнала"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Величина кључа целовитости журнала"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Чита кључ целовитости журнала из датотеке"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Алгоритам шифровања журнала"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Величина кључа шифровања журнала"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Чита кључ шифровања журнала из датотеке"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Режим опоравка (без журнала, без провере ознаке)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Користи битмапу да прати измене и да искључи журнал за уређај целовитости"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Аутоматски поново израчунава почетне ознаке."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Не штити суперблок са „HMAC“-ом (стари кернели)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Допушта поновно израчунавање волумена са „HMAC“ кључевима (стари кернели)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Опција „--integrity-recalculate“ се може користити само за радњу отварања."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Опције „--journal-size“, „--interleave-sectors“, „--sector-size“, „--tag-size“ и „--no-wipe“ се могу користити само за радњу форматирања."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Неисправна одредба величине журнала."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Мора бити наведена и опција датотеке кључа и опција величине кључа."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Алгоритам целовитости мора бити наведен ако се користи кључ целовитости."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Мора бити наведена и опција датотеке кључа целовитости журнала и опција величине кључа."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Алгоритам целовитости журнала мора бити наведен ако се користи кључ целовитости журнала."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Мора бити наведена и опција датотеке кључа шифровања журнала и опција величине кључа."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Алгоритам шифровања журнала мора бити наведен ако се користи кључ шифровања журнала."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Опције режима опоравка и битмапе се узајамно искључују."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Опције журнала се не могу користити у режиму битмапе."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Опције битмапе се могу користити само у режиму битмапе."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Поновно шифровање је већ у току."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Не могу изричито да отворим „%s“, уређај је у употреби."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Додела поређане меморије није успела."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Не могу да читам уређај „%s“."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Означавам ЛУКС1 уређај „%s“ неупотребљивим."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Постављам заставицу ЛУКС2 ванмрежног поновног шифровања на уређају „%s“."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Не могу да пишем на уређају „%s“."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Не могу да запишем датотеку дневника поновног шифровања."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Не могу да прочитам датотеку дневника поновног шифровања."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Датотека дневника „%s“ постоји, настављам поновно шифровање.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Покрећем привремени уређај користећи старо ЛУКС заглавље."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Покрећем привремени уређај користећи ново ЛУКС заглавље."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Покретање привременог уређаја није успело."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Нисам успео да поставим померај података."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Нисам успео да поставим величину метаподатака."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Направљено је ново ЛУКС заглавље за уређај „%s“."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Ово издање „cryptsetup-reencrypt“ не може да ради са новом унутрашњом врстом скупине „%s“."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Нисам успео да прочитам заставице активирања из заглавља резерве."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Нисам успео да упишем заставице активирања у ново заглавље."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Нисам успео да прочитам потрепштине из заглавља резерве."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Направљена је резерва „%s“ заглавља за уређај „%s“."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Није успело прављење резерве ЛУКС заглавља."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Не могу да повратим „%s“ заглавље на уређају „%s“."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Повраћено је „%s“ заглавље на уређају „%s“."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Не могу да отворим привремени ЛУКС уређај."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Не могу да добавим величину уређаја."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "УИ грешка за време поновног шифровања."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Достављени УУИД није исправан."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Не могу да отворим датотеку дневника поновног шифровања."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Нема описа у напретку, достављени УУИД се може користити само за настављање заустављеног процеса дешифровања."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Измењени су „pbkdf“ параметри у утору кључа %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Величина блока поновног шифровања"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Не мења кључ, нема поновног шифровања области података"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Чита (главни) кључ волумена из датотеке"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Време ПБКДФ2 понављања за ЛУКС (у милисекундама)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Користи непосредни-уи приликом приступа уређајима"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Користи ф-усаглашавање након сваког блока"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Освежава датотеку дневника након сваког блока"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Користи само овај утор (остали ће бити искључени)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Прави ново заглавље на нешифрованом уређају"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Трајно дешифрује уређај (уклања шифровање)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "УЈИБ коришћен за настављање дешифровања"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Врста ЛУКС метаподатака: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[ОПЦИЈА...] <уређај>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Поновно шифровање ће изменити: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "кључ волумена"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "поставља хеш на "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", поставља шифрера на "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Потребан је аргумент."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Само вредности између 1 MiB и 64 MiB су допуштене завеличину блока поновног шифровања."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Највећа величина смањења уређаја је 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Опција „--new“ се мора користити са „--reduce-device-size“ или „--header“."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Опција „--keep-key“ може да се користи само са „--hash“, „--iter-time“ или „--pbkdf-force-iterations“."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Опција „--new“ не може да се користи са „--decrypt“."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Опција „--decrypt“ није сагласна са наведеним параметрима."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Опција „--uuid“ је дозвољена само заједно са „--decrypt“."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Неисправна лукс врста. Користите: „luks“, „luks1“ или „luks2“."
 
@@ -3682,32 +3773,32 @@ msgstr "непозната грешка"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Наредба није успела са кодом %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Утор кључа „%i“ је направљен."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Утор кључа „%i“ је откључан."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Утор кључа „%i“ је уклоњен."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Скупина „%i“ је направљена."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Скупина „%i“ је уклоњена."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3715,55 +3806,55 @@ msgstr ""
 "\n"
 "Брисање је прекинуто."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "УПОЗОРЕЊЕ: Уређај „%s“ већ садржи „%s“ потпис партиције.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "УПОЗОРЕЊЕ: Уређај „%s“ већ садржи „%s“ потпис суперблока.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Нисам успео да покренем пробе потписа уређаја."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Нисам успео да добавим податке уређаја „%s“."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Уређај „%s“ је у употреби. Не могу да наставим са радњом форматирања."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Нисам успео да отворим датотеку „%s“ у режиму читања/писања."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Постојећи „%s“ потпис партиције (померај: %<PRIi64> бајта) на уређају „%s“ биће обрисан."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Постојећи „%s“ потпис суперблока (померај: %<PRIi64> бајта) на уређају „%s“ биће обрисан."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Нисам успео да обришем потпис уређаја."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Нисам успео да испробам уређај „%s“ за потписом."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3771,7 +3862,7 @@ msgstr ""
 "\n"
 "Поновно шифровање је прекинуто."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Не могу да проверим квалитет лозинке: %s"
@@ -3790,46 +3881,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Провера квалитета лозинке није успела: Лоша шифра (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Грешка читања пропусне речи из терминала."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Провери пропусну реч: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Пропусне речи се не подударају."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Не могу да користим померај са улазом терминала."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Унесите пропусну реч: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Унесите пропусну реч за „%s“: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Нема доступног кључа са овом пропусном речју."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Нема доступног употребљивог утора кључа."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Не могу да отворим датотеку кључа „%s“ за упис."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Не могу да пишем у датотеку кључа „%s“."
@@ -3872,6 +3963,28 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Нисам успео да упишем „JSON“ датотеку."
 
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Нисам успео да искључим заставицу захтева поновног шифровања."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Изгледа да уређај не захтева опоравак поновног шифровања.\n"
+#~ "Да ли желите да наставите?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "УПОЗОРЕЊЕ: Директоријум закључавања „%s/%s“ недостаје!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Неисправни параметри величине за уређај тачности."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Алгоритам целовитости мора бити наведен ако се користи кључ целовитости."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Погрешна величина кључа."
+
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands."
 #~ msgstr "Параметар „--refresh“ је дозвољен само са наредбама „open“ или „refresh“."
 
index 9622337..7131a79 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 38a3e4e..dcfc61a 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,81 +1,80 @@
 # Swedish translation for cryptsetup.
-# Copyright © 2009 - 2017 Free Software Foundation, Inc.
+# Copyright © 2009 - 2020 Free Software Foundation, Inc.
 # This file is distributed under the same license as the cryptsetup package.
 # Daniel Nylander <po@danielnylander.se>, 2009.
-# Josef Andersson <l10nl18nsweja@gmail.com>, 2016, 2017, 2019.
+# Josef Andersson <l10nl18nsweja@gmail.com>, 2016, 2017, 2019, 2020, 2021
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.1.0\n"
+"Project-Id-Version: cryptsetup 2.3.4-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2019-05-17 16:51+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-01-04 22:51+0100\n"
 "Last-Translator: Josef Andersson <l10nl18nsweja@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.2.1\n"
+"X-Generator: Poedit 2.3\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Det går inte att initiera device-mapper, kör som icke-root-användare."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Det går inte att initiera device-mapper. Är kärnmodulen dm_mod inläst?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Begärd flagga deferred stöds inte."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID för enheten %s förkortades."
 
-#: lib/libdevmapper.c:1520
-#, fuzzy
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
-msgstr "Okänd PBKDF-typ %s."
+msgstr "Okänd måltyp dm."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Begärd flagga för dm-crypt-prestanda stöds inte."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Begärd flagga för dm-verity-dataintegritet stöds inte."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Begärd flagga dm-verity FEC stöds inte."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Begärd flagga för dataintegritet stöds inte."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Begärd flagga sector_size stöds inte."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Begärd automatisk beräkning av integritetstaggar stöds inte."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Discard/TRIM stöds inte."
 
-#: lib/libdevmapper.c:1653
-#, fuzzy
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
-msgstr "Begärd flagga för dataintegritet stöds inte."
+msgstr "Begärt dm-integrity bitmap-läge stöds inte."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Misslyckades med att läsa dm-%s-segment."
@@ -117,7 +116,7 @@ msgstr "Det går inte att initiera RNG-krypteringsbakände."
 msgid "Cannot initialize crypto backend."
 msgstr "Det går inte att initiera krypteringsbakände."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Hashalgoritmen %s stöds inte."
@@ -131,7 +130,7 @@ msgstr "Fel vid nyckelbearbetning (använder hash %s)."
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Det går inte att avgöra enhetstyp. Inkompatibel aktivering av enhet?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Denna åtgärd stöds endast av LUKS-enheter."
 
@@ -139,7 +138,7 @@ msgstr "Denna åtgärd stöds endast av LUKS-enheter."
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Denna åtgärd stöds endast av LUKS2-enheter."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Alla nyckelplatser är upptagna."
 
@@ -153,36 +152,31 @@ msgstr "Nyckelplats %d är ogiltig. Välj mellan 0 och %d."
 msgid "Key slot %d is full, please select another one."
 msgstr "Nyckelplats %d är full. Välj en annan."
 
-#: lib/setup.c:525 lib/setup.c:2824
-#, fuzzy
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
-msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek."
+msgstr "Storlek på enhet är inte justerad till enhetens logiska blockstorlek."
 
 #: lib/setup.c:624
 #, c-format
 msgid "Header detected but device %s is too small."
 msgstr "Huvud identifierat men enheten %s är för liten."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Denna åtgärd stöds inte för denna enhetstyp."
 
 #: lib/setup.c:666
-#, fuzzy
 msgid "Illegal operation with reencryption in-progress."
-msgstr "Frånkopplad kryptering pågår. Avbryter."
+msgstr "Ogiltig åtgärd under pågående omkryptering."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "LUKS-versionen %d stöds inte."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Frånkopplad metadataenhet stöds ej av denna crypt-typ."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Enheten %s är inte aktiv."
@@ -196,7 +190,7 @@ msgstr "Underliggande enhet för krypteringsenhet %s försvann."
 msgid "Invalid plain crypt parameters."
 msgstr "Ogiltiga parametrar för vanlig kryptering."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Ogiltig nyckelstorlek."
 
@@ -204,12 +198,16 @@ msgstr "Ogiltig nyckelstorlek."
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID stöds inte för denna krypteringstyp."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Frånkopplad metadataenhet stöds ej av denna crypt-typ."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Stöder inte sektorstorleken för kryptering."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek."
 
@@ -246,15 +244,15 @@ msgstr "Chiffret %s-%s (nyckelstorlek %zd bitar) är inte tillgängligt."
 #: lib/setup.c:1854
 #, c-format
 msgid "WARNING: LUKS2 metadata size changed to %<PRIu64> bytes.\n"
-msgstr ""
+msgstr "VARNING: storlek på LUKS2-metadata ändrades till %<PRIu64> byte.\n"
 
 #: lib/setup.c:1858
 #, c-format
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
-msgstr ""
+msgstr "VARNING: storlek på LUKS2-nyckelplatsområde ändrades till %<PRIu64> byte.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Enheten %s är för liten."
@@ -287,16 +285,16 @@ msgstr "Kan inte formatera LOOPAES utan enhet."
 msgid "Can't format VERITY without device."
 msgstr "Det går inte att formatera VERITY utan enhet."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "VERITY-hashtyp %d stöds inte."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "VERITY-blockstorlek som inte stöds."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "VERITY-hashoffset som inte stöds."
 
@@ -319,252 +317,245 @@ msgstr "Dataområde spiller över på FEC-mrådet."
 #: lib/setup.c:2208
 #, c-format
 msgid "WARNING: Requested tag size %d bytes differs from %s size output (%d bytes).\n"
-msgstr ""
+msgstr "VARNING: Begärd taggstorlek på %d byte skiljer sig från %s utdatastorlek (%d byte).\n"
 
 #: lib/setup.c:2286
 #, c-format
 msgid "Unknown crypt device type %s requested."
 msgstr "Okänd typ av krypteringsenhet %s begärd."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Parametrar som inte stöds på enheten %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Kan inte rensa huvudet på enheten %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
-msgstr ""
+msgstr "Krypteringsenheter har matchningsfel."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
-#, fuzzy, c-format
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
+#, c-format
 msgid "Failed to reload device %s."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att läsa om enhet %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
-#, fuzzy, c-format
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
+#, c-format
 msgid "Failed to suspend device %s."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att försätta enhet %s i vänteläge."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
-#, fuzzy, c-format
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
+#, c-format
 msgid "Failed to resume device %s."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att återuppta enhet %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
-msgstr ""
+msgstr "Ödesdigert fel vid omläsning av enhet %s (ovanpå enhet %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
-#, fuzzy, c-format
+#: lib/setup.c:2738 lib/setup.c:2740
+#, c-format
 msgid "Failed to switch device %s to dm-error."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att växla enhet %s till dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Det går inte att ändra storlek på loop-enhet."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Vill du verkligen ändra UUID för en enhet?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Säkerhetskopian för huvud innehåller inte något giltigt LUKS-huvud."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Volymen %s är inte aktiv."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Volymen %s är redan i vänteläge."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Vänteläge stöds inte för enhet %s."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Fel då enheten %s försattes i vänteläge."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Volymen %s är inte i vänteläge."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Att återuppta stöds inte för enhet %s."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Fel då enheten %s återupptogs."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Volymen %s är inte i vänteläge."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Volymnyckeln stämmer inte överens med volymen."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Det går inte att lägga till nyckelplats. Alla platser är inaktiverade och ingen volymnyckel har angivits."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Misslyckades med att byta ny nyckelplats."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Nyckelplats %d är ogiltig."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Nyckelplats %d är inte aktiv."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Dataområde spiller över på hashområdet."
 
-#: lib/setup.c:3981
-#, fuzzy
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
-msgstr "Omkryptering pågår redan."
+msgstr "Omkryptering pågår. Det går inte att aktivera enheten."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
-#, fuzzy
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
-msgstr "Misslyckades med att erhålla skrivlås för enhet."
+msgstr "Misslyckades med att erhålla omkrypteringslås."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
-#, fuzzy
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
-msgstr "Stöder inte sektorstorleken för kryptering."
+msgstr "Misslyckades med återhämtning av LUKS2-omkryptering."
 
-#: lib/setup.c:4127 lib/setup.c:4379
-#, fuzzy
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Enhetstypen är inte korrekt initierad."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Det går inte att använda enheten %s som fortfarande används eller har ett ogiltigt namn."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Enheten %s finns redan."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Det går inte att använda enheten %s som fortfarande används eller har ett ogiltigt namn."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Felaktig volymnyckel för vanlig enhet."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Felaktig rothash angiven för verity-enhet."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
-msgstr ""
+msgstr "Root-hashsignatur krävs."
 
-#: lib/setup.c:4421
-#, fuzzy
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
-msgstr "Kärnans nyckelring stöds inte av kärnan."
+msgstr "Kärnans nyckelring saknas: krävs för att skicka signatur till kärnan."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Misslyckades med att öppna nyckelringen för kärnan."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Enheten %s används fortfarande."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Ogiltig enhet %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Buffert för volymnyckelen är för liten."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Kan inte hämta volymnyckel för vanlig enhet."
 
-#: lib/setup.c:4657
-#, fuzzy
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
-msgstr "Felaktig rothash angiven för verity-enhet."
+msgstr "Det går inte att hämta root-hash för verity-enhet."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Denna åtgärd stöds inte för krypteringsenheter av typen %s."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Utskriftsåtgärden stöds inte för denna enhetstyp."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
-msgstr ""
+msgstr "Dataförskjutning är inte en multipel av %u byte."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Det går inte konvertera enheten %s som fortfarande används."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Misslyckades med att tilldela nyckelplats %u som ny volymnyckel."
 
-#: lib/setup.c:5845
-#, fuzzy
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
-msgstr "Misslyckades med att sätta standardnyckelplats för LUKS2-parametrar."
+msgstr "Misslyckades med att initiera standardnyckelplats för LUKS2-parametrar."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Misslyckades med att tilldela nyckelplats %d till kontrollsummor."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Kärnans nyckelring stöds inte av kärnan."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Misslyckades med att läsa lösenfras från nyckelringsnyckel (fel %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
-msgstr ""
+msgstr "Misslyckades med att inhämta globalt minneshårt serialiseringslås."
 
 #: lib/utils.c:80
 msgid "Cannot get process priority."
@@ -590,8 +581,8 @@ msgstr "Misslyckades med att ta stat på nyckelfilen."
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Det går inte att söka till begärd nyckelfilsoffset."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Slut på minne vid läsning av lösenfras."
 
@@ -611,51 +602,56 @@ msgstr "Högsta nyckelfilsstorlek överskriden."
 msgid "Cannot read requested amount of data."
 msgstr "Det går inte läsa begärd mängd data."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
-#, fuzzy, c-format
+#, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Enheten %s finns inte eller åtkomst nekas."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Enheten %s är inte aktiv."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Ignorerar falsk optimal-io-storlek för dataenheten (%u byte)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Enhet %s är för liten. Behöver minst %<PRIu64> byte."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Det går inte att använda enheten %s som redan används (redan mappad eller monterad)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Det går inte att använda enhet %s, behörighet nekad."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Kan inte hämta information om enheten %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Kan inte använda en loopback-enhet, kör som icke-root-användare."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Misslyckades med att fästa loopback-enhet (kräver loop-enhet med flaggan autoclear)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Begärd offset är bortom faktiska enhetsstorleken för %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Enheten %s har noll storlek."
@@ -707,7 +703,7 @@ msgstr "Begärda parallella trådar för PBKDF kan inte vara noll."
 
 #: lib/utils_pbkdf.c:184
 msgid "Only PBKDF2 is supported in FIPS mode."
-msgstr ""
+msgstr "Stöder endast PBKDF2 i FIPS-läge."
 
 #: lib/utils_benchmark.c:172
 msgid "PBKDF benchmark disabled but iterations not set."
@@ -729,23 +725,23 @@ msgstr "Låsningen avbruten. Låsningsökvägen %s/%s oanvändbar (inte en katal
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "VARNING:Låskatalog %s/%s saknas!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr ""
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Låsningen avbruten. Låsningsökvägen %s/%s oanvändbar (%s är inte en katalog)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Det går inte att söka till enhetsoffset."
 
 #: lib/utils_wipe.c:208
 #, c-format
 msgid "Device wipe error, offset %<PRIu64>."
-msgstr ""
+msgstr "Fel vid radering av enhet, förskjutning %<PRIu64>."
 
 #: lib/luks1/keyencryption.c:39
 #, c-format
@@ -765,8 +761,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Chifferspecifikation ska vara i formatet [chiffer] - [läge] - [iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Kan inte skriva till enhet %s, behörighet nekad."
@@ -785,12 +781,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "In-/utfel vid kryptering av nyckelplats."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Det går inte att öppna enheten %s."
@@ -811,44 +807,43 @@ msgstr "Enhet %s är för liten. (LUKS1 kräver minst %<PRIu64> byte.)"
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS-nyckelplats %u är ogiltig."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Enheten %s är inte en giltig LUKS-enhet."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Begärd säkerhetskopia %s av huvud finns redan."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Det går inte att skapa säkerhetskopia för huvud %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Det går inte skriva säkerhetskopia för huvud %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
-#, fuzzy
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Säkerhetskopian innehåller inte något giltigt LUKS-huvud."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Det går inte att öppna säkerhetskopia för huvud %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Det går inte att läsa säkerhetskopia för huvud %s."
@@ -870,7 +865,7 @@ msgstr "innehåller inget LUKS-huvud. Ersättning av huvud kan förstöra data p
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "innehåller redan LUKS-huvud. Ersättningen av huvud kommer att förstöra befintliga nyckelplatser."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -882,101 +877,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Ej standardstorlek på nyckel, manuell reparation krävs."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Ej standardjustering på nyckelplatser, manuell reparation krävs."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Reparerar nyckelplatser."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Nyckelplats %i: reparerad offset (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Nyckelplats %i: reparerade remsor (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Nyckelplats %i: fejkpartitionssignatur."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Nyckelplats %i: salt borttaget."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Skriver LUKS-huvud till disk."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Reparation misslyckades."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Begärd LUKS-hash %s stöds inte."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "Inga kända problem identifierade för LUKS-huvud."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Fel vid uppdatering av LUKS-huvud på enheten %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Fel vid omläsning av LUKS-huvud efter uppdatering på enheten %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Data-offset för fristående LUKS-huvud måste vara antingen 0 eller större än huvudstorleken."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Felaktigt LUKS-UUID-format angavs."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Kan inte skapa LUKS-huvud: läsning av slumpmässigt salt misslyckades."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Kan inte skapa LUKS-huvud: kontrollsumma för huvud misslyckades (använder hashen %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Nyckelplats %d är aktiv, rensa först."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Nyckelplats %d material inkluderar för få remsor. Har huvudet manipulerats?"
 
-#: lib/luks1/keymanage.c:990
-#, fuzzy, c-format
+#: lib/luks1/keymanage.c:1002
+#, c-format
 msgid "Cannot open keyslot (using hash %s)."
-msgstr "Fel vid nyckelbearbetning (använder hash %s)."
+msgstr "Det går inte att öppna nyckeplats (använder hash %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Nyckelplats %d är ogiltig. Välj en nyckelplats mellan 0 och %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Kan inte rensa enheten %s."
@@ -994,7 +989,6 @@ msgid "Incompatible loop-AES keyfile detected."
 msgstr "Identifierade inkompatibel loop-AES-nyckelfil."
 
 #: lib/loopaes/loopaes.c:245
-#, fuzzy
 msgid "Kernel does not support loop-AES compatible mapping."
 msgstr "Kärnan stöder inte loop-AES-kompatibel mappning."
 
@@ -1004,20 +998,20 @@ msgid "Error reading keyfile %s."
 msgstr "Fel vid läsning av nyckelfil %s."
 
 #: lib/tcrypt/tcrypt.c:554
-#, fuzzy, c-format
+#, c-format
 msgid "Maximum TCRYPT passphrase length (%zu) exceeded."
-msgstr "Högsta TCRYPT-lösenfraslängd (%d) överskriden."
+msgstr "Högsta TCRYPT-lösenfraslängd (%zu) överskriden."
 
 #: lib/tcrypt/tcrypt.c:595
 #, c-format
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2-hashalgoritm %s ej tillgänglig, hoppar över."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Begärt kryptogränssnitt för kärnan inte tillgängligt."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Försäkra dig om att kärnmodulen algif_skcipher är inläst."
 
@@ -1027,171 +1021,177 @@ msgid "Activation is not supported for %d sector size."
 msgstr "Aktivering stöds inte för sektorstorlek %d."
 
 #: lib/tcrypt/tcrypt.c:759
-#, fuzzy
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Kärnan stöder inte aktivering för detta föråldrade TCRYPT-läge."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Aktiverar TCRYPT-systemkryptering för partition %s."
 
-#: lib/tcrypt/tcrypt.c:871
-#, fuzzy
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Kärnan stöder inte TCRYPT-kompatibel mappning."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Denna funktion stöds inte utan inläsning av TCRYPT-huvud."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
-msgstr ""
+msgstr "Oväntad metadatapost av typ ”%u” funnen vid tolkning av volymhuvudnyckel."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
-msgstr ""
+msgstr "Ogiltig sträng funnen vid tolkning av volymhuvudnyckel."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
-msgstr ""
+msgstr "Oväntad sträng (”%s”) funnen vid tolkning av volymhuvudnycklar som stöds."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
-msgstr ""
+msgstr "Oväntad metadatapostvärde av typ ”%u” funnen vid tolkning av volymhuvudnycklar som stöds."
 
-#: lib/bitlk/bitlk.c:479
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:502
+#, c-format
 msgid "Failed to read BITLK signature from %s."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgstr "Misslyckades med att läsa BITLK-signatur från %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Ogiltig eller okänd signatur för BITLK-enhet."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
-msgstr ""
+msgstr "BITLK version 1 stöds ej för närvarande."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
-msgstr ""
+msgstr "Ogiltig eller okänd boot-signatur för BITLK-enhet."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr ""
-
-#: lib/bitlk/bitlk.c:510
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:538
+#, c-format
 msgid "Unsupported sector size %<PRIu16>."
-msgstr "Stöder inte sektorstorleken för kryptering."
+msgstr "Stöder inte sektorstorleken %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:546
+#, c-format
 msgid "Failed to read BITLK header from %s."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgstr "Misslyckades med att läsa BITLK-huvud från %s."
 
-#: lib/bitlk/bitlk.c:543
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:571
+#, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgstr "Misslyckades med att läsa BITLK FVE-metadata från %s."
 
-#: lib/bitlk/bitlk.c:594
-#, fuzzy
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
-msgstr "Stöder inte sektorstorleken för kryptering."
+msgstr "Krypteringstypen är okänd eller stöds ej."
 
-#: lib/bitlk/bitlk.c:627
-#, fuzzy, c-format
+#: lib/bitlk/bitlk.c:655
+#, c-format
 msgid "Failed to read BITLK metadata entries from %s."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgstr "Misslyckades med att läsa BITLK -metadataposter från %s."
+
+#: lib/bitlk/bitlk.c:897
+#, fuzzy, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Oväntad metadatapost av typ ”%u” funnen vid tolkning av volymhuvudnyckel."
+
+#: lib/bitlk/bitlk.c:912
+#, fuzzy, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Oväntad metadatapostvärde av typ ”%u” funnen vid tolkning av volymhuvudnycklar som stöds."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:980
 #, fuzzy
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Oväntad metadatapost av typ ”%u” funnen vid tolkning av volymhuvudnyckel."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
-msgstr "Denna åtgärd stöds inte för krypteringsenheter av typen %s."
+msgstr "Denna åtgärd stöds ej."
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Ogiltig nyckelstorlek."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Oväntad nyckeldatastorlek."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
-msgstr ""
+msgstr "Denna BITLK-enhet är i tillstånd som inte stöds och kan inte aktiveras."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
-msgstr ""
+msgstr "Det går inte att aktivera BITLK-enheter av typen ”%s”."
 
-#: lib/bitlk/bitlk.c:1069
-#, fuzzy
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
-msgstr "Aktivering av temporära enheter misslyckades."
+msgstr "Aktivering av delvis avkrypterade BITLK-enheter stöds ej."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
-msgstr ""
+msgstr "Det går inte att aktivera enheten, kärnan dm-crypt saknar stöd för BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
-msgstr ""
+msgstr "Det går inte att aktivera enheten, kärnan dm-crypt saknar stöd för BITLK Elephant diffuser."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
-#, fuzzy, c-format
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
+#, c-format
 msgid "Verity device %s does not use on-disk header."
-msgstr "Verity-enhet %s använder inte huvud på disk."
+msgstr "Verity-enheten %s använder inte huvud på disk."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Enheten %s är inte en giltig VERITY-enhet."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "VERITY-versionen %d stöds inte."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY-huvud är skadat."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Felaktigt VERITY-UUID-format angivet på enhet %s."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Fel vid uppdatering av verity-huvud på enheten %s."
 
-#: lib/verity/verity.c:256
-#, fuzzy
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
-msgstr "Begärd hash %s stöds inte."
+msgstr "Begärd hashsignaturverifiering %s stöds inte."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Det går inte reparera fel med FEC-enhet."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "Fann %u reparerbara fel med FEC-enhet."
 
-#: lib/verity/verity.c:308
-#, fuzzy
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Kärnan stöder inte dm-verity-mappning."
 
-#: lib/verity/verity.c:312
-#, fuzzy
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
-msgstr "Kärnan stöder inte dm-verity-mappning."
+msgstr "Kärnan stöder inte flaggan för dm-verity-signatur."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Verity-enhet identifierades som skadad efter aktivering."
 
@@ -1200,41 +1200,37 @@ msgstr "Verity-enhet identifierades som skadad efter aktivering."
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Ledigt utrymme är inte nollställt vid position %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Enhets-offset spillde över."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Verifiering misslyckades vid %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Ogiltig storlek på parametrar för verity-enhet."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Hash-området spillde över."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Misslyckades med verifiering av dataområde."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Misslyckades med verifiering av rot-hash."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "In-/utdatafel vid skapandet av hashområde."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Misslyckades med skapandet av hashområde."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "VARNING: Kärnan kan inte aktivera enhet om datablockstorleken överskrider sidstorlek (%u)."
@@ -1243,114 +1239,121 @@ msgstr "VARNING: Kärnan kan inte aktivera enhet om datablockstorleken överskri
 msgid "Failed to allocate RS context."
 msgstr "Misslyckades med att öppna RS-kontext."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Misslyckades med att allokera buffert."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Misslyckades med att läsa RS block %<PRIu64> byte %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Misslyckades med att skriva paritet för RS block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Misslyckades med att skriva paritet för RS block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Misslyckades med att skriva paritet för RS block %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Blockstorlekar måste matcha för FEC."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Ogiltigt antal paritet-byte."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+#, fuzzy
+msgid "Invalid FEC segment length."
+msgstr "Ogiltig signaturfil %s."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Misslyckades med att bestämma storlek för enhet %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
-#, fuzzy
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Kärnan stöder inte dm-integrity-mappning."
 
-#: lib/integrity/integrity.c:277
-#, fuzzy
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
-msgstr "Kärnan stöder inte dm-integrity-mappning."
+msgstr "Kärnan stöder inte fast metadataförskjutning för dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Misslyckades med att få skrivlås på enheten %s."
 
 #: lib/luks2/luks2_disk_metadata.c:392
 msgid "Detected attempt for concurrent LUKS2 metadata update. Aborting operation."
-msgstr ""
+msgstr "Identifierade samtidiga försök att uppdatera LUKS2-metadata. Avbryter åtgärden."
 
 #: lib/luks2/luks2_disk_metadata.c:691 lib/luks2/luks2_disk_metadata.c:712
 msgid ""
 "Device contains ambiguous signatures, cannot auto-recover LUKS2.\n"
 "Please run \"cryptsetup repair\" for recovery."
 msgstr ""
-"Enheten innehåller tvetydiga signaturer, det går inte automatiskt återhämta LUKS2.\n"
+"Enheten innehåller tvetydiga signaturer, det går inte att automatiskt återhämta LUKS2.\n"
 "Kör ”cryptsetup repair” för återhämtning."
 
 #: lib/luks2/luks2_json_format.c:227
 msgid "Requested data offset is too small."
 msgstr "Begärd dataoff för liten."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "VARNING: nyckelplatsområdet (%<PRIu64> byte) är väldigt liten, tillgängligt LUKS2-nyckelplatsantal är väldigt begränsat.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Misslyckades med att erhålla läslås på enheten %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "Förbjudna LUKS2-krav identifierade i säkerhetskopian %s."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Dataoffset skiljer sig på enhet och säkerhetskopia. Återställningen misslyckades."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Binärhuvud med nyckelstorlek skiljer sig på enhet och säkerhetskopia. Återställningen misslyckades."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Enhet %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "innehåller inget LUKS2-huvud. Ersättning av huvud kan förstöra data på enheten."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "innehåller redan LUKS2-huvud. Ersättningen av huvud kommer att förstöra befintliga nyckelplatser."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1360,7 +1363,7 @@ msgstr ""
 "VARNING:okända LUKS2-krav identifierade i huvudet för riktig enhet!\n"
 "Att ersätta huvudet med en säkerhetskopia kan göra data korrupt på enheten!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1370,75 +1373,72 @@ msgstr ""
 "VARNING:Oavslutad frånkopplade kryptering identifierad på enheten!\n"
 "Att ersätta huvudet med en säkerhetskopia kan orsaka korrupt data."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Ignorerade okänd flagga %s."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
-msgstr ""
+msgstr "Saknar nyckel för dm-crypt-segmentet %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
-#, fuzzy
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
-msgstr "Misslyckades med att läsa dm-%s-segment."
+msgstr "Misslyckades med att läsa dm-crypt-segment."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
-#, fuzzy
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
-msgstr "Misslyckades med att läsa dm-%s-segment."
+msgstr "Misslyckades med att läsa dm-linear-segment."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
-msgstr ""
+msgstr "Integritetskonfiguration som ej stöds på enheten."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
-msgstr ""
+msgstr "Omkryptering pågår. Det går inte att inaktivera enhet."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
-msgstr ""
+msgstr "Misslyckades med att ersätta inaktiverad enhet %s med målet dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Misslyckades med att läsa LUKS2-krav."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Ej uppfyllt LUKS2-krav identifierat."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
-msgstr ""
+msgstr "Åtgärden inkompatibel med enhet markerad för föråldrad omkryptering. Avbryter."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
-msgstr ""
+msgstr "Åtgärden inkompatibel med enhet markerad för LUKS2-omkryptering. Avbryter."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
-msgstr ""
+msgstr "Inte nog med minne för att öppna en nyckelplats."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
-#, fuzzy
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
-msgstr "Nyckelplats %d har verifierats.\n"
+msgstr "Misslyckades med att öppna nyckelplats."
 
 #: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot use %s-%s cipher for keyslot encryption."
-msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats"
+msgstr "Det går inte att använda %s-%s-chiffer för nyckelplatskryptering."
 
 #: lib/luks2/luks2_keyslot_luks2.c:480
 msgid "No space for new keyslot."
 msgstr "Inget utrymme för ny nyckelplats."
 
 #: lib/luks2/luks2_luks1_convert.c:482
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot check status of device with uuid: %s."
 msgstr "Det går inte kontrollera status för enheten med uuid: %s."
 
@@ -1451,18 +1451,16 @@ msgid "Unable to move keyslot area. Not enough space."
 msgstr "Kunde inte flytta nyckelplatsområde. Inte nog med utrymme."
 
 #: lib/luks2/luks2_luks1_convert.c:599
-#, fuzzy
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
-msgstr "Kunde inte flytta nyckelplatsområde. Inte nog med utrymme."
+msgstr "Kunde inte flytta nyckelplatsområde. Området för LUKS2-nyckelplatser är för litet."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Kunde inte flytta nyckelplatsområde."
 
 #: lib/luks2/luks2_luks1_convert.c:697
-#, fuzzy
 msgid "Cannot convert to LUKS1 format - default segment encryption sector size is not 512 bytes."
-msgstr "Det går inte att konvertera till LUKS1-format - nyckelplats %u är inte LUKS1-kompatibel."
+msgstr "Det går inte att konvertera till LUKS1-format - standardkrypteringstorleken är inte 512 byte."
 
 #: lib/luks2/luks2_luks1_convert.c:705
 msgid "Cannot convert to LUKS1 format - key slot digests are not LUKS1 compatible."
@@ -1471,7 +1469,7 @@ msgstr "Det går inte att konvertera till LUKS1-format - kontrollsummor för nyc
 #: lib/luks2/luks2_luks1_convert.c:717
 #, c-format
 msgid "Cannot convert to LUKS1 format - device uses wrapped key cipher %s."
-msgstr "Det går inte att konvertera till LUKS1-format - enheterna använder inbäddad nyckelchiffer %s."
+msgstr "Det går inte att konvertera till LUKS1-format - enheterna använder inbäddat nyckelchiffer %s."
 
 #: lib/luks2/luks2_luks1_convert.c:725
 #, c-format
@@ -1493,303 +1491,293 @@ msgstr "Det går inte att konvertera till LUKS1-format - plats %u (av maximalt a
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "Det går inte att konvertera till LUKS1-format - nyckelplats %u är inte LUKS1-kompatibel."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
-msgstr ""
+msgstr "Hotzone-storleken måste vara en multipel av beräknad zonjustering (%zu-byte)."
 
-#: lib/luks2/luks2_reencrypt.c:897
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:1007
+#, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
-msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)."
+msgstr "Enhetsstorleken måste vara en multipel av beräknad zonstorlek (%zu byte)."
 
-#: lib/luks2/luks2_reencrypt.c:941
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:1051
+#, c-format
 msgid "Unsupported resilience mode %s"
-msgstr "Parametrar som inte stöds på enheten %s."
+msgstr "Stöder inte motståndsläge %s"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
-msgstr "Misslyckades med att initiera identifiering av enhetssignatur."
+msgstr "Misslyckades med att initiera gammal segmentlagringsinbäddning."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
-msgstr "Misslyckades med att initiera identifiering av enhetssignatur."
+msgstr "Misslyckades med att initiera ny segmentlagringsinbäddning."
 
-#: lib/luks2/luks2_reencrypt.c:1340
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
-msgstr "Misslyckades med att läsa krav från säkerhetskopiehuvud."
+msgstr "Misslyckades med att läsa kontrollsummor från aktuell varm zon."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
+#, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
-msgstr "Misslyckades med att skriva paritet för RS block %<PRIu64>."
+msgstr "Misslyckades med att läsa område för varm zon med början %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:1476
+#, c-format
 msgid "Failed to decrypt sector %zu."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med avkryptera sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:1482
+#, c-format
 msgid "Failed to recover sector %zu."
-msgstr "Misslyckades med att ta bort token %d.\n"
+msgstr "Misslyckades med återhämta sektor %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
-msgstr ""
+msgstr "Käll- och målenhetstorlekar stämmer inte överens. Källa %<PRIu64>, mål: %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2075
+#, c-format
 msgid "Failed to activate hotzone device %s."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att aktivera varm zon-enhet %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2092
+#, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
-msgstr "Misslyckades med söka av enheten %s efter en signatur."
+msgstr "Misslyckades med att aktivera överlagringsenheten %s med aktuell ursprungstabell."
 
-#: lib/luks2/luks2_reencrypt.c:1989
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2099
+#, c-format
 msgid "Failed to load new mapping for device %s."
-msgstr "Misslyckades med att bestämma storlek för enhet %s."
+msgstr "Misslyckades med att läsa in ny mappning för enhet %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
-msgstr "Misslyckades med att erhålla läslås på enheten %s."
+msgstr "Misslyckades med att uppdatera listan över omkrypteringsenheter."
 
-#: lib/luks2/luks2_reencrypt.c:2216
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
-msgstr "Misslyckades med att byta ny nyckelplats."
+msgstr "Misslyckades med att sätta en ny storlek på nyckelplatsområdet."
 
-#: lib/luks2/luks2_reencrypt.c:2318
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2430
+#, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
-msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)."
+msgstr "Dataskiftning är inte justerad till begärd sektorstorlek (%<PRIu32> byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2451
+#, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
-msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)."
+msgstr "Dataenhet är inte justerad till begärd sektorstorlek (%<PRIu32> byte)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
-msgstr ""
+msgstr "Dataskiftning (%<PRIu64> sektorer) är mindre än framtida dataförskjutning (%<PRIu64> sektorer)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
+#, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
-msgstr "Det går inte att använda enheten %s som redan används (redan mappad eller monterad)."
+msgstr "Misslyckades med att öppna %s i exklusivt läge (redan mappad eller monterad)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
-msgstr ""
+msgstr "Enheten är inte markerad för LUKS2-omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
-msgstr "Misslyckades med att öppna RS-kontext."
+msgstr "Misslyckades med att läsa in LUKS2-omkrypteringskontext."
 
-#: lib/luks2/luks2_reencrypt.c:2619
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
-msgstr "Misslyckades med att hämta token %d för export."
+msgstr "Misslyckades med att erhålla status för omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2623
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
-msgstr "Enheten %s är inte aktiv."
+msgstr "Enheten är inte i omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2630
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
-msgstr "Omkryptering pågår redan."
+msgstr "Omkrypteringsprocessen pågår redan."
 
-#: lib/luks2/luks2_reencrypt.c:2632
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
-msgstr "Misslyckades med att erhålla skrivlås för enhet."
+msgstr "Misslyckades med att erhålla skrivlås för omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
-msgstr ""
+msgstr "Det går inte att fortsätta med omkryptering. Kör återställning av omkryptering först."
 
-#: lib/luks2/luks2_reencrypt.c:2750
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
-msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek."
+msgstr "Aktiv enhetsstorlek och begärd omkrypteringsstorlek skiljer sig åt."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
-msgstr ""
+msgstr "Ogiltig enhetsstorlek begärd i omkrypteringsparametrarna."
 
-#: lib/luks2/luks2_reencrypt.c:2834
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
-msgstr "Omkryptering pågår redan."
+msgstr "Omkryptering pågår redan. Det går inte att utföra återhämtning."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
-msgstr ""
+msgstr "LUKS2-omkryptering är redan initierad i metadata."
 
-#: lib/luks2/luks2_reencrypt.c:2913
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
-msgstr "Misslyckades med att sätta standardnyckelplats för LUKS2-parametrar."
+msgstr "Misslyckades med att initiera LUKS2-omkryptering i metadata."
 
-#: lib/luks2/luks2_reencrypt.c:3004
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
-msgstr "Misslyckades med söka av enheten %s efter en signatur."
+msgstr "Misslyckades med sätta enhetssegment för nästa varm zon-omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:3046
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
-msgstr "Misslyckades med att skriva aktiveringsflaggor till nya huvuden.:"
+msgstr "Misslyckades med att skriva motståndsmetadata för omkryptering."
 
-#: lib/luks2/luks2_reencrypt.c:3053
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
-msgstr "Reparation misslyckades."
+msgstr "Avkryptering misslyckades."
 
-#: lib/luks2/luks2_reencrypt.c:3058
-#, fuzzy, c-format
+#: lib/luks2/luks2_reencrypt.c:3279
+#, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
-msgstr "Misslyckades med att skriva paritet för RS block %<PRIu64>."
+msgstr "Misslyckades med att skriva område för varm zon med början vid %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
-msgstr "Misslyckades med att sätta dataoffset."
+msgstr "Misslyckades med att synkronisera data."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
-msgstr ""
+msgstr "Misslyckades med att uppdatera metadata efter aktuell varm zon för omkrypteringär färdigställd."
 
-#: lib/luks2/luks2_reencrypt.c:3138
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgstr "Misslyckades med att skriva LUKS2-metadata."
 
-#: lib/luks2/luks2_reencrypt.c:3161
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
-msgstr "Misslyckades med att radera enhetssignatur."
+msgstr "Misslyckades med att radera säkerhetskopia av segmentdata."
 
-#: lib/luks2/luks2_reencrypt.c:3174
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Misslyckades med att tilldela token %d till nyckelplats %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
 #, fuzzy
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Misslyckades med att läsa LUKS2-krav."
+msgid "Failed to remove reencryption keyslot."
+msgstr "Misslyckades med att erhålla omkrypteringslås."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
-msgstr ""
+msgstr "Ödesdigert fel vid omkrypteringschunk med start vid %<PRIu64>, %<PRIu64> sektorer lång."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
-msgstr ""
+msgstr "Återuppta inte enheten om inte den ersatts med felmål manuellt."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
-msgstr ""
+msgstr "Det går inte att fortsätta med omkryptering. Oväntat omkrypteringsläge."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
-msgstr ""
+msgstr "Saknat eller ogiltigt omkrypteringskontext."
 
-#: lib/luks2/luks2_reencrypt.c:3253
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
-msgstr "Misslyckades med att initiera identifiering av enhetssignatur."
+msgstr "Misslyckades med att initiera listan för omkrypteringsenheter."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
-#, fuzzy
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
-msgstr "Misslyckades med att öppna RS-kontext."
+msgstr "Misslyckades med att uppdatera omkrypteringskontext."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Nyckelplats %d är ogiltig."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Ingen fri plats för token."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Misslyckades med att skapa inbyggd token %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Kan inte verifiera lösenfras på icke-tty-ingångar."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Krypteringsparametrar för nyckelplatser stöds endast av LUKS2-enheter."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Inget känt chifferspecifikationsmönster kunde identifieras."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "VARNING: parametern --hash ignoreras i enkelt läge med specificerad nyckelfil.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "VARNING: flaggan --keyfile-size ignoreras, lässtorleken är densamma som storleken för krypteringsnyckeln.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "Identfierar enhetssignatur(er) på %s. Att fortsätta kan skada befintlig data."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Åtgärd avbruten.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Flaggan --key-file krävs."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Ange VeraCrypt PIM: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Ogiltigt PIM-värde:tolkningsfel."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Ogiltigt PIM-värde: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Ogiltigt PIM-värde:utanför intervallet."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Inget enhetshuvud finns tillgängligt med denna lösenfras."
 
-#: src/cryptsetup.c:541
-#, fuzzy, c-format
+#: src/cryptsetup.c:582
+#, c-format
 msgid "Device %s is not a valid BITLK device."
-msgstr "Enheten %s är inte en giltig LUKS-enhet."
+msgstr "Enheten %s är inte en giltig BITLK-enhet."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1799,87 +1787,96 @@ msgstr ""
 "som tillåter åtkomst till krypterad partition utan lösenfras.\n"
 "Denna utskrift bör alltid lagras krypterad på ett säkert ställe."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Enheten %s är fortfarande aktiv och schemalagd för uppskjuten borttagning.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Att ändra storlek på aktiv enhet kräver volymnyckel i nyckelringen, men -flaggan --disable-keyring är angiven."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Prestandamätning avbruten."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     N/A\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u iterationer per sekund för %zu-bitnyckel\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s N/A\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u iterationer, %5u minne, %1u parallella trådar (CPU:er) för %zu-bitnyckelplats (begärde %u ms)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Resultat från prestandamätningen är inte pålitligt."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Tester är ungefärliga och använder endast minne (ingen lagrings-IO).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#%*s Algoritm |       Nyckel |      Kryptering |      Avkryptering\n"
 
-#: src/cryptsetup.c:975
-#, fuzzy, c-format
+#: src/cryptsetup.c:1022
+#, c-format
 msgid "Cipher %s (with %i bits key) is not available."
-msgstr "Chiffret %s-%s (nyckelstorlek %zd bitar) är inte tillgängligt."
+msgstr "Chiffret %s (med nyckel av %i bitar) är inte tillgängligt."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#     Algoritm |       Nyckel |      Kryptering |      AVkryptering\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/A"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
-msgid "Really proceed with LUKS2 reencryption recovery?"
-msgstr ""
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Ange lösenfras för omkrypteringsåterhämtning: "
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1183
+msgid "Really proceed with LUKS2 reencryption recovery?"
+msgstr "Vill du verkligen fortsätta med LUKS2-omkrypteringsåterställning?"
+
+#: src/cryptsetup.c:1193
 #, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Ange lösenfras för omkrypteringsåterhämtning: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
-msgstr "Ange lösenfras för nyckelplats att konvertera: "
+msgstr "Ange lösenfras för omkrypteringsåterhämtning: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Vill du verkligen försöka att reparera LUKS-enhetshuvud?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1887,105 +1884,108 @@ msgstr ""
 "Rensar enheten för att initialisera kontrollsumma för integritet.\n"
 "Du kan avbryta detta genom att trycka ned CTRL+c (resten av den ej rensade enheten kommer att innehålla en ogiltigt kontrollsumma).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Det går inte att inaktivera temporär enhet %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Flaggan för integritet kan endast användas för formatet LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Flaggorna för storlekar på LUKS2-metadata stöds inte."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Det går inte att skapa huvudfil %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Inga kända integritetspecifikationsmönster identifierat."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Det går inte att använda %s som diskhuvud."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Detta kommer att skriva över data på %s och går inte att ångra."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Misslyckades med att sätta pbkdf-parametrar."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Förminskad dataoffset endast tillåtet för fristående LUKS-huvuden."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
-msgstr ""
+msgstr "Det går inte att avgöra volymens nyckelstorlek för LUKS utan nyckelplatser, använd flaggen --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Enheten aktiverad men kan inte spara undan flaggorna."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Nyckelplats %d markerad för borttagning."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Detta är sista nyckelplatsen. Enheten kommer att bli oanvändbar efter att denna nyckel tagits bort."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Ange eventuell återstående lösenfras: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Åtgärden avbröts, nyckelplatsen raderades INTE.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Ange lösenfras att ta bort: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Ange ny lösenfras för nyckelplats: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Ange valfri existerande lösenfras: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Ange lösenfras att ändra: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Ange ny lösenfras: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Ange lösenfras för nyckelplats att konvertera: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Endast ett enhetsargument för operationen isLuks stöds."
 
-#: src/cryptsetup.c:2001
-#, fuzzy
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1995,45 +1995,53 @@ msgstr ""
 "som tillåter åtkomst till krypterad partition utan lösenfras.\n"
 "Denna utskrift bör alltid lagras krypterad på ett säkert ställe."
 
-#: src/cryptsetup.c:2066
-#, fuzzy, c-format
+#: src/cryptsetup.c:2178
+#, c-format
 msgid "Keyslot %d does not contain unbound key."
-msgstr "Nyckelplats %d är inte aktiv."
+msgstr "Nyckelplats %d innehåller inte obunden nyckel."
 
-#: src/cryptsetup.c:2072
-#, fuzzy
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
-"Utskrift av huvudet med volymnyckel är känslig information\n"
-"som tillåter åtkomst till krypterad partition utan lösenfras.\n"
+"Utskrift av huvudet med obunden nyckel är känslig information.\n"
 "Denna utskrift bör alltid lagras krypterad på ett säkert ställe."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "%s är inte en cryptsetup-hanterad enhet."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Flaggan --header-backup-file krävs."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s är inte en cryptsetup-hanterad enhet."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Att uppdatera stöds inte för enhetstypen %s"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Okänd metadata för enhetstypen %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Kommandot kräver enhet och mappat namn som argument."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2042,95 +2050,95 @@ msgstr ""
 "Denna åtgärd kommer att ta bort alla nyckelplatser på enhet %s.\n"
 "Enheten kommer att bli oanvändbar efter denna åtgärd."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Åtgärden avbryten, nyckelplatser raderades EJ.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Ogiltig LUKS-typ, endast luks1 och luks2 stöds."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Enheten är redan av %s-typ."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Denna åtgärd kommer att konvertera %s till %s-format.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Åtgärden avbröts, enheten konverterades INTE.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Saknar flaggan --priority, --label eller --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Token %d är ogiltig."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Token %d används."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Misslyckades med att lägga till luks2-nyckelringsstoken %d."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Misslyckades med att tilldela token %d till nyckelplats %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Token %d används ej."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Misslyckades med att importera token från fil."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Misslyckades med att hämta token %d för export."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "parametern --key-description krävs för åtgärden lägg till token."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Åtgärden kräver specifik token. Använd parametern --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Ogiltig tokenåtgärd %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
-msgstr ""
+msgstr "Auto-identifierade aktiv dm-enhet ”%s” för dataenheten %s.\n"
 
-#: src/cryptsetup.c:2672
-#, fuzzy, c-format
+#: src/cryptsetup.c:2802
+#, c-format
 msgid "Device %s is not a block device.\n"
-msgstr "Enheten %s är inte en giltig LUKS-enhet."
+msgstr "Enheten %s är inte en giltig blockenhet.\n"
 
-#: src/cryptsetup.c:2674
-#, fuzzy, c-format
+#: src/cryptsetup.c:2804
+#, c-format
 msgid "Failed to auto-detect device %s holders."
-msgstr "Misslyckades med att ta status på enhet %s."
+msgstr "Misslyckades med att identifiera kopplingarna till enhet %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2138,241 +2146,247 @@ msgid ""
 "It may lead to data corruption if the device is actually activated.\n"
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
+"Det går inte att avgöra om enheten %s är aktiverade eller ej.\n"
+"Är du säker på att du vill fortsätta kryptera om i frånkopplat läge?\n"
+"Det kan leda till datakorruption om enheten är aktiverad.\n"
+"För att kryptera om i uppkopplat läge, använd istället flaggan --active-name.\n"
 
-#: src/cryptsetup.c:2756
-#, fuzzy
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
-msgstr "Ogiltig enhet %s."
+msgstr "Ogiltig LUKS-enhetstyp."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
-msgstr ""
+msgstr "Kryptering utan frånkopplat huvud (--header) är inte möjligt utan att minska datastorleken på enheten (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
-msgstr ""
+msgstr "Begärd dataförskjutning måste vara mindre än, eller lika med halva av parametern --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
-msgstr ""
+msgstr "Justera värdet av --reduce-device-size-värdet till dubbla --offset %<PRIu64> (sektorer).\n"
 
-#: src/cryptsetup.c:2779
-#, fuzzy
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
-msgstr "Flaggan för integritet kan endast användas för formatet LUKS2."
+msgstr "Kryptering stöds endast för formatet LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
-msgstr ""
+msgstr "Identifierade LUKS-enhet på %s. Vill du kryptera LUKS-enheten igen?"
 
-#: src/cryptsetup.c:2816
-#, fuzzy, c-format
+#: src/cryptsetup.c:2950
+#, c-format
 msgid "Temporary header file %s already exists. Aborting."
-msgstr "Begärd säkerhetskopia %s av huvud finns redan."
+msgstr "Tillfällig huvudfil %s finns redan. Avbryter."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
-#, fuzzy, c-format
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
+#, c-format
 msgid "Cannot create temporary header file %s."
-msgstr "Det går inte att skapa huvudfil %s."
+msgstr "Det går inte att skapa tillfällig huvudfil %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
+msgstr "%s/%s är nu aktiv och redo för uppkopplad kryptering.\n"
+
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
-#, fuzzy
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
-msgstr "Ändra inte nyckel, ingen omkryptering av dataområde"
+msgstr "Inte nog med fria nyckelplatser för omkryptering."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
-msgstr "Nyckelfil kan endast användas med --key-slot eller exakt en aktiv nyckelplats."
+msgstr "Nyckelfil kan endast användas med --key-slot eller precis en aktiv nyckelplats."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
-#, fuzzy, c-format
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
+#, c-format
 msgid "Enter passphrase for key slot %d: "
-msgstr "Ange lösenfras för nyckelplats %u: "
+msgstr "Ange lösenfras för nyckelplats %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Ange lösenfras för nyckelplats %u: "
 
-#: src/cryptsetup.c:3263
-#, fuzzy
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
-msgstr "Kommandot kräver enhet och mappat namn som argument."
+msgstr "Kommandot kräver en enhet som argument."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
-msgstr ""
+msgstr "Stödjer endast LUKS2-formatet. Använd verktyget cryptsetup-reencrypt för LUKS1."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
-msgstr ""
+msgstr "Föråldrad frånkopplad omkryptering pågår redan. Använd verktyget cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Kryptering för enhet med integritetsprofil stöds ej."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
-msgstr ""
+msgstr "LUKS2-omkryptering är redan initierad. Avbryter åtgärd."
 
-#: src/cryptsetup.c:3319
-#, fuzzy
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
-msgstr "Loggfilen %s existerar, återupptar kryptering.\n"
+msgstr "LUKS2-enheten är inte i omkryptering."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<enhet> [--type <typ>] [<namn>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "öppna enhet som <namn>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<namn>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "stäng enhet (ta bort mappning)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "ändra storlek på aktiv enhet"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "visa enhetsstatus"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <chiffer>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "prestandamät chiffer"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<enhet>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "försök att reparera metadata på disken"
 
-#: src/cryptsetup.c:3352
-#, fuzzy
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
-msgstr "lägg till nyckel till LUKS-enhet"
+msgstr "omkryptering av LUKS2-enhet"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "ta bort alla nyckelplatser (ta bort krypteringsnyckeln)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "konvertera LUKS från/till LUKS2-format"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "ange permanenta konfigurationsflaggor för LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<enhet> [<ny nyckelfil>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "formaterar en LUKS-enhet"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "lägg till nyckel till LUKS-enhet"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<enhet> [<nyckelfil>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "tar bort angiven nyckel eller nyckelfil från LUKS-enhet"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "ändrar angiven nyckel eller nyckelfil för LUKS-enhet"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "konverterar en nyckel till nya pbkdf-parametrar"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<enhet> <nyckelplats>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "rensar nyckeln med nummer <nyckelplats> från LUKS-enhet"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "skriv ut UUID för LUKS-enhet"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "testar <enhet> för LUKS-partitionshuvud"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "skriver ut information om LUKS-partition"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "skriver ut information om TCRYPT-partition"
 
-#: src/cryptsetup.c:3366
-#, fuzzy
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
-msgstr "skriver ut information om TCRYPT-partition"
+msgstr "skriv ut BITLK-enhetsinformation"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Försätt LUKS-enhet i vänteläge och rensa nyckel (alla in-/ut-åtgärder är frusna)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Återuppta LUKS-enhet i vänteläge"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Säkerhetskopiera huvud och nyckelplatser från LUKS-enhet"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Återställ huvud och nyckelplatser för LUKS-enhet"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<läggtill|tabort|importera|exportera> <enhet>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Manipulera LUKS2-token"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2380,8 +2394,7 @@ msgstr ""
 "\n"
 "<åtgärd> är en av:\n"
 
-#: src/cryptsetup.c:3395
-#, fuzzy
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2390,10 +2403,10 @@ msgid ""
 msgstr ""
 "\n"
 "Du kan också använda gamla <åtgärd> syntaxalias:\n"
-"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
-"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n"
+"\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
+"\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkOpen\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2408,7 +2421,7 @@ msgstr ""
 "<nyckelplats> är numret för LUKS-nyckelplatsen att ändra\n"
 "<nyckelfil> valfri nyckelfil för den nya nyckeln för luksAddKey-åtgärden\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2417,7 +2430,7 @@ msgstr ""
 "\n"
 "Inkompilerat standardmetadataformat är %s (för luksFormat-åtgärd).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2434,7 +2447,7 @@ msgstr ""
 "Standard-PBKDF för LUKS2: %s\n"
 "\tIterationstid: %d, Minne: %dkB, Parallella trådar: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2449,749 +2462,711 @@ msgstr ""
 "\tplain: %s, Nyckel: %d bitar, Lösenordshashning: %s\n"
 "\tLUKS1: %s, Nyckel: %d bitar, LUKS-huvudhashning %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: Standardnyckelstorlek med XTS-läge (två interna nycklar) kommer att dubbleras.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: kräver %s som argument"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Visa detta hjälpmeddelande"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Visa kort information om användning"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Skriv ut paketversion"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Hjälpflaggor:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Visar mer detaljerade felmeddelanden"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Visa felsökningsmeddelanden"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Visa felsökningsmeddelanden inklusive JSON-metadata"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Chiffret som används för att kryptera disken (se /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Hashen som används för att skapa krypteringsnyckel från lösenfras"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Verifierar lösenfrasen genom att fråga efter den två gånger"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Läs nyckeln från en fil"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Läs volymnyckeln (master) från fil."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Skriv ut volymnyckel (master) istället för nyckelplatsinfo"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Storleken för krypteringsnyckeln"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BITAR"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Begränsa läsningen från nyckelfil"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "byte"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Antal byte att hoppa över i nyckelfil"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Begränsa läsningen från nyligen tillagd nyckelfil"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Antal byte att hoppa över i nyligen tillagd nyckelfil"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Platsnummer för ny nyckel (standard är första lediga)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Storleken för enheten"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "SEKTORER"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Använd endast specificerad enhetsstorlek (ignorera resten av enheten). FARLIGT!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Startoffset i bakändesenheten"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Hur många sektorer av krypterat data som ska hoppas över i början"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Skapa en skrivskyddad mappning"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Fråga inte efter bekräftelse"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Tidsgräns för interaktiv lösenfrasprompt (i sekunder)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "sek"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Uppdatering av förloppslinje (i sekunder)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Hur många inmatningsförsök av lösenfrasen som kan göras"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Justera nyttolast i <n> sektorgränser - för luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Fil med säkerhetskopior av LUKS-huvud och nyckelplatser"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Använd /dev/random för att generera volymnyckel"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Använd /dev/urandom för att generera volymnyckel"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Dela enhet med ett annat ej överlappande krypteringssegment"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID för enheten att använda"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Tillåt avvisningsbegäran (TRIM) för enhet"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Enhet eller fil med separerat LUKS-huvud"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Aktivera inte enhet, kontrollera endast lösenfrasen"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Använd dolt huvud (gömd TCRYPT-enhet)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Enheten är system-TCRYPT-disk (med starthanterare)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Använd säkerhetskopia (sekundär) för TCRYPT-huvud"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Sök också efter VeraCrypt-kompatibel enhet"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Personlig iteration för VeraCrypt-kompatibel enhet"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Query Personal Iteration Multiplier för VeraCrypt-kompatibel enhet"
 
-#: src/cryptsetup.c:3526
-#, fuzzy
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
-msgstr "Typer av enhetsmetadata: luks, plain, loopaes, tcrypt"
+msgstr "Typer av enhetsmetadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Inaktivera kvalitetskontroll av lösenord (om aktiverat)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Använd flaggan dm-crypt same_cpu_crypt för prestandakompatibilitet"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Använd flaggan dm-crypt submit_from_crypt_cpus för prestandakompatibilitet"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Förbigå dm-crypt's arbetskö och bearbeta läsbegäran synkront"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Förbigå dm-crypt's arbetskö och bearbeta skrivbegäran synkront"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Enhetsborttagning är förskjuten tills den sista användaren stänger den"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
-msgstr ""
+msgstr "Använder globalt lås för att serialisera minneshård PBKDF (OOM-lösning)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "PBKDF-iterationstid för LUKS (i ms)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "ms"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "PBKDF-algoritm (för LUKS2) (argon2i/argon2id/pbkdf2)"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Minneskostnadsgräns för PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "kilobyte"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Parallellkostnad för PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "trådar"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Iterationskostnad för PBKDF (tvingad, inaktiverar prestandamätning)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Nyckelplats-prioritet: ignore,normal,prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Inaktivera låsning av metadata på disk"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Inaktivera att läsa in volymnycklar via kärnans nyckelring"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Algoritm för dataintegritet (endast LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Inaktivera journal för integritetsenhet"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Rensa inte enhet efter formatering"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
-msgstr ""
+msgstr "Använd ineffektiv föråldrad padding (gamla kärnor)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Fråga inte efter lösenfras om aktivering med token misslyckas"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Tokenantal (standardvärde: any)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Nyckelbeskrivning"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Sektorstorlek för kryptering (standardvärde 512 byte)"
 
-#: src/cryptsetup.c:3548
-#, fuzzy
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
-msgstr "Sektorstorlek för kryptering (standardvärde 512 byte)"
+msgstr "Använd IV-räkning i sektorstorlek (ej i 512 byte)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Sätt och spara undan aktiveringsflaggorna för enheten"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Ange etikett för LUKS2-enhet"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Ange undersystemsetikett för LUKS2-enheten"
 
-#: src/cryptsetup.c:3552
-#, fuzzy
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
-msgstr "Skapa obunden (inget tilldelat datasegment) LUKS2-nyckelplats"
+msgstr "Skapa eller skriv ut obunden (inget tilldelat datasegment) LUKS2-nyckelplats"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Läs eller skriv json från eller till en fil"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Områdesstorlek för metadata på LUKS2-huvudet"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Storlek på nyckelplatsområdet för LUKS2-huvud"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Uppdatera (återaktivera) enhet med nya parametrar"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "LUKS2-nyckelplats: Storleken för krypteringsnyckeln"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats"
 
-#: src/cryptsetup.c:3559
-#, fuzzy
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
-msgstr "Dekryptera enheten permanent (ta bort kryptering)"
+msgstr "Kryptera LUKS2-enheten permanent (direktkryptering)."
 
-#: src/cryptsetup.c:3560
-#, fuzzy
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
-msgstr "Dekryptera enheten permanent (ta bort kryptering)"
+msgstr "Dekryptera LUKS2-enheten (ta bort kryptering)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
-msgstr ""
+msgstr "Initiera LUKS2-omkryptering endast i metadata."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
-msgstr ""
+msgstr "Återupptog endast initierad LUKS2-omkryptering."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Förminska dataenhetsstorleken (flytta dataoffset). FARLIGT!"
 
-#: src/cryptsetup.c:3564
-#, fuzzy
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
-msgstr "Blockstorlek för omkryptering"
+msgstr "Maximal storlek på omkryptering av varm zon."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
-msgstr ""
+msgstr "Återhämtningstyp för omkrypteringszon (checksumma,journal,ingen)"
 
-#: src/cryptsetup.c:3566
-#, fuzzy
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
-msgstr "Blockstorlek för omkryptering"
+msgstr "Hashkontrollsumma för omkryptering av varm zon"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
-msgstr ""
+msgstr "Överlagra automatisk identifiering av dm-enhet för omkryptering"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[FLAGGA…] <åtgärd> <åtgärdsspecifik>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Argumentet <åtgärd> saknas."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Okänd åtgärd."
 
-#: src/cryptsetup.c:3713
-#, fuzzy
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
-msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande.\n"
+msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande."
 
-#: src/cryptsetup.c:3718
-#, fuzzy
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
-msgstr "Flaggan --deferred är endast tillåten för kommandot close.\n"
+msgstr "Flaggan --deferred är endast tillåten för kommandot close."
 
-#: src/cryptsetup.c:3723
-#, fuzzy
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
-msgstr "Flaggan --shared är endast tillåten för öppning för enkel enhet.\n"
+msgstr "Flaggan --shared är endast tillåten för öppning för enkel enhet."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
-#, fuzzy
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
-msgstr "Flaggan --allow-discards är endast tillåten för operationen open.\n"
+msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open."
 
-#: src/cryptsetup.c:3733
-#, fuzzy
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
-msgstr "Flaggan --persistent är endast tillåten för operationen open.\n"
+msgstr "Flaggan --persistent är endast tillåten för åtgärden open."
 
-#: src/cryptsetup.c:3738
-#, fuzzy
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
-msgstr "Flaggan --allow-discards är endast tillåten för operationen open.\n"
+msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open."
 
-#: src/cryptsetup.c:3743
-#, fuzzy
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
-msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase.\n"
+msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase."
 
-#: src/cryptsetup.c:3753
-#, fuzzy
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
 msgstr ""
-"Flaggan --key-size är endast tillåten för luksFormat, luksAddKey (with --unbound),\n"
+"Flaggan --key-size är endast tillåten för åtgärderna luksFormat, luksAddKey,\n"
 "open och benchmark. För att begränsa läsning från nyckelfil, använd --keyfile-size=(byte)."
 
-#: src/cryptsetup.c:3759
-#, fuzzy
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
-msgstr "Flaggan --integrity är endast tillåten för luksFormat (LUKS2).\n"
+msgstr "Flaggan --integrity är endast tillåten för luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
-#, fuzzy
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
-msgstr "Flaggan --integrity-no-wipe kan användas endast för åtgärden formatera med integritetsutökningar.\n"
+msgstr "Flaggan --integrity-no-wipe kan endast användas för åtgärden formatera med integritetsutökningar."
 
-#: src/cryptsetup.c:3770
-#, fuzzy
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
-msgstr "Flaggorna --label och --subsystem tillåts endast för luksFormat och konfiguration av LUKS2-åtgärder.\n"
+msgstr "Flaggorna --label och --subsystem är endast tillåtna för luksFormat och konfiguration av LUKS2-åtgärder."
 
-#: src/cryptsetup.c:3776
-#, fuzzy
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
-msgstr "Flaggan --test-passphrase är endast tillåten för open för LUKS- och TCRYPT-enheter.\n"
+msgstr "Flaggan --test-passphrase är endast tillåten för open för LUKS-, TCRYPT-, och BITLK-enheter."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Nyckelstorlek måste vara en multipel av 8 bitar"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Nyckelplatsen är ogiltig."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Flaggan --key-file åsidosätter specificerade nyckelfilsargument."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Negativt tal för flagga ej tillåtet."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Endast ett argument för --key-file är tillåtet."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Endast en av flaggorna --use-[u]random är tillåten."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Flaggan --use-[u]random är endast tillåten för luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Flaggan --uuid är endast tillåten för luksFormat och luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Flaggan --align-payload är endast tillåten för luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Flaggorna --luks2-metadata-size och --opt-luks2-keyslots-size tillåts endast för luksFormat med LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Ogiltig storlekspecifikation för LUKS2-metadata på enhet."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Ogiltig storlekspecifikation för LUKS2-nyckelplats på enhet."
 
-#: src/cryptsetup.c:3838
-#, fuzzy
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Flaggan --align-payload och --offset kan inte kombineras."
 
-#: src/cryptsetup.c:3844
-#, fuzzy
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
-msgstr "Flaggan --skip stöds endast för öppning av vanliga enheter och loopaes-enheter.\n"
+msgstr "Flaggan --skip stöds endast för öppning av vanliga enheter och loopaes-enheter."
 
-#: src/cryptsetup.c:3851
-#, fuzzy
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
-msgstr "Flaggan --offset stöds endast för öppning av vanliga och loopaes-enheter och för luksFormat.\n"
+msgstr "Flaggan --offset stöds endast för öppning av vanliga och loopaes-enheter, luksFormat och omkrypteringsenheter."
 
-#: src/cryptsetup.c:3857
-#, fuzzy
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
-msgstr "Flaggorna --tcrypt-hidden, --tcrypt-system eller --tcrypt-backup stöds endast på TCRYPT-enhet.\n"
+msgstr "Flaggorna --tcrypt-hidden, --tcrypt-system eller --tcrypt-backup stöds endast på TCRYPT-enhet."
 
-#: src/cryptsetup.c:3862
-#, fuzzy
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
-msgstr "Flaggan --tcrypt-hidden kan inte kombineras med --allow-discards.\n"
+msgstr "Flaggan --tcrypt-hidden kan inte kombineras med --allow-discards."
 
-#: src/cryptsetup.c:3867
-#, fuzzy
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
-msgstr "Flaggan --veracrypt stöds endast för TCRYPT-enhetstyper.\n"
+msgstr "Flaggan --veracrypt stöds endast för TCRYPT-enhetstyper."
 
-#: src/cryptsetup.c:3873
-#, fuzzy
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
-msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim.\n"
+msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
-#, fuzzy
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
-msgstr "Flaggan --veracrypt-pim stöds endast för VeraCrypt-kompatibla enheter.\n"
+msgstr "Flaggan --veracrypt-pim stöds endast för VeraCrypt-kompatibla enheter."
 
-#: src/cryptsetup.c:3885
-#, fuzzy
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
-msgstr "Flaggan --veracrypt-query-pim stöds endast för VeraCrypt-kompatibla enheter.\n"
+msgstr "Flaggan --veracrypt-query-pim stöds endast för VeraCrypt-kompatibla enheter."
 
-#: src/cryptsetup.c:3889
-#, fuzzy
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
-msgstr "Flaggorna --veracrypt-pim och --veracrypt-query-pim är ömsesidigt uteslutande.\n"
+msgstr "Flaggorna --veracrypt-pim och --veracrypt-query-pim är ömsesidigt uteslutande."
 
-#: src/cryptsetup.c:3896
-#, fuzzy
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
-msgstr "Flaggan --priority kan endast vara ignore/normal/prefer.\n"
+msgstr "Flaggan --priority kan endast vara ignore/normal/prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
-#, fuzzy
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
-msgstr "Specifikation för nyckelplats krävs.\n"
+msgstr "Specifikation för nyckelplats krävs."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
-#, fuzzy
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
-msgstr "Password-based key derivation function (PBKDF) kan endast vara pbkdf2 eller argon2i/argon2id.\n"
+msgstr "Password-based key derivation function (PBKDF) kan endast vara pbkdf2 eller argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
-#, fuzzy
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
-msgstr "Tvingade PBKDF-iterationer går inte att kombinera med flaggan iteration time.\n"
+msgstr "Tvingade PBKDF-iterationer går inte att kombinera med flaggan iteration time."
 
-#: src/cryptsetup.c:3917
-#, fuzzy
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
-msgstr "Flaggan för sektorstorlek stöds inte för detta kommando.\n"
+msgstr "Flaggan för sektorstorlek stöds inte för detta kommando."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
-msgstr ""
+msgstr "Flaggan för stora IV-sektorer stöds endast för att öppna enheter av enkel typ med sektorstorlek större än 512 byte."
 
-#: src/cryptsetup.c:3934
-#, fuzzy
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
-msgstr "Nyckelstorlek krävs med flaggan --unbound.\n"
+msgstr "Nyckelstorlek krävs med flaggan --unbound."
 
-#: src/cryptsetup.c:3944
-#, fuzzy
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
-msgstr "Flaggan --unbound kan inte användas tillsammans med luksAddKey action.\n"
+msgstr "Flaggan --unbound kan endast användas tillsammans med ätgärderna luksAddKey och luksDump."
 
-#: src/cryptsetup.c:3949
-#, fuzzy
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
-msgstr "Flaggan --refresh är endast tillåten för operationen open.\n"
+msgstr "Flaggan --refresh är endast tillåten för åtgärden open."
 
-#: src/cryptsetup.c:3960
-#, fuzzy
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
-msgstr "Det går inte att inaktivera metadatalås.\n"
+msgstr "Det går inte att inaktivera metadatalås."
 
-#: src/cryptsetup.c:3970
-#, fuzzy
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
-msgstr "Ogiltig storlekspecifikation på enhet."
+msgstr "Ogiltig högsta storlekspecifikation för varm zon-omkryptering."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Ogiltig storlekspecifikation på enhet."
 
-#: src/cryptsetup.c:3981
-#, fuzzy
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
-msgstr "Högsta förminskningsstorlek för enhet är 64 MiB."
+msgstr "Högsta förminskningsstorlek för enhet är 1 GiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor."
 
-#: src/cryptsetup.c:3989
-#, fuzzy
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
-msgstr "Ogiltig storlekspecifikation på enhet."
+msgstr "Ogiltig datastorlekspecifikation."
 
-#: src/cryptsetup.c:3994
-#, fuzzy
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
-msgstr "Enhets-offset spillde över."
+msgstr "Minska storleksöverspill."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
-msgstr ""
+msgstr "LUKS2-dekryptering kräver flaggan --header."
 
-#: src/cryptsetup.c:4002
-#, fuzzy
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
-msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor."
+msgstr "Enhetsstorlek måste vara en multipel av sektor på 512-byte."
 
-#: src/cryptsetup.c:4006
-#, fuzzy
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
-msgstr "Flaggan --align-payload och --offset kan inte kombineras."
+msgstr "Flaggan  --reduce-device-size och --data-size kan inte kombineras."
 
-#: src/cryptsetup.c:4010
-#, fuzzy
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
-msgstr "Flaggan --align-payload och --offset kan inte kombineras."
+msgstr "Flaggan  --device-size och --size kan inte kombineras."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Flaggorna --ignore-corruption och --restart-on-corruption kan inte användas tillsammans.\n"
+msgstr "Flaggorna --keyslot-cipher och --keyslot-key-size måste användas tillsammans."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Angav ogiltig saltsträng."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Kan inte skapa hashavbild %s för skrivning."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Det går inte att skapa FEC-avbild %s för skrivning."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Angav ogiltig rothashsträng."
 
-#: src/veritysetup.c:187
-#, fuzzy, c-format
+#: src/veritysetup.c:199
+#, c-format
 msgid "Invalid signature file %s."
-msgstr "Ogiltig enhet %s."
+msgstr "Ogiltig signaturfil %s."
 
-#: src/veritysetup.c:194
-#, fuzzy, c-format
+#: src/veritysetup.c:206
+#, c-format
 msgid "Cannot read signature file %s."
-msgstr "Det går inte att läsa nyckelfilen %s."
+msgstr "Det går inte att läsa signaturfilen %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<dataenhet> <hashenhet>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "formatera enhet"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<dataenhet> <hashenhet> <rothash>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "verifiera enhet"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<dataenhet> <namn> <hashenhet> <rothash>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "visa statistik för aktiv enhet"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<hash_enhet>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "visa information från disk"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3206,7 +3181,7 @@ msgstr ""
 "<hashenhet> är enheten som innehåller verifieringsdata\n"
 "<rothash> hash för rotnoden på <hashenhet>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3217,130 +3192,139 @@ msgstr ""
 "Inkompilerade standardparametrar för dm-verity:\n"
 "\tHash: %s, Datablock (byte): %u, Hashblock (byte): %u, Saltstorlek: %u, Hashformat: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Använd inte verity superblock"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Formattyp (1 - normal, 0 - ursprungliga Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "antal"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Blockstorlek på dataenheten"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Blockstorlek på hashenheten"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "FEC paritetsbyte"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Antalet block i datafilen"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "block"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Sökväg till enhet med felkorrigeringsdata"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "sökväg"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Startoffset på hashenheten"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Startoffset på FEC-enheten"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Hashalgoritm"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "sträng"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Salt"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "hexsträng"
 
-#: src/veritysetup.c:478
-#, fuzzy
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
-msgstr "Misslyckades med skapandet av hashområde."
+msgstr "Sökväg till root-hashsignaturfilen"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Starta om kärna om något skadat identifieras"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Sätt kärnan i Panic-läge om korruption identifieras"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ignorera om något är skadat, logga endast"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Verifiera inte nollställda block"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Verifiera datablock endast första gången det läses in"
 
-#: src/veritysetup.c:582
-#, fuzzy
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
-msgstr "Flaggorna --ignore-corruption, --restart-on-corruption eller --ignore-zero-blocks är endast tillåtna för operationen open.\n"
+msgstr "Flaggorna --ignore-corruption, --restart-on-corruption eller --ignore-zero-blocks är endast tillåtna för åtgärden open."
 
-#: src/veritysetup.c:587
-#, fuzzy
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
-msgstr "Flaggan --integrity-recalculate kan användas endast för öppen åtgärd."
+msgstr "Flaggan --root-hash-signature kan användas endast för åtgärden open."
 
-#: src/veritysetup.c:592
-#, fuzzy
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
-msgstr "Flaggorna --ignore-corruption och --restart-on-corruption kan inte användas tillsammans.\n"
+msgstr "Flaggorna --ignore-corruption och --restart-on-corruption kan inte användas tillsammans."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Det går inte att använda flaggorna --panic-on-corruption och --restart-on-corruption tillsammans."
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Ogiltig nyckelstorlek."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Det går inte att läsa nyckelfilen %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Det går inte att läsa %d byte från nyckelfilen %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Formaterad med taggstorlek %u, intern integritet %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<integrity_enhet>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<integritet_enhet> <namn>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3351,409 +3335,408 @@ msgstr ""
 "<namn> är enheten att skapa under %s\n"
 "<integritetsenhet> är enheten som innehåller data med integritetstaggar\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Inkompilerade standardparametrar för dm-integrity:\n"
-"\tTaggstorlek: %u byte, Kontrollsummealgoritm: %s\n"
-"\n"
+"\tKontrollsummealgoritm: %s\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Sökvägen till dataenhet (om separat)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Journalstorlek"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Infoga sektorer"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "Journalvattenmärke"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "procent"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Journalincheckningstid"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "ms"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
-msgstr ""
+msgstr "Antal 512-byte sektorer per bit (bitmap-läge)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
-msgstr ""
+msgstr "Renstid för bitmap-läge"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Taggstorlek (per sektor)"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Sektorstorlek"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Bufferstorlek"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Dataintegritetsalgoritm"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Storleken för dataintegritetsnyckeln"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Läs integritetsnyckeln från en fil"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Integritetsalgoritm för journal"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Storleken för journalens integritetssnyckel"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Läs journalens integritetsnyckel från en fil"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Krypteringsalgoritm för journal"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Storleken för journalens krypteringsnyckel"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Läs journalens krypteringsnyckel från en fil"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Återhämtningsläge (ingen journal, ingen taggkontroll)"
 
-#: src/integritysetup.c:575
-#, fuzzy
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
-msgstr "Inaktivera journal för integritetsenhet"
+msgstr "Använd bitmap för att spåra ändringar och inaktivera journal för integritetsenhet"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Räkna automatiskt initiala taggar."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Flaggan --integrity-recalculate kan användas endast för öppen åtgärd."
 
-#: src/integritysetup.c:669
-#, fuzzy
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
-msgstr "Flaggorna --journal-size, --interleave-sectors, --sector-size, --tag-size och --no-wipe kan endast användas för åtgärden formatera.\n"
+msgstr "Flaggorna --journal-size, --interleave-sectors, --sector-size, --tag-size och --no-wipe kan endast användas för åtgärden formatera."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Ogiltig storlekspecifikation på journal."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Både flaggor för nyckelfil och nyckelstorlek måste specifiiceras."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Integritetsalgoritm måste specificieras om integritetsnyckel används."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Både flaggor för nyckelfil för journalintegritet och nyckelstorlek måste specificeras."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Integritetsalgoritm för journal måste anges om integritetsnyckel för journal används."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Både flaggor för nyckelfil för journalkryptering och nyckelstorlek måste specificeras."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Krypteringsalgoritm för journal måste anges om integritetsnyckel för journal används."
 
-#: src/integritysetup.c:703
-#, fuzzy
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
-msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande.\n"
+msgstr "Flaggorna för återställning- och bitmap-läge är ömsesidigt uteslutande."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
-msgstr ""
+msgstr "Det går inte att använda journalflaggor i bitmap-läge."
 
-#: src/integritysetup.c:711
-#, fuzzy
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
-msgstr "Flaggan för integritet kan endast användas för formatet LUKS2."
+msgstr "Flaggan för integritet kan endast användas i bitmap-läge."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Omkryptering pågår redan."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Kan inte öppna %s exklusivt, enheten används."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Misslyckades med allokering av justerat minne."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Det går inte att läsa enheten %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Markerar LUKS1-enhet %s som oanvändbar."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Sätter LUKS2-flaggan för att kryptera om på enheten %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Det går inte att skriva till enheten %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Det går inte att skriva loggfil för omkryptering."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Det går inte att läsa loggfil för omkryptering."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Loggfilen %s existerar, återupptar kryptering.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Aktiverar temporär enhet användandes gammalt LUKS-huvud."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Aktiverar temporär enhet användandes nytt LUKS-huvud."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Aktivering av temporära enheter misslyckades."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Misslyckades med att sätta dataoffset."
 
-#: src/cryptsetup_reencrypt.c:565
-#, fuzzy
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
-msgstr "Misslyckades med att sätta dataoffset."
+msgstr "Misslyckades med att sätta metadatastorlek."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Skapade nytt LUKS-huvud för enhet %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Denna version av cryptsetup-reencrypt kan inte hantera ny interna tokentypen %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Misslyckades med att läsa aktiveringsflaggor från säkerhetskopia av huvud."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
-msgstr "Misslyckades med att skriva aktiveringsflaggor till nya huvuden.:"
+msgstr "Misslyckades med att skriva aktiveringsflaggor till nytt huvud."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Misslyckades med att läsa krav från säkerhetskopiehuvud."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Skapade säkerhetskopia av %s-huvud på enhet %s."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Misslyckades med att skapa en säkerhetskopia av LUKS-huvuden."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Det går inte återställa %s-huvudet på enheten %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Återställde %s-huvudet på enheten %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Misslyckades med att öppna temporär LUKS-enhet."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Det går inte att hämta enhetsstorlek."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "In-/utfel under återkryptering."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Angivet UUID är ogiltigt."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Det går inte att öppna loggfilen för omkryptering."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Ingen dekryptering pågår, givet UUID kan endast användas för att återuppta vilande dekrypteringsprocess."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
-msgstr "Ändrade pbkdf-parametrarna i nyckelplatsen %i.:1"
+msgstr "Ändrade pbkdf-parametrarna i nyckelplatsen %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Blockstorlek för omkryptering"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Ändra inte nyckel, ingen omkryptering av dataområde"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Läs volymnyckeln (master) från fil"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "PBKDF2-iterationstid för LUKS (i ms)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Använd direct-io vid enhetsåtkomst"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Använd fsync efter varje block"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Uppdatera loggfilen efter varje block"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Använd endast denna plats (andra kommer att inaktiveras)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Skapa nytt huvud på icke-krypterad enhet"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Dekryptera enheten permanent (ta bort kryptering)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "Det UUID som används för att återuppta kryptering"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Typ av LUKS-metadata: luks1, luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[FLAGGA…] <enhet>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Omkryptering kommer att ändra: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "volymnyckeln"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "sätt hash till "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", sätt chiffer till "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Kräver argument."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Endast värden mellan 1 MiB och 64 MiB är tillåtna som blockstorlek för omkryptering."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Högsta förminskningsstorlek för enhet är 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Flaggan --new måste användas tillsammans med --reduce-device-size eller --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Flaggan --keep-key kan endast användas med --hash, --iter-time eller --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Flaggan --new kan inte användas tillsammans med --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Flaggan --decrypt är inkompatibel med specificerade parametrar."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Flaggan --uuid är endast tillåten tillsammans med --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Ogiltig luks-typ. Använd en av dessa: 'luks', 'luks1' or 'luks2'."
 
@@ -3794,33 +3777,32 @@ msgstr "okänt fel"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Kommandot misslyckades med kod %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Nyckelplats %i är ändrad."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Nyckelplats %i är upplåst."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Nyckelplats %i är upplåst."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Token %i används."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Token %i används."
 
-#: src/utils_tools.c:464
-#, fuzzy
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3828,64 +3810,63 @@ msgstr ""
 "\n"
 "Skrivning avbruten."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "VARNING: Enheten %s innehåller redan en ”%s”-partitionssignatur.\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "VARNING: Enheten %s innehåller redan en ”%s”-superblocksignatur.\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Misslyckades med att initiera identifiering av enhetssignatur."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Misslyckades med att ta status på enhet %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Enheten %s används. Det går inte att fortsätta med formateringsåtgärden."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Misslyckades med att öppna filen %s i läs-/skrivläge."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
-msgstr ""
+msgstr "Kommer att rensa befintlig ”%s”-partitionssignatur (förskjutning: %<PRIi64> byte) på enheten %s."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
-msgstr ""
+msgstr "Kommer att rensa befintlig ”%s”-superblocksignatur (förskjutning: %<PRIi64> byte) på enheten %s."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Misslyckades med att radera enhetssignatur."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Misslyckades med söka av enheten %s efter en signatur."
 
-#: src/utils_tools.c:629
-#, fuzzy
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr ""
 "\n"
-"Läsning avbryten."
+"Omkryptering avbryten."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Det går inte att kontrollera lösenordskvalitet: %s"
@@ -3904,46 +3885,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Misslyckades med kvalitetskontroll av lösenord: Dålig lösenfras (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Fel vid läsning av lösenfras från terminal."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Verifiera lösenfras: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Lösenfraserna stämmer inte överens."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Det går inte att använda offset med terminalinmatning."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Ange lösenfras: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Ange lösenfras för %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Ingen nyckel finns tillgänglig med denna lösenfras."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
-msgstr ""
+msgstr "Ingen tillgänglig användbar nyckelplats."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Det går inte att öppna nyckelfilen %s för skrivning."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Det går inte att skriva till nyckelfilen %s."
@@ -3986,6 +3967,29 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Misslyckades med att skriva JSON-fil."
 
+#, c-format
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "VARNING:Låskatalog %s/%s saknas!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Ogiltig storlek på parametrar för verity-enhet."
+
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Misslyckades med att inaktivera flaggan för omkrypteringskrav."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Verkar som enheten inte kräver omkrypteringsåterställning.\n"
+#~ "Vill du ändå fortsätta?"
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Integritetsalgoritm måste specificieras om integritetsnyckel används."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Fel nyckelstorlek."
+
 #~ msgid "Requested dmcrypt performance options are not supported."
 #~ msgstr "Begärda flaggor för dmcrypt-prestanda stöds inte."
 
@@ -4007,8 +4011,9 @@ msgstr "Misslyckades med att skriva JSON-fil."
 #~ msgid "open device as mapping <name>"
 #~ msgstr "öppna enhet som mappning <namn>"
 
+#, fuzzy
 #~ msgid "Parameter --refresh is only allowed with open or refresh commands.\n"
-#~ msgstr "Flaggan --refresh är endast tillåten för kommandot open eller refresh.\n"
+#~ msgstr "Flaggan --refresh är endast tillåten för kommandona open eller refresh."
 
 #~ msgid "Unsupported encryption sector size.\n"
 #~ msgstr "Stöder inte sektorstorlek för kryptering.\n"
index 8543bd3..dfd326a 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index bfa8f2c..947e638 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2012 Free Software Foundation, Inc.
 # This file is put in the public domain.
 #
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: cryptsetup 2.3.3-rc0\n"
+"Project-Id-Version: cryptsetup 2.3.6-rc0\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
-"PO-Revision-Date: 2020-05-15 15:17+0300\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
+"PO-Revision-Date: 2021-05-22 18:02+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
@@ -17,63 +17,64 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 20.07.70\n"
+"X-Generator: Lokalize 20.12.0\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Не можна ініціалізувати device-mapper, якщо програму запущено не від імені адміністратора (root)."
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "Не вдалося ініціалізувати device-mapper. Чи завантажено модуль ядра dm_mod?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "Підтримки бажаного прапорця відкладення, %s, не передбачено."
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "DM-UUID для пристрою %s було обрізано."
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr "Невідомий тип призначення dm."
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Підтримки вказаних параметрів швидкодії dm-crypt не передбачено."
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Підтримки вказаних параметрів обробки пошкоджених даних за допомогою dm-verity не передбачено."
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Підтримки вказаних параметрів FEC за допомогою dm-verity не передбачено."
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "Підтримки вказаних параметрів цілісності даних не передбачено."
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "Підтримки вказаного параметра sector_size не передбачено."
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Підтримки потрібного вам автоматичного повторного обчислення міток цілісності не передбачено."
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 msgid "Discard/TRIM is not supported."
 msgstr "Підтримки відкидання або обрізання не передбачено."
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Підтримки вказаного режиму бітової карти цілісності dm не передбачено."
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr "Не вдалося опитати сегмент dm-%s."
@@ -115,7 +116,7 @@ msgstr "Не вдалося ініціалізувати допоміжну пр
 msgid "Cannot initialize crypto backend."
 msgstr "Не вдалося ініціалізувати допоміжну програму шифрування."
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Підтримки алгоритму хешування %s не передбачено."
@@ -129,7 +130,7 @@ msgstr "Помилка під час обробки ключа (на основ
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Не вдалося визначити тип пристрою. Несумісна дія з активації пристрою?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "Підтримку цієї дії передбачено лише для пристроїв LUKS."
 
@@ -137,7 +138,7 @@ msgstr "Підтримку цієї дії передбачено лише дл
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Підтримку цієї дії передбачено лише для пристроїв LUKS2."
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "Заповнено всі слоти ключів."
 
@@ -151,7 +152,7 @@ msgstr "Слот ключа %d є некоректним, будь ласка, 
 msgid "Key slot %d is full, please select another one."
 msgstr "Слот ключа %d заповнено, будь ласка, виберіть інший."
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 msgid "Device size is not aligned to device logical block size."
 msgstr "Розмір пристрою не вирівняно за розміром логічного блоку пристрою."
 
@@ -160,7 +161,8 @@ msgstr "Розмір пристрою не вирівняно за розмір
 msgid "Header detected but device %s is too small."
 msgstr "Виявлено заголовок, але об’єм пристрою %s є надто малим."
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "Підтримки цієї дії для цього типу пристроїв не передбачено."
 
@@ -168,17 +170,13 @@ msgstr "Підтримки цієї дії для цього типу прист
 msgid "Illegal operation with reencryption in-progress."
 msgstr "Виконуємо заборонену дію із повторного шифрування."
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Непідтримувана версія LUKS, %d."
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "Підтримки пристрою від'єднаних метаданих для цього типу шифрування не передбачено."
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "Пристрій %s є неактивним."
@@ -192,7 +190,7 @@ msgstr "Зник основний пристрій для пристрою дл
 msgid "Invalid plain crypt parameters."
 msgstr "Некоректні параметри звичайного шифрування."
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "Некоректний розмір ключа."
 
@@ -200,12 +198,16 @@ msgstr "Некоректний розмір ключа."
 msgid "UUID is not supported for this crypt type."
 msgstr "Підтримки UUID для цього типу шифрування не передбачено."
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "Підтримки пристрою від'єднаних метаданих для цього типу шифрування не передбачено."
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "Непідтримуваний розмір сектора шифрування."
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 msgid "Device size is not aligned to requested sector size."
 msgstr "Розмір пристрою не вирівняно за вказаним розміром сектора."
 
@@ -249,8 +251,8 @@ msgstr "Увага: розмір метаданих LUKS2 змінено до %<
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr "Увага: розмір області слотів ключів LUKS2 змінено до %<PRIu64> байтів.\n"
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "Об’єм пристрою %s є надто малим."
@@ -283,16 +285,16 @@ msgstr "Не можна форматувати LOOPAES без пристрою."
 msgid "Can't format VERITY without device."
 msgstr "Форматування VERITY без пристрою неможливе."
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Непідтримуваний тип хешування VERITY, %d."
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "Непідтримуваний розмір блоку VERITY."
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "Непідтримуваний відступ хешу VERITY."
 
@@ -322,236 +324,236 @@ msgstr "Увага: бажаний розмір мітки у %d байтів в
 msgid "Unknown crypt device type %s requested."
 msgstr "Надіслано запит щодо невідомого типу пристрою шифрування, %s."
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Непідтримувані параметри на пристрої %s."
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Невідповідність параметрів на пристрої %s."
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr "Невідповідність пристроїв шифрування."
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, c-format
 msgid "Failed to reload device %s."
 msgstr "Не вдалося перезавантажити пристрій %s."
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, c-format
 msgid "Failed to suspend device %s."
 msgstr "Не вдалося приспати пристрій %s."
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, c-format
 msgid "Failed to resume device %s."
 msgstr "Не вдалося відновити роботу пристрою %s."
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr "Критична помилка під час перезавантаження пристрої %s (над пристроєм %s)."
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Не вдалося перемкнути пристрій %s у режим dm-error."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "Неможливо змінити розмір петльового пристрою."
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Ви справді хочете змінити UUID пристрою?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Файл резервної копії заголовка не містить сумісного із LUKS заголовка."
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "Том %s не є активним."
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "Том %s вже приспано."
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Підтримки присипляння для пристрою %s не передбачено."
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "Помилка під час спроби приспати пристрій %s."
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "Том %s не приспано."
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Підтримки дії з пробудження для пристрою %s не передбачено."
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "Помилка під час спроби пробудити пристрій %s."
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "Том %s не приспано."
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "Ключ тому не відповідає тому."
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Не вдалося додати слот ключа, всі слоти вимкнено і не вказано ключа тому."
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "Не вдалося зарезервувати новий слот ключа."
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "Слот ключа %d є некоректним."
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, c-format
 msgid "Keyslot %d is not active."
 msgstr "Слот ключа %d не є активним."
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 msgid "Device header overlaps with data area."
 msgstr "Заголовок пристрою перекривається із областю даних."
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "Виконуємо повторне шифрування. Не можна активувати пристрій."
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 msgid "Failed to get reencryption lock."
 msgstr "Не вдалося отримати стан блокування для повторного шифрування."
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Не вдалося виконати відновлення даних повторного шифрування LUKS2."
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 msgid "Device type is not properly initialized."
 msgstr "Тип пристрою не ініціалізовано належним чином."
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Неможливо скористатися пристроєм %s, некоректна назва або пристрій усе ще використовується."
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "Пристрій %s вже існує."
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Неможливо скористатися пристроєм %s, некоректна назва або пристрій усе ще використовується."
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "Для пристрою зі звичайним шифруванням вказано помилковий ключ тому."
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "Для пристрою перевірки вказано помилковий кореневий хеш."
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr "Потрібен хеш-підпис кореневої теки."
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "Немає сховища ключів ядра: це сховище потрібне для передавання підпису ядру."
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "Не вдалося завантажити ключ до сховища ключів ядра."
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "Пристрій %s все ще використовується."
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "Некоректний пристрій %s."
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "Буфер ключів тому є занадто малим."
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Неможливо отримати ключ тому для пристрою зі звичайним шифруванням."
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Не вдалося отримати кореневий хеш для пристрою VERITY."
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Підтримки цієї дії для шифрованого пристрою %s не передбачено."
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "Підтримки дії зі створення дампу для цього типу пристроїв не передбачено."
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr "Зсув у даних не є кратним до %u байтів."
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Не можна перетворити пристрій %s, який перебуває у користуванні."
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "Не вдалося прив'язати слот ключа %u як новий ключ тому."
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "Не вдалося ініціалізувати типові параметри слоту ключів LUKS2."
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Не вдалося прив'язати слот ключа %d до контрольної суми."
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "У ядрі не передбачено підтримки сховища ключів ядра."
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Не вдалося прочитати пароль із ключа зі сховища ключів (помилка %d)."
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr "Не вдалося створити загальне блокування серіалізації доступу до пам'яті."
 
@@ -579,8 +581,8 @@ msgstr "Не вдалося отримати статистичні дані щ
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Не вдалося встановити потрібну позицію у файлі ключа."
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "Під час читання пароля вичерпано пам’ять."
 
@@ -600,51 +602,56 @@ msgstr "Перевищено максимальний розмір файла к
 msgid "Cannot read requested amount of data."
 msgstr "Не вдалося прочитати бажаний об’єм даних."
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Пристрою %s не існує або доступ до цього пристрою заборонено."
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, c-format
 msgid "Device %s is not compatible."
 msgstr "Пристрій %s є сумісним."
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr "Ігноруємо фіктивний розмір optimal-io для пристрою даних (%u байтів)."
+
+#: lib/utils_device.c:666
 #, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Обсяг пристрою %s є надто малим. Потрібно принаймні %<PRIu64> байтів."
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Не можна використовувати пристрій %s, оскільки його вже використано (призначено або змонтовано)."
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Не можна скористатися пристроєм %s, недостатні права доступу."
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "Не вдалося отримати дані щодо пристрою %s."
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Не можна використовувати петльовий пристрій, програму запущено не від імені адміністративного користувача (root)."
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Спроба долучення петльового пристрою зазнала невдачі (потрібен петльовий пристрій з встановленим прапорцем автоматичного спорожнення)."
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Бажана точка відступу перебуває за межами об’єму пристрою %s."
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "Об’єм пристрою %s є нульовим."
@@ -718,16 +725,16 @@ msgstr "Блокування перервано. Шлях блокування %
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "Ð\9fÐ\9eÐ\9fÐ\95РÐ\95Ð\94Ð\96Ð\95Ð\9dÐ\9dЯ: Ð½Ðµ Ð²Ð¸Ñ\81Ñ\82аÑ\87аÑ\94 Ð±Ð»Ð¾ÐºÑ\83ваннÑ\8f ÐºÐ°Ñ\82алогÑ\83 %s/%s!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr "Ð\91Ñ\83де Ñ\81Ñ\82воÑ\80ено ÐºÐ°Ñ\82алог Ð±Ð»Ð¾ÐºÑ\83ваннÑ\8f %s/%s Ñ\96з Ñ\82иповими Ð²Ð±Ñ\83дованими Ð¿Ñ\80авами Ð´Ð¾Ñ\81Ñ\82Ñ\83пÑ\83."
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "Блокування перервано Шлях блокування %s/%s є непридатним для користування (%s не є каталогом)."
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "Не вдалося встановити вказану позицію на пристрої."
 
@@ -754,8 +761,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr "Специфікацію шифрування слід вказувати так: [алгоритм]-[режим]-[iv]."
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Не вдалося виконати запис на пристрій %s, недостатні права доступу."
@@ -774,12 +781,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Помилка введення-виведення під час шифрування слоту ключів."
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "Не вдалося відкрити пристрій %s."
@@ -800,43 +807,43 @@ msgstr "Обсяг пристрою %s є надто малим. (LUKS1 потр
 msgid "LUKS keyslot %u is invalid."
 msgstr "Слот ключа LUKS %u є некоректним."
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Пристрій %s не є коректним пристроєм LUKS."
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Потрібний вам файл резервної копії заголовка, %s, вже існує."
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Не вдалося створити файл резервної копії заголовка, %s."
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Не вдалося записати файл резервної копії заголовка, %s."
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Файл резервної копії не містить коректного заголовка LUKS."
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Не вдалося відкрити файл резервної копії заголовка, %s."
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Не вдалося прочитати дані з файла резервної копії заголовка, %s."
@@ -858,7 +865,7 @@ msgstr "не містить заголовка LUKS. Заміна заголов
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "вже містить заголовок LUKS. Заміна заголовка призведе до руйнування вже створених слотів ключів."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -870,101 +877,101 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Нестандартний розмір ключа, слід виправити дані вручну."
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Нестандартне вирівнювання слотів ключів, слід виправити дані вручну."
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "Виправлення слотів ключів."
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Слот ключа %i: виправлено відступ (%u -> %u)."
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Слот ключа %i: виправлено смужки (%u -> %u)."
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Слот ключа %i: зайвий підпис розділу."
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Слот ключа %i: дані ініціалізації (сіль) витерто."
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "Запис заголовка LUKS на диск."
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Спроба виправлення зазнала невдачі."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Підтримки бажаного хешування LUKS, %s, не передбачено."
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "У заголовку LUKS не виявлено жодних проблем."
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Помилка під час оновлення заголовка LUKS на пристрої %s."
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Помилка під час спроби повторного читання заголовка LUKS після оновлення на пристрої %s."
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Відступ даних для заголовка LUKS має бути або рівним нулеві, або перевищувати розмір заголовка."
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "Вказано UUID LUKS у помилковому форматі."
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Не вдалося створити заголовок LUKS: помилка читання випадкових даних для ініціалізації."
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Не вдалося створити заголовок LUKS: помилка під час обчислення контрольної суми заголовка (з використанням хешу %s)."
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Слот ключа %d є активним. Його слід спочатку спорожнити."
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Ентропія даних слота ключа %d є надто низькою. Маніпуляції з заголовком?"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Не вдалося відкрити слот ключа (за допомогою хешу %s)."
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Слот ключа %d є некоректним, будь ласка, виберіть слот ключа з номером від 0 до %d."
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "Не вдалося витерти пристрій %s."
@@ -1000,11 +1007,11 @@ msgstr "Перевищено максимальну можливу довжин
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Засіб створення хешів PBKDF2 за алгоритмом %s недоступний, пропускаємо."
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "Потрібний для роботи інтерфейс ядра для шифрування недоступний."
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Переконайтеся, що завантажено модуль ядра algif_skcipher."
 
@@ -1017,159 +1024,173 @@ msgstr "Підтримки активації для розміру сектор
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "У ядрі не передбачено підтримки вмикання цього застарілого режиму TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Активуємо шифрування системи за допомогою TCRYPT для розділу %s."
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "У ядрі не передбачено підтримки призначення, сумісного з TCRYPT."
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Підтримки цієї дії без завантаження заголовка TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr "Під час обробки підтримуваного основного ключа тому виявлено неочікуваний тип запису метаданих «%u»."
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr "Під час обробки основного ключа тому виявлено некоректний рядок."
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr "Під час обробки підтримуваного основного ключа тому виявлено неочікуваний рядок («%s»)."
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr "Під час обробки підтримуваного основного ключа тому виявлено неочікуване значення запису метаданих «%u»."
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Не вдалося прочитати підпис BITLK з %s."
 
-#: lib/bitlk/bitlk.c:485
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
+msgstr "Некоректний або невідомий підпис для пристрою BITLK."
+
+#: lib/bitlk/bitlk.c:520
 msgid "BITLK version 1 is currently not supported."
 msgstr "Підтримки BITLK версії 1 у поточній версії не передбачено."
 
-#: lib/bitlk/bitlk.c:491
+#: lib/bitlk/bitlk.c:526
 msgid "Invalid or unknown boot signature for BITLK device."
 msgstr "Некоректний або невідомий підпис завантаження для пристрою BITLK."
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
-msgstr "Некоректний або невідомий підпис для пристрою BITLK."
-
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Непідтримуваний розмір сектора %<PRIu16>."
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Не вдалося прочитати заголовок BITLK з %s."
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "Не вдалося прочитати метадані FVE BITLK з %s."
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 msgid "Unknown or unsupported encryption type."
 msgstr "Невідомий або непідтримуваний тип шифрування."
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "Не вдалося прочитати записи метаданих BITLK з %s."
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr "Під час обробки зовнішнього ключа виявлено неочікуваний тип запису метаданих «%u»."
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr "Під час обробки зовнішнього ключа виявлено неочікуване значення запису метаданих «%u»."
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr "Під час обробки ключа запуску виявлено неочікуваний запис метаданих."
+
+#: lib/bitlk/bitlk.c:1071
 msgid "This operation is not supported."
 msgstr "Підтримки цієї дії не передбачено."
 
-#: lib/bitlk/bitlk.c:929
-msgid "Wrong key size."
-msgstr "Ð\9fомилковий Ñ\80озмÑ\96Ñ\80 ключа."
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr "Ð\9dеоÑ\87Ñ\96кÑ\83ваний Ñ\80озмÑ\96Ñ\80 Ð´Ð°Ð½Ð¸Ñ\85 ключа."
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr "Цей пристрій BITLK перебуває у непідтримуваному стані — його неможливо активувати."
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr "Пристрої BITLK типу «%s» неможливо активувати."
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "Активації частково розшифрованого пристрою BITLK не передбачено."
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr "Не вдалося активувати пристрій — у dm-crypt ядра немає підтримки BITLK IV."
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr "Не вдалося активувати пристрій — у dm-crypt ядра немає підтримки дифузера Elephant BITLK."
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "На пристрої VERITY %s не використовується вбудований заголовок."
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Пристрій %s не є коректним пристроєм VERITY."
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Непідтримувана версія VERITY, %d."
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "Пошкоджено заголовок VERITY."
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "На пристрої %s вказано UUID VERITY у помилковому форматі."
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Помилка під час оновлення заголовка verity на пристрої %s."
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 msgid "Root hash signature verification is not supported."
 msgstr "Підтримки перевірки підпису кореневого хешу не передбачено."
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr "Помилки не може бути виправлено за допомогою пристрою FEC."
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr "За допомогою пристрою FEC виявлено %u придатних до виправлення помилок."
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 msgid "Kernel does not support dm-verity mapping."
 msgstr "У ядрі не передбачено підтримки прив'язки dm-verity."
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 msgid "Kernel does not support dm-verity signature option."
 msgstr "У ядрі не передбачено підтримки параметра підпису dm-verity."
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 msgid "Verity device detected corruption after activation."
 msgstr "Виявлено пошкодження даних на пристрої перевірки після активації."
 
@@ -1178,41 +1199,37 @@ msgstr "Виявлено пошкодження даних на пристрої
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Резервну область не занулено у позиції %<PRIu64>."
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "Переповнення відступу на пристрої."
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Помилка під час перевірки за позицією %<PRIu64>."
 
-#: lib/verity/verity_hash.c:276
-msgid "Invalid size parameters for verity device."
-msgstr "Некоректні параметри розміру для пристрою перевірки."
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "Переповнення області хешу."
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "Не вдалося перевірити область даних."
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "Не вдалося перевірити кореневий хеш."
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 msgid "Input/output error while creating hash area."
 msgstr "Під час створення області хешу сталася помилка введення або виведення даних."
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "Не вдалося створити область хешу."
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "Попередження: ядро не зможе задіяти пристрій, якщо розмір блоку перевищуватиме розмір сторінки (%u)."
@@ -1221,53 +1238,61 @@ msgstr "Попередження: ядро не зможе задіяти при
 msgid "Failed to allocate RS context."
 msgstr "Не вдалося розмістити контекст RS."
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 msgid "Failed to allocate buffer."
 msgstr "Не вдалося розмістити у пам'яті буфер."
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "Не вдалося прочитати блок RS %<PRIu64>, байт %d."
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "Не вдалося прочитати парність для блоку RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "Не вдалося відновити парність для блоку %<PRIu64>."
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "Не вдалося прочитати парність для блоку RS %<PRIu64>."
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr "Розміри блоків для FEC мають бути однаковими."
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr "Некоректна кількість байтів парності."
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr "Некоректна довжина сегмента FEC."
+
+#: lib/verity/verity_fec.c:302
 #, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Не вдалося визначити розмір для пристрою %s."
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "У ядрі не передбачено підтримки прив'язки dm-integrity."
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "У ядрі не передбачено підтримки вирівнювання фіксованих метаданих dm-integrity."
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr "Ядром відмовлено у активації небезпечного параметра повторного обчислення (див. застарілі параметри активації, щоб скористатися обчисленням попри це)."
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Не вдалося отримати блокування запису на пристрої %s."
@@ -1288,45 +1313,45 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Вказаний відступ у даних є надто малим."
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr "Увага: область слоту ключів є надто малою (%<PRIu64> байтів), доступна кількість слотів ключів LUKS2 буде дуже обмеженою.\n"
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Не вдалося отримати блокування читання на пристрої %s."
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr "У резервній копії %s виявлено заборонені вимоги щодо LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Зсуви даних на пристрої і на резервній копії різняться, не вдалося відновити."
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Двійкові заголовки із розмірами областей слотів ключів на пристрої і у резервній копії різняться, не вдалося відновити копію."
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Пристрій %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "не містить заголовка LUKS2. Заміна заголовка може зруйнувати дані, що зберігаються на пристрої."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "вже містить заголовок LUKS2. Заміна заголовка призведе до руйнування вже створених слотів ключів."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
@@ -1336,7 +1361,7 @@ msgstr ""
 "ПОПЕРЕДЖЕННЯ: виявлено невідомі вимоги LUKS2 у справжньому заголовку пристрою!\n"
 "Заміна заголовка резервною копією може пошкодити дані на пристрої!"
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
@@ -1346,58 +1371,58 @@ msgstr ""
 "ПОПЕРЕДЖЕННЯ: на пристрої виявлено дані незавершеного повторного шифрування!\n"
 "Заміна заголовка заголовком із резервної копії може пошкодити дані."
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "Проігноровано невідомий прапорець %s."
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr "Не вистачає ключа для сегмента dm-crypt %u"
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 msgid "Failed to set dm-crypt segment."
 msgstr "Не вдалося встановити сегмент dm-crypt."
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr "Не вдалося встановити сегмент dm-linear."
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr "Непідтримувані налаштування цілісності даних на пристрої."
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr "Виконуємо повторне шифрування. Не можна деактивувати пристрій."
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr "Не вдалося замінити пристрій %s, роботу якого призупинено, ціллю dm-error."
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "Не вдалося прочитати вимоги LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "Виявлено невідповідність вимог LUKS2."
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr "Дія є несумісною із пристроєм, який позначено для перешифрування застарілого варіанта. Перериваємо дію."
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr "Дія є несумісною із пристроєм, який позначено для перешифрування LUKS2. Перериваємо дію."
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr "Недостатньо пам'яті для відкриття слоту ключів."
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 msgid "Keyslot open failed."
 msgstr "Не вдалося відкрити слот ключів."
 
@@ -1427,7 +1452,7 @@ msgstr "Не вдалося пересунути область слотів к
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "Не вдалося пересунути область слотів ключів. Область слотів ключів LUKS2 є надто малою."
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "Не вдалося пересунути область слотів ключів."
 
@@ -1464,281 +1489,293 @@ msgstr "Не вдалося перетворити до формату LUKS1 —
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "не вдалося перетворити до формату LUKS1 — слот ключів %u є несумісним з LUKS1."
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Розмір «гарячої» ділянки має бути кратним до обчисленого вирівнювання ділянки (%zu байтів)."
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Розмір пристрою має бути кратним до обчисленого вирівнювання ділянки (%zu байтів)."
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Непідтримуваний режим стійкості %s"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Не вдалося ініціалізувати обгортку старого сховища сегментів."
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Не вдалося ініціалізувати обгортку нового сховища сегментів."
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 msgid "Failed to read checksums for current hotzone."
 msgstr "Не вдалося прочитати контрольні суми для поточної «гарячої» ділянки."
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Не вдалося прочитати «гарячу» ділянку, починаючи з %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Не вдалося розшифрувати сектор %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Не вдалося відновити сектор %zu."
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr "Розміри пристроїв джерела та призначення не збігаються. Розмір джерела — %<PRIu64>, розмір призначення — %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Не вдалося задіяти пристрій «гарячої» ділянки %s."
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr "Не вдалося задіяти пристрій-накладку %s зі справжньою таблицею походження."
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Не вдалося завантажити нову прив'язку для пристрою %s."
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr "Не вдалося освіжити тек пристрої для повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 msgid "Failed to set new keyslots area size."
 msgstr "Не вдалося встановити розмір області нових слотів ключів."
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Зміщення даних не вирівняно до запитаного розміру сектора для шифрування (%<PRIu32> байтів)."
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "Пристрій зберігання даних не вирівняно до запитаного розміру сектора для шифрування (%<PRIu32> байтів)."
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr "Зміщення даних (%<PRIu64> секторів) є меншим за майбутній зсув даних (%<PRIu64> секторів)."
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Не вдалося відкрити %s в ексклюзивному режимі (вже пов'язано або змонтовано)."
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Пристрій не позначено для повторного шифрування LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "Не вдалося завантажити контекст повторного шифрування LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 msgid "Failed to get reencryption state."
 msgstr "Не вдалося отримати стан повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 msgid "Device is not in reencryption."
 msgstr "Пристрій не перебуває у повторному шифруванні."
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr "Процес повторного шифрування вже виконується."
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 msgid "Failed to acquire reencryption lock."
 msgstr "Не вдалося створити блокування для повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr "Продовження повторного шифрування неможливе. Спочатку слід виконати відновлення повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr "Не збігаються розмір активного пристрою і запитаний розмір повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr "У параметрах повторного шифрування вказано некоректний розмір пристрою."
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "Виконується повторне шифрування. Неможливо виконати відновлення."
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr "Повторне шифрування LUKS2 вже ініційовано у метаданих."
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "Не вдалося ініціалізувати повторне шифрування LUKS2 лише у метаданих."
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr "Не вдалося встановити сегменти пристрою для наступної «гарячої» ділянки повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Не вдалося записати метадані стійкості для повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 msgid "Decryption failed."
 msgstr "Помилка розшифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Не вдалося записати «гарячу» ділянку, починаючи з %<PRIu64>."
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 msgid "Failed to sync data."
 msgstr "Не вдалося синхронізувати дані."
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr "Не вдалося оновити метадані після завершення обробки поточної «гарячої» зони повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 msgid "Failed to write LUKS2 metadata."
 msgstr "Не вдалося записати метадані LUKS2."
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr "Не вдалося витерти дані резервного сегмента."
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
-msgstr "Не вдалося вимкнути прапорець вимоги повторного шифрування."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "Не вдалося прив'язати ключ %d до слоту ключа %d."
+
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "Не вдалося отримати стан блокування для повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr "Критична помилка під час повторного шифрування фрагмента, починаючи з %<PRIu64>, довжиною у %<PRIu64> секторів."
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr "Не відновлюйте пристрій, якщо не заміните вручну пристрій призначення для помилок."
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr "Не вдалося виконати повторне шифрування. Неочікуваний стан засобу повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr "Не вказано контекст повторного шифрування або вказано некоректний контекст."
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 msgid "Failed to initialize reencryption device stack."
 msgstr "Не вдалося ініціалізувати стос пристроїв повторного шифрування."
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 msgid "Failed to update reencryption context."
 msgstr "Не вдалося оновити контекст повторного шифрування."
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Слот ключа %d є некоректним."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr "Немає вільного слоту ключів."
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Не вдалося створити вбудований ключ %s."
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Перевірку паролів не можна виконувати на основі вхідних даних, які надходять не з tty."
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Параметри шифрування слоту ключів можна встановлювати лише для пристроїв LUKS2."
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 msgid "No known cipher specification pattern detected."
 msgstr "Не виявлено жодного відомого зразка специфікації шифрування."
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "Попередження: параметр --hash у простому режимі із вказаним файлом ключа ігнорується.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "Попередження: параметр --keyfile-size проігноровано, розмір прочитаних даних збігається із розміром ключа шифрування.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr "На %s виявлено підписи пристроїв. Подальша обробка може пошкодити наявні дані."
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "Дію перервано.\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "Слід вказати параметр --key-file."
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "Введіть PIM VeraCrypt: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "Некоректне значення PIM: помилка обробки."
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "Некоректне значення PIM: 0."
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "Некоректне значення PIM: поза межами діапазону."
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 msgid "No device header detected with this passphrase."
 msgstr "Для цього пароля не виявлено заголовка пристрою."
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Пристрій %s не є коректним пристроєм BITLK."
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1749,88 +1786,96 @@ msgstr ""
 "без пароля. Цей дамп слід зберігати у зашифрованому форматі\n"
 "у безпечному місці."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr "Пристрій %s усе ще є активним, його заплановано для відкладеного вилучення.\n"
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr "Зміна розмірів активного пристрою потребує наявності ключа тому у сховищі ключів, але вказано параметр --disable-keyring."
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 msgid "Benchmark interrupted."
 msgstr "Тестування перервано."
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr "PBKDF2-%-9s     н/д\n"
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr "PBKDF2-%-9s %7u ітерацій за секунду для %zu-бітового ключа\n"
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr "%-10s н/д\n"
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr "%-10s %4u ітерацій, пам'ять: %5u, %1u паралельних потоків (процесорів) для %zu-бітового ключа (запит на %u мс часу)\n"
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 msgid "Result of benchmark is not reliable."
 msgstr "Результат тестування є ненадійним."
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Наближені значення під час перевірки визначаються лише за допомогою оперативної пам’яті (без запису на диск).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "№%*s Алгоритм |      Ключ |      Шифрування |   Розшифрування\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Шифрування  %s (розмір ключа — %i бітів) є недоступним."
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "№      Алгоритм |      Ключ |      Шифрування |   Розшифрування\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "н/д"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
-"Здається, пристрій не потребує відновлення повторного шифрування.\n"
-"Хочете виконати цю дію попри це?"
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Вкажіть пароль для відновлення повторного шифрування: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr "Ви справді хочете продовжити процедуру відновлення повторного шифрування LUKS2?"
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Вкажіть пароль для відновлення повторного шифрування: "
+
+#: src/cryptsetup.c:1195
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Вкажіть пароль для відновлення повторного шифрування: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Спробувати відновити заголовок пристрою LUKS?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
@@ -1838,104 +1883,108 @@ msgstr ""
 "Витираємо пристрій для ініціалізації контрольних сум для цілісності.\n"
 "Ви можете перервати цей процес натисканням комбінації клавіш CTRL+C (решта невитертого пристрою міститиме некоректну контрольну суму).\n"
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Не можна скасувати активацію тимчасового пристрою %s."
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr "Параметр цілісності може бути використано лише для формату LUKS2."
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Непідтримувані параметри розміру метаданих LUKS2."
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr "Файла заголовка не існує. Хочете його створити?"
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "Не вдалося створити файл заголовка %s."
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 msgid "No known integrity specification pattern detected."
 msgstr "Не виявлено жодного відомого зразка специфікації цілісності."
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Не можна використовувати %s як заголовок на диску."
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Дані на %s буде перезаписано без можливості відновлення."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "Не вдалося встановити параметри pbkdf."
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Зменшений відступ даних можна використовувати лише для від’єднаних заголовків LUKS."
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr "Неможливо визначити розмір ключа тому для LUKS без слотів ключів. Будь ласка, скористайтеся параметром --key-size."
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr "Пристрій задіяно, але не вдалося зробити прапорці сталими."
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Слот ключа %d позначено для вилучення."
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Це останній слот ключа. Пристрій стане непридатним для використання після спорожнення цього ключа."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Введіть будь-який інший пароль: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr "Дію перервано, слот ключів НЕ витерто.\n"
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Введіть пароль, який слід вилучити: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Введіть новий пароль для слота ключа: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Введіть будь-який пароль: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Введіть пароль, який слід змінити: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Введіть новий пароль: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Вкажіть пароль для слоту ключа, який буде перетворено: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "У команді isLuks можна використовувати лише один аргумент назви пристрою."
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
@@ -1946,12 +1995,12 @@ msgstr ""
 "без пароля. Цей дамп слід зберігати у зашифрованому форматі\n"
 "у безпечному місці."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Слот ключа %d не містить непов'язаного ключа."
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
@@ -1959,30 +2008,40 @@ msgstr ""
 "Дамп заголовка з непов'язаним ключем є конфіденційними даними.\n"
 "Цей дамп слід зберігати у зашифрованому форматі у безпечному місці."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, c-format
+msgid "%s is not active %s device name."
+msgstr "%s не є назвою активного пристрою %s."
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr "%s не є назвою активного пристрою LUKS або пропущено заголовок."
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 msgid "Option --header-backup-file is required."
 msgstr "Слід вказати параметр --header-backup-file."
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr "%s не є керованим cryptsetup пристроєм."
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Підтримки дії з оновлення для пристрою типу %s не передбачено."
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Нерозпізнаний тип пристрою метаданих, %s."
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 msgid "Command requires device and mapped name as arguments."
 msgstr "Аргументами команди мають бути назва пристрою та призначена до нього назва."
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -1991,95 +2050,95 @@ msgstr ""
 "У результаті виконання цієї операції буде витерто усі слоти ключів на пристрої %s.\n"
 "Після виконання цієї дії пристроєм не можна буде скористатися."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "Дію перервано, слоти ключів НЕ витерто.\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr "Некоректний тип LUKS. Передбачено підтримку лише luks1 і luks2."
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "Пристрій вже належить до типу %s."
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Ця дія перетворить %s до формату %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr "Дію перервано, дані пристрою НЕ перетворено.\n"
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "Пропущено параметр --priority, --label або --subsystem."
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, c-format
 msgid "Token %d is invalid."
 msgstr "Ключ %d є некоректним."
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr "Ключ %d використовується."
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Не вдалося додати ключ %d зі сховища ключів luks2."
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Не вдалося прив'язати ключ %d до слоту ключа %d."
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, c-format
 msgid "Token %d is not in use."
 msgstr "Ключ %d не використовується."
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 msgid "Failed to import token from file."
 msgstr "Не вдалося імпортувати ключ з файла."
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, c-format
 msgid "Failed to get token %d for export."
 msgstr "Не вдалося отримати ключ %d для експортування."
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr "Параметр --key-description є обов'язковим для дій із додавання ключів."
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr "Для виконання дії потрібен специфічний ключ. Скористайтеся параметром --token-id."
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, c-format
 msgid "Invalid token operation %s."
 msgstr "Некоректна дія з ключем %s."
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr "Автоматично виявлено активний пристрій dm «%s» для пристрою даних %s.\n"
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Пристрій %s не є блоковим пристроєм.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Не вдалося автоматично визначити утримувачів пристрою %s."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2092,233 +2151,242 @@ msgstr ""
 "Таке шифрування може призвести до пошкодження даних, якщо пристрій задіяно.\n"
 "Щоб запустити повторне шифрування у режимі без від'єднання, скористайтеся параметром --active-name.\n"
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 msgid "Invalid LUKS device type."
 msgstr "Некоректний тип пристрою LUKS."
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr "Шифрування без від'єднаного заголовка (--header) є неможливим без зменшення розміру пристрою зберігання даних (--reduce-device-size)."
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr "Вказаний зсув даних має бути меншим або рівним половині значення параметра --reduce-device-size."
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr "Коригуємо значення --reduce-device-size до подвійного значення --offset %<PRIu64> (у секторах).\n"
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Підтримку шифрування передбачено лише для формату LUKS2."
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr "Виявлено пристрій LUKS на %s. Хочете зашифрувати цей пристрій LUKS знову?"
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Файл тимчасового заголовка %s вже існує. Перериваємо обробку."
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Не вдалося створити файл тимчасового заголовка %s."
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr "%s/%s задіяно, система готова до інтерактивного шифрування.\n"
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr "Підтримку розшифровування LUKS2 передбачено лише для пристроїв із від'єднаним заголовком."
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 msgid "Not enough free keyslots for reencryption."
 msgstr "Недостатньо вільних слотів ключів для повторного шифрування."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Файлом ключа можна користуватися лише з --key-slot, або якщо активним є лише один слот ключа."
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Вкажіть пароль для слоту ключа %d: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Вкажіть пароль для слоту ключа %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr "Перемикаємося на шифрування даних %s.\n"
+
+#: src/cryptsetup.c:3419
 msgid "Command requires device as argument."
 msgstr "Комарні слід передати аргумент пристрою."
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr "У поточній версії передбачено підтримку лише формату LUKS2. Для роботи з LUKS1, будь ласка, скористайтеся програмою cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr "Вже виконується повторне шифрування з від'єднанням у застарілому режимі. Скористайтеся програмою cryptsetup-reencrypt."
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "Підтримки повторного шифрування пристрою із профілем цілісності не передбачено."
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr "Вже ініційовано повторне шифрування LUKS2. Перериваємо виконання дії."
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 msgid "LUKS2 device is not in reencryption."
 msgstr "Пристрій LUKS2 не перебуває у стані повторного шифрування."
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<пристрій> [--type <тип>] [<назва>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "відкрити пристрій як <назва>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<назва>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "закрити пристрій (вилучити призначення)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "змінити розмір активного пристрою"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "показати стан пристрою"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <шифр>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "перевірити швидкодію шифрування"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<пристрій>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "спробувати виправити метадані на диску"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 msgid "reencrypt LUKS2 device"
 msgstr "повторно зашифрувати пристрій LUKS2"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "витерти усі слоти ключів (вилучити ключ шифрування)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "перетворити LUKS із формату LUKS2 або навпаки"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr "встановити сталі параметри налаштування для LUKS2"
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<пристрій> [<новий файл ключа>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "форматує пристрій LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "додати ключ до пристрою LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<пристрій> [<файл ключа>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "вилучає наданий ключ або файл ключа з пристрою LUKS"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "змінює наданий ключ або файл ключа пристрою LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr "перетворює ключ до нових параметрів pbkdf"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<пристрій> <слот ключа>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "вилучає ключ з номером <слот ключа> з пристрою LUKS"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "вивести UUID пристрою LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "виконати спробу виявлення заголовка розділу LUKS на пристрої <пристрій>"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "створити дамп даних щодо розділу LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "створити дамп даних пристрою TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 msgid "dump BITLK device information"
 msgstr "створити дамп даних пристрою BITLK"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Приспати пристрій LUKS і витерти ключ (роботу всіх каналів введення-виведення буде заморожено)"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "Відновити роботу приспаного пристрою LUKS"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Створити резервну копію заголовка пристрою LUKS і слотів ключів"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Відновити заголовок пристрою LUKS і слоти ключів"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr "<add|remove|import|export> <пристрій>"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr "Керування ключами LUKS2"
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2326,7 +2394,7 @@ msgstr ""
 "\n"
 "<дія> є однією з таких:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 msgid ""
 "\n"
 "You can also use old <action> syntax aliases:\n"
@@ -2339,7 +2407,7 @@ msgstr ""
 "\tвідкрити: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n"
 "\tзакрити: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2354,7 +2422,7 @@ msgstr ""
 "<слот ключа> — номер слота ключа LUKS, який слід змінити\n"
 "<файл ключа> — необов’язковий файл ключа для нового ключа для дії luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
@@ -2363,7 +2431,7 @@ msgstr ""
 "\n"
 "Типовий укомпільований формат метаданих — %s (для дії luksFormat).\n"
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, c-format
 msgid ""
 "\n"
@@ -2380,7 +2448,7 @@ msgstr ""
 "Типовий PBKDF для LUKS2: %s\n"
 "\tЧас ітерації: %d, потрібний обсяг пам'яті: %d кБ, паралельних потоків: %d\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, c-format
 msgid ""
 "\n"
@@ -2395,443 +2463,451 @@ msgstr ""
 "\tзвичайне: %s, ключ: %d-бітовий, хешування пароля: %s\n"
 "\tLUKS: %s, ключ: %d-бітовий, хешування заголовка LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr "\tLUKS: типовий розмір ключа у режимі XTS (два вбудованих ключа) буде подвоєно.\n"
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: слід вказати у параметрах %s"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Показати цю довідку"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Показати короткі настанови щодо користування"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Вивести дані щодо версії пакунка"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Пункти довідки:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Показувати докладні повідомлення про помилки"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Показувати діагностичні повідомлення"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 msgid "Show debug messages including JSON metadata"
 msgstr "Показувати діагностичні повідомлення, зокрема метадані JSON"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Шифр, який використано для шифрування даних диска (див. /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Хеш, використаний для створення ключа шифрування на основі пароля"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Перевіряє пароль повторним запитом щодо нього"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "Прочитати ключ з файла"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Прочитати ключ тому (основний ключ) з файла."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Створити дамп ключа тому (основного ключа) замість показу даних щодо слотів ключів"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Розмір ключа шифрування"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "БІТИ"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Обмежує читання з файла ключа"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "байти"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Кількість байтів, які слід пропустити у файлі ключа"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Обмежує читання з щойно доданого файла ключа"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Кількість байтів, які слід пропустити у щойно доданому файлі ключа"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Номер слоту для нового ключа (типовим слотом є перший вільний слот)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Розмір пристрою"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "СЕКТОРИ"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Використовувати лише вказаний розмір пристрою (ігнорувати решту об’єму). НЕБЕЗПЕЧНО!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Початковий відступ на допоміжному пристрої"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Кількість секторів зашифрованих даних, які слід пропустити на початку"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Створити призначення у режимі лише читання"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Не питати про підтвердження"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Час очікування у інтерактивному запиті щодо пароля (у секундах)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "секунди"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr "Оновлення лінії поступу (у секундах)"
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Частота повторень спроб отримання вхідних даних пароля"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Вирівняти дані за областями у <n> секторів, для luksFormat"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 msgid "File with LUKS header and keyslots backup"
 msgstr "Файл з заголовком LUKS та резервною копію слотів ключів"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "Використовувати для створення ключа тому /dev/random"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Використовувати для створення ключа тому /dev/urandom"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Використовувати пристрій спільно з іншим сегментом шифрування, без перекриття"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 msgid "UUID for device to use"
 msgstr "UUID пристрою, який слід використати"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Дозволити запити відкидання (або TRIM) до пристрою"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 msgid "Device or file with separated LUKS header"
 msgstr "Пристрій або файл з окремим заголовком LUKS"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 msgid "Do not activate device, just check passphrase"
 msgstr "Не задіювати пристрій, просто перевірити пароль"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Використовувати прихований заголовок (прихований пристрій TCRYPT)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Пристрій є системним диском TCRYPT (диском з завантажувачем)"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Використовувати резервний (вторинний) заголовок TCRYPT"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Виконати також пошук сумісних із VeraCrypt пристроїв"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) для сумісного з VeraCrypt пристрою"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) запису для сумісного з VeraCrypt пристрою"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Типи метаданих пристрою: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 msgid "Disable password quality check (if enabled)"
 msgstr "Вимкнути перевірку якості пароля (якщо її увімкнено)"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Скористатися параметром сумісності швидкодії dm-crypt same_cpu_crypt"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Скористатися параметром сумісності швидкодії dm-crypt submit_from_crypt_cpus"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr "Обійти чергу обробки dm-crypt і обробляти запити щодо читання синхронно"
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr "Обійти чергу обробки dm-crypt і обробляти запити щодо запису синхронно"
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr "Вилучення пристрою відкладено до часу, коли останній користувач закриє його"
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr "Скористатися загальним блокуванням для перетворення у послідовну форму «жорсткого» PBKDF у пам'яті (обхід OOM)"
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Тривалість ітерації PBKDF для LUKS (у мс)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "мс"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr "Алгоритм PBKDF (для LUKS2) (argon2i/argon2id/pbkdf2)"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "Обмеження вартості пам'яті PBKDF"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "кілобайти"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "Вартість розпаралелювання PBKDF"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "threads"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr "Вартість ітерацій PBKDF (примусово, вимикає тестування)"
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr "Пріоритетність слотів ключів: ignore, normal, prefer"
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 msgid "Disable locking of on-disk metadata"
 msgstr "Вимкнути блокування метаданих на диску"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr "Вимкнути завантаження ключів тому за допомогою сховища ключів ядра"
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr "Алгоритм перевірки цілісності даних (лише LUKS2)"
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr "Вимкнути журнал для пристрою забезпечення цілісності"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr "Не витирати пристрій після форматування"
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr "Скористатися неефективним застарілим відступом (застарілі ядра)"
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr "Не просити ввести пароль, якщо не вдасться скористатися активацією за ключем"
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr "Номер ключа (типове значення: будь-який)"
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr "Опис ключа"
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr "Розмір сектора шифрування (типове значення: 512 байтів)"
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr "Використовувати обчислення за IV у розмірі сектора (не за блоками у 512 байтів)"
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr "Встановити сталі прапорці активації для пристрою"
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 msgid "Set label for the LUKS2 device"
 msgstr "Встановити мітку для пристрою LUKS2"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "Встановити мітку підтому для пристрою LUKS2"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr "Створити непов'язаний (без пов'язаного сегмента даних) слот ключів LUKS2 або його дамп"
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 msgid "Read or write the json from or to a file"
 msgstr "Прочитати json з файла або записати json до файла"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr "Розмір області метаданих у заголовку LUKS2"
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 msgid "LUKS2 header keyslots area size"
 msgstr "Розмір області слотів ключів у заголовку LUKS2"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr "Оновити (повторно активувати) пристрій згідно з новими параметрами"
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Слот ключів LUKS2: розмір ключа шифрування"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr "Слот ключа LUKS2: шифрування, яке використано для слоту ключів"
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Зашифрувати пристрій LUKS2 (шифрування на місці)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Розшифрувати пристрій LUKS2 (усунути шифрування)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr "Ініціалізувати повторне шифрування LUKS2 лише у метаданих."
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr "Відновлювати лише ініціалізоване повторне шифрування LUKS2."
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Зменшити розмір пристрою зберігання даних (змістити відступ даних). НЕБЕЗПЕЧНО!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 msgid "Maximal reencryption hotzone size."
 msgstr "Максимальний розмір «гарячої» ділянки повторного шифрування."
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr "Тип стійкості «гарячої» ділянки повторного шифрування (checksum (контрольна сума), journal (журнал), none (немає))"
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 msgid "Reencryption hotzone checksums hash"
 msgstr "Хеш контрольних сум «гарячої» ділянки повторного шифрування"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr "Перевизначити автоматично визначені параметри пристрою dm, який буде повторно зашифровано"
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[ПАРАМЕТР...] <дія> <параметри_дії>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Не вказано аргумент <дія>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Невідома дія."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr "Не можна поєднувати параметри --refresh і --test-passphrase."
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 msgid "Option --deferred is allowed only for close command."
 msgstr "Параметр --deferred можна використовувати лише для команди закриття (close)."
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Параметр --shared можна використовувати лише для відкриття незашифрованого пристрою."
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Параметр --shared можна використовувати лише для дії з відкриття."
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Параметр --persistent можна використовувати лише для дії з відкриття."
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Параметр --serialize-memory-hard-pbkdf можна використовувати лише для дії з відкриття."
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "Параметр --persistent не можна використовувати разом із --test-passphrase."
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
 "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)."
@@ -2839,260 +2915,259 @@ msgstr ""
 "Параметр --key-size можна використовувати лише для luksFormat, luksAddKey,\n"
 "дій open і benchmark. Щоб обмежити читання з файла ключа, скористайтеся параметром --keyfile-size=(об’єм у байтах)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Параметр --integrity можна використовувати лише для luksFormat (LUKS2)."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr "Параметром --integrity-no-wipe можна користуватися лише для дії з форматування із розширенням забезпечення цілісності."
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Параметри --label і --subsystem можна використовувати лише для дій luksFormat та config для LUKS2."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Параметр --test-passphrase можна використовувати лише для відкриття пристроїв LUKS, TCRYPT та BITLK."
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Розмір ключа має бути кратним 8 бітам"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Некоректний слот ключа."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Параметр --key-file має пріоритет над вказаним параметром файла ключа."
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Не можна використовувати від’ємні значення для параметра."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Можна використовувати лише один аргумент --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Можна використовувати лише один з параметрів --use-[u]random."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Параметр --use-[u]random можна використовувати лише для дії luksFormat."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Параметр --uuid можна використовувати лише для дій luksFormat і luksUUID."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Параметр --align-payload можна використовувати лише для дії luksFormat."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "Параметрами --luks2-metadata-size і --opt-luks2-keyslots-size можна користуватися лише для luksFormat з LUKS2."
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Некоректна специфікація розміру метаданих LUKS2."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Некоректна специфікація розміру слоту ключів LUKS2."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Не можна одночасно використовувати параметри --align-payload і --offset."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Підтримку параметра --skip передбачено лише для відкриття незашифрованих пристроїв та пристроїв loopaes."
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Підтримку параметра --offset передбачено лише для відкриття незашифрованих пристроїв та пристроїв loopaes, luksFormat та повторного шифрування."
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Підтримку параметрів --tcrypt-hidden, --tcrypt-system і --tcrypt-backup передбачено лише для пристроїв TCRYPT."
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Параметр --tcrypt-hidden не можна поєднувати з --allow-discards."
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Підтримку параметра --veracrypt передбачено лише для пристроїв TCRYPT."
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr "Надано некоректний аргумент для параметра --veracrypt-pim."
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Параметр --veracrypt-pim можна використовувати лише для сумісних із VeraCrypt пристроїв."
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Параметр --veracrypt-query-pim можна використовувати лише для сумісних із VeraCrypt пристроїв."
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr "Не можна поєднувати параметри --veracrypt-pim і --veracrypt-query-pim."
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr "Значенням для параметра --priority може бути лише один з таких рядків: ignore, normal або prefer."
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr "Слід вказати специфікація слотів ключів."
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr "Функцією отримання ключа на основі пароля (PBKDF) може бути лише pbkdf2 або argon2i/argon2id."
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr "Примусові ітерації PBKDF не можна поєднувати із параметром тривалості ітерацій."
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 msgid "Sector size option is not supported for this command."
 msgstr "У цій команді не передбачено підтримки параметра розміру сектора."
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr "Підтримку можливості використання великих секторів IV передбачено лише для відкриття пристроїв простого типу з розміром сектора, який перевищує 512 байтів."
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr "Разом із параметром --unbound слід вказувати розмір ключа."
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "Параметр --unbound можна використовувати лише з діями luksAddKey і luksDump."
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 msgid "Option --refresh may be used only with open action."
 msgstr "Параметр --refresh можна використовувати лише під час дії з відкриття (open)."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr "Не вдалося вимкнути блокування метаданих."
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Некоректна специфікація розміру «гарячої» ділянки повторного шифрування."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Некоректна специфікація розміру пристрою."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Максимальний розмір зменшення розміру пристрою дорівнює 1 ГіБ."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Розмір зменшення має бути кратним до 512-байтового сектора."
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 msgid "Invalid data size specification."
 msgstr "Некоректна специфікація розміру даних."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 msgid "Reduce size overflow."
 msgstr "Переповнення розміру зменшення."
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr "Розшифрування LUKS2 потребує параметра --header."
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Розмір пристрою має бути кратним до 512-байтового сектора."
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr "Не можна одночасно використовувати параметри --reduce-device-size і --data-size."
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr "Не можна одночасно використовувати параметри --device-size і --size."
 
-#: src/cryptsetup.c:4014
-#, fuzzy
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
-msgstr "Параметри --ignore-corruption і --restart-on-corruption не можна використовувати одночасно."
+msgstr "Параметри --keyslot-cipher і --keyslot-key-size має бути використано разом."
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "Вказано некоректний рядок солі."
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Не вдалося створити образ хешу %s для запису."
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Не вдалося створити образ FEC %s для запису."
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 msgid "Invalid root hash string specified."
 msgstr "Вказано некоректний рядок кореневого хешу."
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, c-format
 msgid "Invalid signature file %s."
 msgstr "Некоректний файл підпису %s."
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, c-format
 msgid "Cannot read signature file %s."
 msgstr "Не вдалося прочитати файл підпису %s."
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<пристрій_даних> <пристрій_хешу>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "форматувати пристрій"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<пристрій_даних> <пристрій_хешу> <кореневий_хеш>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "перевірити пристрій"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<пристрій_даних> <назва> <пристрій_хешу> <кореневий_хеш>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "показати стан активного пристрою"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<пристрій_хешу>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "показати вбудовані дані"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3107,7 +3182,7 @@ msgstr ""
 "<пристрій_хешу> — пристрій, на якому зберігаються дані для перевірки\n"
 "<кореневий_хеш> — хеш кореневого вузла на пристрої <пристрій_хешу>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3118,126 +3193,139 @@ msgstr ""
 "Типові вбудовані параметри dm-verity:\n"
 "\tхеш: %s, блок даних (у байтах): %u, блок хешу (у байтах): %u, розмір солі: %u, формат хешування: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Не використовувати суперблок verity"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Тип форматування (1 — звичайне, 0 — початкове Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "номер"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Розмір блоку на пристрої даних"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Розмір блоку на пристрої хешу"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "Байти парності FEC"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Кількість блоків у файлі даних"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "блоки"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr "Шлях до пристрою із даними для виправлення помилок"
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr "шлях"
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Початковий відступ на пристрої хешу"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 msgid "Starting offset on the FEC device"
 msgstr "Початковий відступ на пристрої FEC"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Алгоритм хешування"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "рядок"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Сіль"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "шістнадцятковий рядок"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 msgid "Path to root hash signature file"
 msgstr "Шлях до файла підпису кореневого хешу"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Перезапустити ядро, якщо виявлено пошкодження"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr "Запустити паніку ядра, якщо виявлено пошкодження"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Ігнорувати пошкодження, лише записати повідомлення до журналу"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Не перевіряти занулені блоки"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr "Перевіряти блок даних лише під час його першого читання"
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Параметри --ignore-corruption, --restart-on-corruption та --ignore-zero-blocks можна використовувати лише для дії з відкриття (open)."
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Параметром --root-hash-signature можна користуватися лише для дії з відкриття."
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Параметри --ignore-corruption і --restart-on-corruption не можна використовувати одночасно."
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Параметри --panic-on-corruption і --restart-on-corruption не можна використовувати одночасно."
+
+#: src/integritysetup.c:85
+#, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Некоректний розмір ключа. Максимальний розмір дорівнює %u байтів."
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Не вдалося прочитати файл ключа %s."
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Не вдалося прочитати %d байтів з файла ключа %s."
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr "Форматовано із розміром мітки %u, внутрішня цілісність %s.\n"
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 msgid "<integrity_device>"
 msgstr "<пристрій_цілісності>"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr "<пристрій_цілісності> <назва>"
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, c-format
 msgid ""
 "\n"
@@ -3248,403 +3336,409 @@ msgstr ""
 "<назва> є пристроєм, який слід створити у %s\n"
 "<пристрій_цілісності> є пристроєм, на якому зберігаються дані із мітками цілісності\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "Типові компільовані параметри dm-integrity:\n"
 "\tАлгоритм обчислення контрольної суми: %s\n"
+"\tМаксимальний розмір файла ключа: %d кБ\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr "Шлях до пристрою даних (якщо відокремлено)"
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "Розмір журналу"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr "Перемежовування секторів"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr "«Водяний знак» журналу"
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr "відсоток"
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "Час внесення до журналу"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr "мс"
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr "Кількість 512-байтових секторів на біт (режим бітової карти)."
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr "Час спорожнення режиму бітової карти"
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr "Розмір мітки на сектор"
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "Розмір сектора"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "Розмір буферів"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "Алгоритм забезпечення цілісності даних"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 msgid "The size of the data integrity key"
 msgstr "Розмір ключа цілісності даних"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 msgid "Read the integrity key from a file"
 msgstr "Прочитати ключ цілісності з файла"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr "Алгоритм забезпечення цілісності журналу"
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 msgid "The size of the journal integrity key"
 msgstr "Розмір ключа цілісності журналу"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 msgid "Read the journal integrity key from a file"
 msgstr "Прочитати ключ цілісності журналу з файла"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "Алгоритм шифрування журналу"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 msgid "The size of the journal encryption key"
 msgstr "Розмір ключа шифрування журналу"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 msgid "Read the journal encryption key from a file"
 msgstr "Читати ключ шифрування журналу з файла"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr "Режим відновлення (без журналу, без перевірки міток)"
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "Використовувати для стеження за змінами бітову карту і вимкнути журнал для пристрою забезпечення цілісності"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr "Обчислювати початкові мітки автоматично."
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr "Не захищати суперблок HMAC (застарілі ядра)"
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr "Дозволити повторне обчислення томів за допомогою ключів HMAC (застарілі ядра)"
+
+#: src/integritysetup.c:672
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Параметр --integrity-recalculate можна використовувати лише під час дії з відкриття (open)."
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr "Параметри --journal-size, --interleave-sectors, --sector-size, --tag-size та --no-wipe можна використовувати лише для дії з форматування."
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "Некоректна специфікація розміру журналу."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "Не можна одночасно вказувати параметри файла ключа і розміру ключа."
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr "Якщо використано ключ цілісності, має бути вказано алгоритм забезпечення цілісності."
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr "Не можна одночасно вказувати параметри файла ключа цілісності журналу і розміру ключа."
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "Якщо використано ключ цілісності журналу, має бути вказано алгоритм забезпечення цілісності журналу."
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "Не можна одночасно вказувати параметри файла ключа шифрування журналу і розміру ключа."
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "Якщо використано ключ шифрування журналу, має бути вказано алгоритм забезпечення шифрування журналу."
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr "Не можна поєднувати параметри відновлення і бітової карти."
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr "Параметри журналу у режимі бітової карти використовувати не можна."
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr "Параметри бітової карти можна використовувати лише у режимі бітового карти."
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "Вже виконується повторне шифрування."
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Не можна відкрити %s у виключному режимі, пристрій вже використовується."
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "Спроба розподілу вирівняних ділянок пам’яті зазнала невдачі."
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "Не вдалося виконати читання з пристрою %s."
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Позначаємо пристрій LUKS1 %s як непридатний."
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "Встановлюємо прапорець повторного шифрування LUKS2 з від'єднанням на пристрій %s."
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "Не вдалося виконати запис на пристрій %s."
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "Не вдалося записати файл журналу повторного шифрування."
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "Не вдалося прочитати файл журналу повторного шифрування."
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Файл журналу %s вже існує, поновлюємо повторне шифрування.\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "Спроба задіяти тимчасовий пристрій за допомогою старого заголовка LUKS."
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "Спроба задіяти тимчасовий пристрій за допомогою нового заголовка LUKS."
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "Спроба задіяти тимчасові пристрої зазнала невдачі."
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 msgid "Failed to set data offset."
 msgstr "Не вдалося встановити відступ у даних."
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 msgid "Failed to set metadata size."
 msgstr "Не вдалося встановити розмір метаданих."
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Створено новий заголовок LUKS для пристрою %s."
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "Ця версія cryptsetup-reencrypt не може обробляти новий тип вбудованих ключів %s."
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "Не вдалося прочитати прапорці активації з резервного заголовка."
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "Не вдалося записати прапорці активації до нового заголовка."
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "Не вдалося прочитати вимоги із резервного заголовка."
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "Створено резервну копію заголовка %s пристрою %s."
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "Спроба створення заголовків резервних копій LUKS зазнала невдачі."
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Не вдалося відновити заголовок %s на пристрої %s."
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "Відновлено заголовок %s на пристрої %s."
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "Неможливо відкрити тимчасовий пристрій LUKS."
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "Не вдалося отримати дані щодо розміру пристрою."
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "Помилка введення-виведення під час повторного шифрування."
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "Наданий UUID є некоректним."
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "Не вдалося відкрити файл журналу повторного шифрування."
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Розшифровування не виконується. Наданий UUID можна використовувати лише для відновлення призупиненого процесу розшифровування."
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "Змінено параметри pbkdf у слоті ключа %i."
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Розмір блоку повторного шифрування"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "МіБ"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "Не змінювати ключ, не виконувати повторного шифрування області даних"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "Прочитати новий ключ тому (основний ключ) з файла"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Тривалість ітерації PBKDF2 для LUKS (у мс)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "Використовувати безпосереднє введення-виведення під час доступу до пристроїв"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "Використовувати fsync після кожного блоку"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "Оновлювати файл журналу після кожного блоку"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "Використовувати лише цей слот (інші буде вимкнено)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "Створити новий заголовок на незашифрованому пристрої"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Остаточно розшифрувати пристрій (скасувати шифрування)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "UUID, що використовується для відновлення розшифровування"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Тип метаданих LUKS (luks1 або luks2)"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[ПАРАМЕТР...] <пристрій>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Повторне шифрування призведе до зміни: %s%s%s%s%s%s."
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "ключ тому"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "встановити хеш у значення "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", встановити шифрування "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Слід вказати аргумент."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Розмір блоку повторного шифрування повинен належати діапазону від 1 МіБ до 64 МІБ."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Максимальний розмір зменшення розміру пристрою дорівнює 64 МіБ."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Параметр --new слід використовувати разом з --reduce-device-size або --header."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Параметр --keep-key можна використовувати лише разом з параметром --hash --iter-time або --pbkdf-force-iterations."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Параметр --new не можна використовувати разом з --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Параметр --decrypt є несумісним із вказаними параметрами."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Параметр --uuid можна використовувати лише разом із --decrypt."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "Некоректний тип luks. Скористайтеся одним з таких типів: luks, luks1 або luks2."
 
@@ -3685,32 +3779,32 @@ msgstr "невідома помилка"
 msgid "Command failed with code %i (%s).\n"
 msgstr "Спроба виконання команди завершилася повідомленням про помилку з кодом %i (%s).\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, c-format
 msgid "Key slot %i created."
 msgstr "Створено слот ключа %i."
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, c-format
 msgid "Key slot %i unlocked."
 msgstr "Слот ключа %i розблоковано."
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, c-format
 msgid "Key slot %i removed."
 msgstr "Слот ключа %i вилучено."
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr "Створено ключ %i."
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr "Ключ %i вилучено."
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
@@ -3718,55 +3812,55 @@ msgstr ""
 "\n"
 "Витирання перервано."
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr "Попередження: пристрій %s вже містить підпис розділу «%s».\n"
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr "Попередження: пристрій %s вже містить підпис суперблоку «%s».\n"
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 msgid "Failed to initialize device signature probes."
 msgstr "Не вдалося ініціалізувати зондування підписів пристроїв."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, c-format
 msgid "Failed to stat device %s."
 msgstr "Не вдалося зібрати статистичні дані щодо пристрою %s."
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr "Пристрій %s використовується сторонньою програмою. Продовження дій з форматування неможливе."
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "Не вдалося відкрити файл %s у режимі читання-запису."
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Наявний підпис розділу «%s» (зміщення: %<PRIi64> байтів) на пристрої %s буде витерто."
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr "Наявний підпис суперблоку «%s» (зміщення: %<PRIi64> байтів) на пристрої %s буде витерто."
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 msgid "Failed to wipe device signature."
 msgstr "Не вдалося витерти підпис пристрою."
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Не вдалося виконати зондування пристрою %s з метою виявлення підпису."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 msgid ""
 "\n"
 "Reencryption interrupted."
@@ -3774,7 +3868,7 @@ msgstr ""
 "\n"
 "Повторне шифрування перервано."
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Не вдалося перевірити якість пароля: %s"
@@ -3793,46 +3887,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Помилка під час спроби оцінити якість пароля: некоректний пароль (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "Помилка під час читання пароля з термінала."
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Перевірка пароля: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "Паролі не збігаються."
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "Не можна використовувати відступ у даних, що надходять з термінала."
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Введіть пароль: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Введіть пароль до %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "Для цього пароля немає відповідного ключа."
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr "Немає доступних придатних до користування слотів ключів."
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Не вдалося відкрити файл ключа %s для запису."
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Не вдалося виконати запису до файла ключа %s."
@@ -3874,3 +3968,25 @@ msgstr ""
 #: src/utils_luks2.c:126
 msgid "Failed to write JSON file."
 msgstr "Не вдалося записати файл JSON."
+
+#~ msgid "Failed to disable reencryption requirement flag."
+#~ msgstr "Не вдалося вимкнути прапорець вимоги повторного шифрування."
+
+#~ msgid ""
+#~ "Seems device does not require reencryption recovery.\n"
+#~ "Do you want to proceed anyway?"
+#~ msgstr ""
+#~ "Здається, пристрій не потребує відновлення повторного шифрування.\n"
+#~ "Хочете виконати цю дію попри це?"
+
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "ПОПЕРЕДЖЕННЯ: не вистачає блокування каталогу %s/%s!\n"
+
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "Некоректні параметри розміру для пристрою перевірки."
+
+#~ msgid "Integrity algorithm must be specified if integrity key is used."
+#~ msgstr "Якщо використано ключ цілісності, має бути вказано алгоритм забезпечення цілісності."
+
+#~ msgid "Wrong key size."
+#~ msgstr "Помилковий розмір ключа."
index b1aa5d1..592a0c9 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup 1.7.4\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2017-03-05 15:08+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -21,74 +21,75 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Gtranslator 2.91.7\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 #, fuzzy
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "Không thể khởi tạo ánh-xạ-thiết-bị (device-mapper), do không chạy dưới quyền siêu người dùng.\n"
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 #, fuzzy
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr ""
 "Không thể khởi tạo tiến trình ánh xạ thiết bị.\n"
 "Mô-đun hạt nhân “dm_mod” được nạp chưa?\n"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 #, fuzzy
 msgid "Requested deferred flag is not supported."
 msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, fuzzy, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "Mã số DM-UUID cho thiết bị %s bị cắt ngắn.\n"
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 msgid "Unknown dm target type."
 msgstr ""
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 #, fuzzy
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 #, fuzzy
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 #, fuzzy
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 #, fuzzy
 msgid "Requested data integrity options are not supported."
 msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 #, fuzzy
 msgid "Requested sector_size option is not supported."
 msgstr "Không hỗ trợ tùy chọn hiệu năng dm-crypt đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 #, fuzzy
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 #, fuzzy
 msgid "Discard/TRIM is not supported."
 msgstr "Thuật toán băm %s không được hỗ trợ.\n"
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "Không hỗ trợ tùy chọn xử lý dữ liệu sai hỏng dm-verity đã yêu cầu.\n"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -136,7 +137,7 @@ msgstr "Không thể khởi tạo ứng dụng chạy ở phía sau (backend) m
 msgid "Cannot initialize crypto backend."
 msgstr "Không thể khởi ứng dụng mã hóa chạy ở phía sau (backend).\n"
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, fuzzy, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "Thuật toán băm %s không được hỗ trợ.\n"
@@ -151,7 +152,7 @@ msgstr "Lỗi xử lý khóa (dùng mã băm %s).\n"
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "Không thể dò tìm kiểu thiết bị. Phần hoạt hóa của thiết bị không tương thích à?\n"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 #, fuzzy
 msgid "This operation is supported only for LUKS device."
 msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n"
@@ -161,7 +162,7 @@ msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n"
 msgid "This operation is supported only for LUKS2 device."
 msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n"
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 #, fuzzy
 msgid "All key slots full."
 msgstr "Mọi khe khóa đều đã đầy.\n"
@@ -176,7 +177,7 @@ msgstr "Khe khóa %d không đúng, hãy chọn một giá trị trong phạm vi
 msgid "Key slot %d is full, please select another one."
 msgstr "Khe khóa %d bị đầy, hãy chọn một khe khác.\n"
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n"
@@ -186,7 +187,8 @@ msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.
 msgid "Header detected but device %s is too small."
 msgstr "Phát hiện được phần đầu nhưng mà thiết bị %s quá nhỏ.\n"
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 #, fuzzy
 msgid "This operation is not supported for this device type."
 msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n"
@@ -195,18 +197,13 @@ msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\
 msgid "Illegal operation with reencryption in-progress."
 msgstr ""
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, fuzzy, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "Phiên bản LUKS không được hỗ trợ %d.\n"
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-#, fuzzy
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "UUID không hỗ trợ kiểu mã hóa này.\n"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, fuzzy, c-format
 msgid "Device %s is not active."
 msgstr "Thiết bị %s không hoạt động.\n"
@@ -221,7 +218,7 @@ msgstr "Thiết bị nằm dưới cho thiết bị crypt %s đã bị biến m
 msgid "Invalid plain crypt parameters."
 msgstr "Đặt sai tham số mã hóa bình thường.\n"
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 #, fuzzy
 msgid "Invalid key size."
 msgstr "Kích cỡ khóa không đúng.\n"
@@ -231,13 +228,18 @@ msgstr "Kích cỡ khóa không đúng.\n"
 msgid "UUID is not supported for this crypt type."
 msgstr "UUID không hỗ trợ kiểu mã hóa này.\n"
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+#, fuzzy
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "UUID không hỗ trợ kiểu mã hóa này.\n"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 #, fuzzy
 msgid "Unsupported encryption sector size."
 msgstr "Không đọc được tập tin nhật ký reencryption.\n"
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 #, fuzzy
 msgid "Device size is not aligned to requested sector size."
 msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n"
@@ -283,8 +285,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, fuzzy, c-format
 msgid "Device %s is too small."
 msgstr "Thiết bị %s có kích cỡ quá nhỏ.\n"
@@ -319,17 +321,17 @@ msgstr "Không thể định dạng “LOOPAES” bên ngoài thiết bị.\n"
 msgid "Can't format VERITY without device."
 msgstr "Không thể định dạng “VERITY” mà không có thiết bị.\n"
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, fuzzy, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "Kiểu băm “VERITY” %d không được hỗ trợ.\n"
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 #, fuzzy
 msgid "Unsupported VERITY block size."
 msgstr "Kích thước khối “VERITY” không được hỗ trợ.\n"
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 #, fuzzy
 msgid "Unsupported VERITY hash offset."
 msgstr "Khoảng bù (offset) mã băm “VERITY” không được hỗ trợ.\n"
@@ -364,253 +366,253 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "Không rõ kiểu thiết bị mã hóa %s được yêu cầu.\n"
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, fuzzy, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "Không thể tẩy xóa phần đầu trên thiết bị %s.\n"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, fuzzy, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "Không thể tẩy xóa phần đầu trên thiết bị %s.\n"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "Không thể đọc thiết bị %s.\n"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "Gặp lỗi khi mở tập tin khóa.\n"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "Không thể đọc thiết bị %s.\n"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị."
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 #, fuzzy
 msgid "Cannot resize loop device."
 msgstr "Không thể đổi cỡ thiết bị vòng ngược (loopback).\n"
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "Bạn có thực sự muốn thay đổi UUID cho thiết bị?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 #, fuzzy
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "Tập tin sao lưu không chứa phần đầu LUKS hợp lệ.\n"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, fuzzy, c-format
 msgid "Volume %s is not active."
 msgstr "Khối tin %s không hoạt động.\n"
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, fuzzy, c-format
 msgid "Volume %s is already suspended."
 msgstr "Khối %s đã bị ngưng.\n"
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, fuzzy, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "Tạm dừng không được hỗ trợ cho kiểu thiết bị %s.\n"
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, fuzzy, c-format
 msgid "Error during suspending device %s."
 msgstr "Gặp lỗi khi tạm dừng thiết bị %s.\n"
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, fuzzy, c-format
-msgid "Volume %s is not suspended."
-msgstr "Vùng %s không bị treo.\n"
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, fuzzy, c-format
 msgid "Resume is not supported for device %s."
 msgstr "Thao tác phục hồi không được hỗ trợ cho kiểu thiết bị %s.\n"
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, fuzzy, c-format
 msgid "Error during resuming device %s."
 msgstr "Gặp lỗi khi cho hoạt động trở lại thiết bị %s.\n"
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, fuzzy, c-format
+msgid "Volume %s is not suspended."
+msgstr "Vùng %s không bị treo.\n"
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 #, fuzzy
 msgid "Volume key does not match the volume."
 msgstr "Khóa khối tin không tương ứng với khối tin đó.\n"
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 #, fuzzy
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "Không thể thêm khe khóa vì mọi khe đều bị tắt và không cung cấp khóa khối tin.\n"
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 #, fuzzy
 msgid "Failed to swap new key slot."
 msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n"
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, fuzzy, c-format
 msgid "Key slot %d is invalid."
 msgstr "Khe khóa %d không đúng.\n"
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, fuzzy, c-format
 msgid "Keyslot %d is not active."
 msgstr "Khe khóa %d không được dùng.\n"
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 #, fuzzy
 msgid "Device header overlaps with data area."
 msgstr "Vùng dữ liệu chồng lấn với vùng mã băm.\n"
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr ""
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "Không đọc được tập tin nhật ký reencryption.\n"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "Không mở được tập tin nhật ký reencryption.\n"
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 #, fuzzy
 msgid "Device type is not properly initialized."
 msgstr "Kiểu thiết bị gần như chắc chắn là chưa được thiết lập.\n"
 
-#: lib/setup.c:4171
-#, fuzzy, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n"
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, fuzzy, c-format
 msgid "Device %s already exists."
 msgstr "Thiết bị %s đã sẵn có.\n"
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, fuzzy, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n"
+
+#: lib/setup.c:4350
 #, fuzzy
 msgid "Incorrect volume key specified for plain device."
 msgstr "Khóa vùng chứa đã chỉ định không đúng cho thiết bị thường.\n"
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 #, fuzzy
 msgid "Incorrect root hash specified for verity device."
 msgstr "Mã băm gốc đã chỉ định không đúng cho thiết bị chứng thực (verity).\n"
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr ""
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 #, fuzzy
 msgid "Failed to load key in kernel keyring."
 msgstr "Gặp lỗi khi mở tập tin khóa.\n"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, fuzzy, c-format
 msgid "Device %s is still in use."
 msgstr "Thiết bị %s vẫn đang được sử dụng.\n"
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, fuzzy, c-format
 msgid "Invalid device %s."
 msgstr "Thiết bị không đúng %s.\n"
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 #, fuzzy
 msgid "Volume key buffer too small."
 msgstr "Vùng đệm khóa khối tin quá nhỏ.\n"
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 #, fuzzy
 msgid "Cannot retrieve volume key for plain device."
 msgstr "Không thể lấy khóa khối tin cho thiết bị bình thường.\n"
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "Mã băm gốc đã chỉ định không đúng cho thiết bị chứng thực (verity).\n"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, fuzzy, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "Thao tác này không được hỗ trợ cho thiết bị mã hóa %s.\n"
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 #, fuzzy
 msgid "Dump operation is not supported for this device type."
 msgstr "Thao tác đổ đống (dump) không được hỗ trợ cho kiểu thiết bị này.\n"
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, fuzzy, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "Không thể định dạng thiết bị %s mà nó lại vẫn đang được sử dụng.\n"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr ""
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr ""
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, fuzzy, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 #, fuzzy
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n"
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, fuzzy, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -644,8 +646,8 @@ msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 msgid "Cannot seek to requested keyfile offset."
 msgstr "Không thể di chuyển vị trí đầu đọc tới vị trí tương đối (offset) tập tin khóa đã yêu cầu.\n"
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 #, fuzzy
 msgid "Out of memory while reading passphrase."
 msgstr "Tràn bộ nhớ trong khi đọc cụm từ mật khẩu.\n"
@@ -669,53 +671,58 @@ msgstr "Đã vượt quá kích thước tập tin khóa tối đa.\n"
 msgid "Cannot read requested amount of data."
 msgstr "Không thể đọc đống dữ liệu đã yêu cầu.\n"
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "Thiết bị %s không tồn tại hoặc không đủ quyền truy cập.\n"
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, fuzzy, c-format
 msgid "Device %s is not compatible."
 msgstr "Thiết bị %s không hoạt động.\n"
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, fuzzy, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "Thiết bị %s quá nhỏ. (LUKS cần ít nhất %<PRIu64> byte.)\n"
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, fuzzy, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "Không thể sử dụng thiết bị %s mà nó lại đang được sử dụng (đang được ánh xạ hoặc gắn).\n"
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, fuzzy, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "Không thể ghi thiết bị %s, không đủ thẩm quyền.\n"
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, fuzzy, c-format
 msgid "Cannot get info about device %s."
 msgstr "Không thể lấy thông tin về thiết bị %s.\n"
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 #, fuzzy
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "Không thể sử dụng thiết-bị vòng ngược (loopback), do không chạy dưới quyền siêu người dùng.\n"
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 #, fuzzy
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "Gặp lỗi khi gắn thiết bị vòng ngược (loopback) (thiết bị lặp với cờ autoclear là bắt buộc).\n"
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, fuzzy, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "Khoảng bù (offset) đã yêu cầu nằm ngoài kích thước thật của thiết bị %s.\n"
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, fuzzy, c-format
 msgid "Device %s has zero size."
 msgstr "Thiết bị %s có kích cỡ là không.\n"
@@ -791,7 +798,7 @@ msgstr ""
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
 msgstr ""
 
 #: lib/utils_device_locking.c:119
@@ -799,8 +806,8 @@ msgstr ""
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr ""
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 #, fuzzy
 msgid "Cannot seek to device offset."
 msgstr "Không thể di chuyển vị trí tới vị trí tương đối thiết bị.\n"
@@ -829,8 +836,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, fuzzy, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "Không thể ghi thiết bị %s, không đủ thẩm quyền.\n"
@@ -852,12 +859,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "Lỗi IO (vào/ra) trong quá trình mã hóa khe khóa.\n"
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, fuzzy, c-format
 msgid "Cannot open device %s."
 msgstr "Không thể mở thiết bị %s.\n"
@@ -879,44 +886,44 @@ msgstr "Thiết bị %s quá nhỏ. (LUKS cần ít nhất %<PRIu64> byte.)\n"
 msgid "LUKS keyslot %u is invalid."
 msgstr "khe-khóa LUKS %u là không hợp lệ.\n"
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, fuzzy, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n"
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, fuzzy, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "Phần đầu tập tin sao lưu dự phòng đã yêu cầu %s đã sẵn có.\n"
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, fuzzy, c-format
 msgid "Cannot create header backup file %s."
 msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n"
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, fuzzy, c-format
 msgid "Cannot write header backup file %s."
 msgstr "Không thể ghi tập tin sao lưu phần đầu %s.\n"
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "Tập tin sao lưu không chứa phần đầu LUKS hợp lệ.\n"
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, fuzzy, c-format
 msgid "Cannot open header backup file %s."
 msgstr "Không mở được tập tin sao lưu phần đầu %s.\n"
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, fuzzy, c-format
 msgid "Cannot read header backup file %s."
 msgstr "Không đọc được tập tin sao lưu phần đầu %s.\n"
@@ -939,7 +946,7 @@ msgstr "không chứa phần đầu LUKS. Thay thế phần đầu thì cũng c
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "đã chứa phần đầu LUKS. Thay thế phần đầu thì cũng hủy các khe khóa đã có."
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -952,108 +959,108 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "Kích thước khóa không tiêu chuẩn, yêu cầu sửa chữa bằng tay.\n"
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 #, fuzzy
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "Không thể đồng chỉnh các khe khóa (keyslot) tiêu chuẩn, yêu cầu sửa chữa bằng tay.\n"
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 #, fuzzy
 msgid "Repairing keyslots."
 msgstr "Đang chuẩn bị các khe khóa (keyslots).\n"
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, fuzzy, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "Khe-khóa (keyslot) %i: khoảng bù (offset) được sửa chữa (%u -> %u).\n"
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, fuzzy, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "Khe-khóa (keyslot) %i: stripes được sửa chữa (%u -> %u).\n"
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, fuzzy, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "Khe-khóa (keyslot) %i: chữ ký phân vùng không có thật.\n"
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, fuzzy, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "Khe-khóa (keyslot) %i: muối bị tẩy xóa.\n"
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 #, fuzzy
 msgid "Writing LUKS header to disk."
 msgstr "Đang ghi phần đầu của LUKS lên đĩa.\n"
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "Gặp lỗi khi sửa chữa."
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, fuzzy, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "Không hỗ trợ chuỗi duy nhất LUKS %s được yêu cầu.\n"
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 #, fuzzy
 msgid "No known problems detected for LUKS header."
 msgstr "Không phát hiện thấy vấn đề với phần đầu LUKS.\n"
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, fuzzy, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "Gặp lỗi trong khi cập nhật phần đầu LUKS trên thiết bị %s.\n"
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, fuzzy, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "Gặp lỗi trong khi đọc lại phần đầu LUKS sau khi cập nhật trên thiết bị %s.\n"
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 #, fuzzy
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "Khoảng bù dữ liệu cho phần đầu LUKS tách rời phải hoặc là 0 hoặc là lớn hơn kích thước phần đầu (%d cung từ).\n"
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 #, fuzzy
 msgid "Wrong LUKS UUID format provided."
 msgstr "Đưa ra định dạng mã số UUID LUKS không đúng.\n"
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 #, fuzzy
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "Không thể tạo phần đầu LUKS: lỗi đọc salt ngẫu nhiên.\n"
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, fuzzy, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "Không thể tạo phần đầu LUKS: lỗi tạo bản tóm tắt (dùng chuỗi duy nhất %s).\n"
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, fuzzy, c-format
 msgid "Key slot %d active, purge first."
 msgstr "Khe khóa %d vẫn hoạt động: cần tẩy trước.\n"
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, fuzzy, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "Nguyên liệu khe khóa %d gồm có quá ít sọc. Có nên thao tác phần đầu không?\n"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "Lỗi xử lý khóa (dùng mã băm %s).\n"
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, fuzzy, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "Khe khóa %d không đúng: hãy chọn khe khóa trong phạm vi 0 đến %d.\n"
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, fuzzy, c-format
 msgid "Cannot wipe device %s."
 msgstr "Không thể tẩy thiết bị %s.\n"
@@ -1092,12 +1099,12 @@ msgstr "Độ dài cụm từ mật khẩu TCRYPT tối đa (%d) đã bị vư
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "Thuật toán băm PBKDF2 không khả dụng %s, bỏ qua.\n"
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 #, fuzzy
 msgid "Required kernel crypto interface not available."
 msgstr "Giao diện mã hóa từ nhân đã yêu cầu không khả dụng.\n"
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 #, fuzzy
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "Bạn cần chắc chắn là mô-đun nhân algif_skcipher đã được tải.\n"
@@ -1112,167 +1119,180 @@ msgstr "Hoạt hóa không được hỗ trợ cho kích thước cung %d.\n"
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "Nhân không hỗ trợ hoạt hóa cho chế độ cũ của TCRYPT.\n"
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, fuzzy, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "Đang kích hoạt mã hóa hệ thống TCRYPT cho phân vùng %s.\n"
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 #, fuzzy
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "Nhân không hỗ trợ ánh xạ tương thích TCRYPT.\n"
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "Chức năng này không được hỗ trợ mà không có phần tải đầu TCRYPT."
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "Phiên bản LUKS không được hỗ trợ %d.\n"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "UUID không hỗ trợ kiểu mã hóa này.\n"
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "Thao tác này không được hỗ trợ cho thiết bị mã hóa %s.\n"
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "Kích cỡ khóa không đúng.\n"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Thiết bị xác thực %s không sử dụng phần đầu on-disk.\n"
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, fuzzy, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "Thiết bị %s không phải là thiết bị VERITY thích hợp.\n"
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, fuzzy, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "Không hỗ trợ phiên bản VERITY %d.\n"
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 #, fuzzy
 msgid "VERITY header corrupted."
 msgstr "phần đầu VERITY sai hỏng.\n"
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, fuzzy, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "Đưa ra định dạng mã số VERITY không đúng trên thiết bị %s.\n"
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, fuzzy, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "Gặp lỗi trong khi cập nhật phần đầu xác thực trên thiết bị %s.\n"
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "Thuật toán băm %s không được hỗ trợ.\n"
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n"
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n"
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 #, fuzzy
 msgid "Verity device detected corruption after activation."
 msgstr "Thiết bị xác thực đã được phát hiện sai hỏng sau khi hoạt hóa.\n"
@@ -1282,47 +1302,42 @@ msgstr "Thiết bị xác thực đã được phát hiện sai hỏng sau khi h
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "Vùng để dành không được điền đầy bằng số không tại vị trí %<PRIu64>.\n"
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 #, fuzzy
 msgid "Device offset overflow."
 msgstr "Khoảng bù (offset) thiết bị bị tràn.\n"
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, fuzzy, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "Thẩm tra gặp lỗi tại vị trí %<PRIu64>.\n"
 
-#: lib/verity/verity_hash.c:276
-#, fuzzy
-msgid "Invalid size parameters for verity device."
-msgstr "Các tham số kích thước cho thiết bị xác thực không hợp lệ.\n"
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr ""
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 #, fuzzy
 msgid "Verification of data area failed."
 msgstr "Việc thẩm tra vùng dữ liệu gặp lỗi.\n"
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 #, fuzzy
 msgid "Verification of root hash failed."
 msgstr "Việc thẩm tra mã băm gốc gặp lỗi.\n"
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 #, fuzzy
 msgid "Input/output error while creating hash area."
 msgstr "Lỗi Vào/Ra trong khi đang tạo vùng băm.\n"
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 #, fuzzy
 msgid "Creation of hash area failed."
 msgstr "Việc tạo vùng dữ liệu băm gặp lỗi.\n"
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, fuzzy, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "CẢNH BÁO: Nhân (kernel) không thể kích hoạt thiết bị nếu kích thước khối dữ liệu vượt quá kích cỡ trang (%u).\n"
@@ -1331,56 +1346,64 @@ msgstr "CẢNH BÁO: Nhân (kernel) không thể kích hoạt thiết bị nếu
 msgid "Failed to allocate RS context."
 msgstr ""
 
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 #, fuzzy
 msgid "Failed to allocate buffer."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr ""
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr ""
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, fuzzy, c-format
 msgid "Failed to determine size for device %s."
 msgstr "Gặp lỗi khi mở thiết bị lưu trữ khóa tạm thời.\n"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n"
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "Nhân không hỗ trợ ánh xạ dm-verity.\n"
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, fuzzy, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n"
@@ -1400,115 +1423,115 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "Thiết bị %s có kích cỡ quá nhỏ.\n"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, fuzzy, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 #, fuzzy
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "Khoảng bù dữ liệu hoặc kích cỡ khóa vẫn khác nhau trên thiết bị và bản sao lưu thì chức năng phục hồi bị lỗi.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 #, fuzzy
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "Khoảng bù dữ liệu hoặc kích cỡ khóa vẫn khác nhau trên thiết bị và bản sao lưu thì chức năng phục hồi bị lỗi.\n"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, fuzzy, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "Thiết bị %s %s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 #, fuzzy
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "không chứa phần đầu LUKS. Thay thế phần đầu thì cũng có thể hủy dữ liệu trên thiết bị đó."
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 #, fuzzy
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "đã chứa phần đầu LUKS. Thay thế phần đầu thì cũng hủy các khe khóa đã có."
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 msgid "Failed to set dm-linear segment."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "Khe khóa %d được thẩm định.\n"
@@ -1540,7 +1563,7 @@ msgstr ""
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr ""
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 #, fuzzy
 msgid "Unable to move keyslot area."
 msgstr "Gặp lỗi khi mở tập tin khóa.\n"
@@ -1578,301 +1601,313 @@ msgstr ""
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte"
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "Phiên bản LUKS không được hỗ trợ %d.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "Vùng để dành không được điền đầy bằng số không tại vị trí %<PRIu64>.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "Gl khi truy cập đến thiết bị lưu trữ khóa tạm thời.\n"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "Gặp lỗi khi mở thiết bị lưu trữ khóa tạm thời.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 msgid "Failed to refresh reencryption devices stack."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "Gặp lỗi khi hoán đổi khe khóa mới.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "Không thể sử dụng thiết bị %s mà nó lại đang được sử dụng (đang được ánh xạ hoặc gắn).\n"
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 #, fuzzy
 msgid "Device not marked for LUKS2 reencryption."
 msgstr "Khôngười thay đổi khóa, không có mã hóa lại vùng dữ liệu."
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 msgid "Failed to load LUKS2 reencryption context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "Thiết bị %s không hoạt động.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 msgid "Reencryption process is already running."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "Không đọc được tập tin nhật ký reencryption.\n"
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "Không thể ghi tập tin nhật ký reencryption (mã hóa lại).\n"
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "Gặp lỗi khi sửa chữa."
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 msgid "Failed to wipe backup segment data."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3174
-msgid "Failed to disable reencryption requirement flag."
+#: lib/luks2/luks2_reencrypt.c:3388
+#, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3398
+#, fuzzy
+msgid "Failed to remove reencryption keyslot."
+msgstr "tẩy mọi khe khóa (gỡ bỏ khóa mã hóa)"
+
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "Không thể khởi ứng dụng mã hóa chạy ở phía sau (backend).\n"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "Không mở được tập tin nhật ký reencryption.\n"
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "Khe khóa không đúng."
+
+#: lib/luks2/luks2_token.c:263
 msgid "No free token slot."
 msgstr ""
 
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, fuzzy, c-format
 msgid "Failed to create builtin token %s."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 #, fuzzy
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "Không thể thẩm tra cụm từ mật khẩu trên đầu vào khác TTY.\n"
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 #, fuzzy
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 #, fuzzy
 msgid "No known cipher specification pattern detected."
 msgstr "Không phát hiện mẫu đặc tả mã hóa đã biết.\n"
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "CẢNH BÁO: Tham số --hash bị bỏ qua trong chế độ thường với tập tin khóa đã cho.\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "CẢNH BÁO: Đang bỏ qua các tùy chọn kích thước tập-tin-khóa --keyfile-size --, kích thước đọc giống với kích thước khóa mã hóa.\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 #, fuzzy
 msgid "Option --key-file is required."
 msgstr "Cần tùy chọn “--key-file”.\n"
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr ""
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr ""
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 #, fuzzy
 msgid "Invalid PIM value: 0."
 msgstr "Thiết bị không đúng %s.\n"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr ""
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 #, fuzzy
 msgid "No device header detected with this passphrase."
 msgstr "Không có phần đầu thiết bị cho cụm từ mật khẩu này.\n"
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
@@ -1882,199 +1917,213 @@ msgstr ""
 "cái mà cho phép truy cập phân vùng được mã hóa mà không cần mật khẩu.\n"
 "Việc đổ đống này nên luôn được lưu trữ mã hóa tại một nơi an toàn."
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 #, fuzzy
 msgid "Benchmark interrupted."
 msgstr "đo kiểm tốc độ mã hóa"
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 #, fuzzy
 msgid "Result of benchmark is not reliable."
 msgstr "Kết quả đo kiểm không đáng tin cậy.\n"
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# Các kiểm tra là chỉ ước lượng việc sử dụng bộ nhớ (không tính IO ổ đĩa).\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, fuzzy, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Thuật toán| Khóa|  Mã hóa     |  Giải mã\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "Mã hóa kiểu %s không sẵn có.\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 #, fuzzy
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  Thuật toán| Khóa|  Mã hóa     |  Giải mã\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "N/A"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "Gõ cụm từ mật khẩu cần xóa: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "Gõ cụm từ mật khẩu cần xóa: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: "
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "Bạn có thực sự muốn thử sửa chữa phần đầu thiết bị LUKS không?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, fuzzy, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "Không thể r thiết bị LUKS tạm thời.\n"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 #, fuzzy
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "Phiên bản LUKS không được hỗ trợ %d.\n"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, fuzzy, c-format
 msgid "Cannot create header file %s."
 msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 #, fuzzy
 msgid "No known integrity specification pattern detected."
 msgstr "Không phát hiện mẫu đặc tả mã hóa đã biết.\n"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, fuzzy, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "Không thể sử dụng %s như là phần đầu on-disk.\n"
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "Thao tác này sẽ ghi đè lên dữ liệu trên thiết bị %s một cách không phục hồi được."
 
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 #, fuzzy
 msgid "Failed to set pbkdf parameters."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 #, fuzzy
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "Giảm khoảng bù (offset) dữ liệu chỉ cho phép khi phần đầu LUKS được tách rời.\n"
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, fuzzy, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "Khe khóa %d đã được chọn để xóa.\n"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "Đây là khe khóa cuối cùng. Sau khi tẩy khóa này thì thiết bị không dùng được."
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "Gõ cụm từ mật khẩu bất kỳ còn lại: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "Gõ cụm từ mật khẩu cần xóa: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "Gõ cụm từ mật khẩu mới cho khe khóa: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "Hãy nhập mật khẩu bất kỳ sẵn có: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "Gõ cụm từ mật khẩu cần được thay đổi: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "Gõ cụm từ mật khẩu mới: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 #, fuzzy
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: "
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 #, fuzzy
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "Chỉ hỗ trợ một đối số thiết-bị dành cho thao tác isLuks.\n"
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 #, fuzzy
 msgid ""
 "The header dump with volume key is sensitive information\n"
@@ -2085,12 +2134,12 @@ msgstr ""
 "cái mà cho phép truy cập phân vùng được mã hóa mà không cần mật khẩu.\n"
 "Việc đổ đống này nên luôn được lưu trữ mã hóa tại một nơi an toàn."
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "Khe khóa %d không được dùng.\n"
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 #, fuzzy
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
@@ -2100,32 +2149,42 @@ msgstr ""
 "cái mà cho phép truy cập phân vùng được mã hóa mà không cần mật khẩu.\n"
 "Việc đổ đống này nên luôn được lưu trữ mã hóa tại một nơi an toàn."
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "hiển thị trạng thái các thiết bị đang hoạt động"
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 #, fuzzy
 msgid "Option --header-backup-file is required."
 msgstr "Cần tùy chọn“--header-backup-file”.\n"
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr ""
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, fuzzy, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "Thao tác phục hồi không được hỗ trợ cho kiểu thiết bị %s.\n"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, fuzzy, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "Không nhận ra siêu dữ liệu của kiểu thiết bị %s.\n"
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 #, fuzzy
 msgid "Command requires device and mapped name as arguments."
 msgstr "Lệnh cần thiết bị và tên ánh xạ như là các tham số.\n"
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2134,96 +2193,96 @@ msgstr ""
 "Thao tác này sẽ tẩy mọi khe khóa trên thiết bị %s.\n"
 "Thiết bị sẽ không dùng được sau thao tác này."
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, fuzzy, c-format
 msgid "Device is already %s type."
 msgstr "Thiết bị %s đã sẵn có.\n"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, fuzzy, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "Thao tác này không được hỗ trợ cho thiết bị mã hóa %s.\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr ""
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, fuzzy, c-format
 msgid "Token %d is invalid."
 msgstr "Khe khóa %d không đúng.\n"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, c-format
 msgid "Token %d in use."
 msgstr ""
 
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, fuzzy, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, fuzzy, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, fuzzy, c-format
 msgid "Token %d is not in use."
 msgstr "Khe khóa %d không được dùng.\n"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 #, fuzzy
 msgid "Failed to import token from file."
 msgstr "Gặp lỗi khi mở tập tin khóa.\n"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, fuzzy, c-format
 msgid "Failed to get token %d for export."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, fuzzy, c-format
 msgid "Invalid token operation %s."
 msgstr "Kích cỡ khóa không đúng %d.\n"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "Thiết bị %s không phải là một thiết bị kiểu LUKS đúng.\n"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị."
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2232,244 +2291,253 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "Thiết bị không đúng %s.\n"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "Thao tác này được hỗ trợ chỉ cho thiết bị LUKS.\n"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "Phần đầu tập tin sao lưu dự phòng đã yêu cầu %s đã sẵn có.\n"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "Không thể tạo phần đầu của tập tin sao lưu dự phòng %s.\n"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "Khôngười thay đổi khóa, không có mã hóa lại vùng dữ liệu."
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 #, fuzzy
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "Tập tin khóa có thể sử dụng với tùy chọn --key-slot hoặc với chính xác một khe khóa hoạt động.\n"
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "Gõ cụm từ mật khẩu cho khe khóa %u: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "Lệnh cần thiết bị và tên ánh xạ như là các tham số.\n"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr ""
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "Tập tin nhật ký %s đã có sẵn rồi, giả định là reencryption (mã hóa lại).\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<thiết-bị> [--type <kiểu>] [<tên>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 #, fuzzy
 msgid "open device as <name>"
 msgstr "mở thiết bị như là ánh xạ <tên>"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<tên>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "đóng thiết bị (gỡ bỏ ánh xạ)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "thay đổi kích cỡ của thiết bị hoạt động"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "hiển thị trạng thái về thiết bị"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr "[--cipher <bộ mã hóa>]"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "đo kiểm tốc độ mã hóa"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<thiết_bị>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "thử sửa chữa siêu dữ liệu (metadata) on-disk"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "thêm khóa vào thiết bị LUKS"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "tẩy mọi khe khóa (gỡ bỏ khóa mã hóa)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr ""
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<thiết_bị> [<tập_tin_khóa_mới>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "định dạng một thiết bị kiểu LUKS"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "thêm khóa vào thiết bị LUKS"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<thiết_bị> [<tập_tin_khóa>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "gỡ bỏ khỏi thiết bị LUKS khóa hoặc tập tin khóa đưa ra"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "thay đổi khóa hay tập tin khóa đã áp dụng của thiết bị LUKS"
 
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 msgid "converts a key to new pbkdf parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<thiết_bị> <khe_khóa>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "xóa khỏi thiết bị LUKS khóa có số <khe_khóa>"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "in ra mã số UUID của thiết bị LUKS"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "thử <thiết_bị> có phần đầu phân vùng LUKS không"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "đổ thông tin về phân vùng LUKS"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "dump thông tin thiết bị TCRYPT"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "dump thông tin thiết bị TCRYPT"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 #, fuzzy
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "Ngưng thiết bị LUKS và tẩy khóa (thì mọi việc V/R đều đông cứng)."
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 #, fuzzy
 msgid "Resume suspended LUKS device"
 msgstr "Tiếp tục lại sử dụng thiết bị LUKS bị ngưng."
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "Sao lưu phần đầu và các khe khóa của thiết bị LUKS"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "Phục hồi phần đầu và các khe khóa của thiết bị LUKS"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2477,7 +2545,7 @@ msgstr ""
 "\n"
 "<thao-tác> là một trong:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2490,7 +2558,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2505,14 +2573,14 @@ msgstr ""
 "<khe_khóa> là số thứ tự khe khóa LUKS cần sửa đổi\n"
 "<tập_tin_khóa> là tập tin khóa tùy chọn cho khóa mới trong thao tác luksAddKey\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2527,7 +2595,7 @@ msgstr ""
 "\tĐộ dài tập tin khóa tối đa: %dkB, Độ dài mật khẩu tương tác tối đa %d (ký tự)\n"
 "Thời gian tương tác PBKDF2 mặc định cho LUKS: %d (ms)\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2542,480 +2610,488 @@ msgstr ""
 "\tdữ liệu thô: %s, Khóa: %d bit, Kiểu băm mật khẩu: %s\n"
 "\tLUKS1: %s, Khóa: %d bit, Kiểu băm cho phần đầu LUKS: %s, RNG: %s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: cần thiết %s làm đối số"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "Hiển thị trợ giúp này"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "Hiển thị thông tin ngắn về cách sử dụng"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "Hiển thị phiên bản của gói"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "Tùy chọn trợ giúp:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "Hiển thị các thông điệp lỗi chi tiết hơn"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "Hiển thị thông điệp gỡ lỗi"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 #, fuzzy
 msgid "Show debug messages including JSON metadata"
 msgstr "Hiển thị thông điệp gỡ lỗi"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "Mật mã dùng để bảo vệ đĩa (xem “/proc/crypto”)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "Chuỗi duy nhất dùng để tạo khóa mã hóa từ cụm từ mật khẩu"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "Thẩm tra cụm từ mật khẩu bằng cách yêu cầu nó hai lần"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 #, fuzzy
 msgid "Read the key from a file"
 msgstr "Đọc khóa từ một tập tin."
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "Đọc khóa khối tin (chủ) từ tập tin."
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 #, fuzzy
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "Dump (đổ thành đống) khóa vùng chứa (master) thay vì thông tin khe-khóa."
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "Kích cỡ của khóa mã hóa"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "BIT"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "Giới hạn việc đọc từ tập-tin-khóa"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "byte"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "Số lượng byte nhảy qua trong tập tin khóa"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "Giới hạn đọc từ tập tin khóa mới thêm vào"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "Số lượng byte để nhảy qua trong tập tin khóa mới thêm"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "Số thứ tự khe cho khóa mới (mặc định là khe trống thứ nhất)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "Kích cỡ của thiết bị"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "CUNG-TỪ"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "Chỉ sử dụng kích thước dữ liệu thiết bị (bỏ qua phần còn lại của thiết bị). NGUY HIỂM!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "Khoảng bù đầu tiên trong thiết bị thật chạy ở phía sau"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "Bao nhiêu cung từ dữ liệu mã hóa cần bỏ qua ở đầu"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "Tạo một sự ánh xạ chỉ cho đọc"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "Không cần xác nhận"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "Thời gian chờ gõ cụm từ mật khẩu tối đa (theo giây)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "giây"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "Số các lần có cho phép thử gõ lại cụm từ mật khẩu"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "Căn chỉnh trọng tải ở <n> biên giới cung từ — cho định dạng “luksFormat”"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 #, fuzzy
 msgid "File with LUKS header and keyslots backup"
 msgstr "Tập tin chứa bản sao lưu phần đầu và các khe khóa của thiết bị LUKS."
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 #, fuzzy
 msgid "Use /dev/random for generating volume key"
 msgstr "Dùng /dev/random để tạo khóa volume."
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 #, fuzzy
 msgid "Use /dev/urandom for generating volume key"
 msgstr "Dùng /dev/urandom để tạo khóa vùng."
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 #, fuzzy
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "Thiết bị chia sẻ với đoạn crypt không-chồng-lên-nhau khác."
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 #, fuzzy
 msgid "UUID for device to use"
 msgstr "UUID dành cho tập tin sử dụng."
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 #, fuzzy
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "Cho phép hủy bỏ (được biết đến như là TRIM) các yêu cầu cho thiết bị."
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 #, fuzzy
 msgid "Device or file with separated LUKS header"
 msgstr "Thiết bị hay tập tin với phần đầu LUKS tách nhau."
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 #, fuzzy
 msgid "Do not activate device, just check passphrase"
 msgstr "Không kích hoạt thiết bị, chỉ cần kiểm tra mật khẩu."
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 #, fuzzy
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "Dùng phần đầu ẩn (thiết bị TCRYPT ẩn)."
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 #, fuzzy
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "Thiết bị là ổ đĩa TCRYPT hệ thống (có bootloader)."
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 #, fuzzy
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "Dùng phần đầu (thứ cấp) TCRYPT."
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 #, fuzzy
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "Cũng quét cho thiết bị tương thích VeraCrypt."
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 #, fuzzy
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Cũng quét cho thiết bị tương thích VeraCrypt."
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 #, fuzzy
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "Cũng quét cho thiết bị tương thích VeraCrypt."
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "Kiểu của siêu dữ liệu thiết bị: luks, plain, loopaes, tcrypt."
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 #, fuzzy
 msgid "Disable password quality check (if enabled)"
 msgstr "Tắt chức năng kiểm tra chất lượng mật khẩu (nếu nó đang bật)."
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 #, fuzzy
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "Dùng tùy chọn tương thích hiệu năng same_cpu_crypt dm-crypt."
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 #, fuzzy
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "Dùng tùy chọn tương thích hiệu năng submit_from_crypt_cpus dm-crypt."
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 #, fuzzy
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "Thời gian lặp lại PBKDF2 cho LUKS (theo mili-giây)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "mili-giây"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 #, fuzzy
 msgid "kilobytes"
 msgstr "byte"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr ""
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr ""
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 #, fuzzy
 msgid "Disable locking of on-disk metadata"
 msgstr "thử sửa chữa siêu dữ liệu (metadata) on-disk"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 msgid "Disable journal for integrity device"
 msgstr ""
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 #, fuzzy
 msgid "Set label for the LUKS2 device"
 msgstr "định dạng một thiết bị kiểu LUKS"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 msgid "Set subsystem label for the LUKS2 device"
 msgstr ""
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 #, fuzzy
 msgid "Read or write the json from or to a file"
 msgstr "Đọc khóa từ một tập tin."
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 #, fuzzy
 msgid "LUKS2 header keyslots area size"
 msgstr "Tập tin chứa bản sao lưu phần đầu và các khe khóa của thiết bị LUKS."
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 #, fuzzy
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "Kích cỡ của khóa mã hóa"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)."
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)."
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "Giảm kích thước dữ liệu thiết bị (di chuyển offset dữ liệu). NGUY HIỂM!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "Kích thước khối mã hóa lại"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "Kích thước khối mã hóa lại"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[TÙY CHỌN…] <thao-tác> <đặc-tả-thao-tác>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "Còn thiếu đối số <thao-tác>."
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "Không hiểu thao-tác."
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "Tùy chọn “--shared” chỉ cho phép với thao tác tạo mở của thiết bị thường.\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "Tùy chọn “--shared” chỉ cho phép với thao tác tạo mở của thiết bị thường.\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr ""
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -3024,284 +3100,284 @@ msgstr ""
 "Tùy chọn --key-size thì chỉ cho phép với các thao tác luksFormat, mở và đo kiểm.\n"
 "Để giới hạn đọc từ tập-tin-khóa, hãy sử dụng tùy chọn --keyfile-size=(bytes)."
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”."
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr ""
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "Tùy chọn “--uuid” thì chỉ cho phép với “luksFormat” và “luksUUID”."
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "Tùy chọn “--test-passphrase” chỉ được phép cho lệnh mở thiết bị LUKS và TCRYPT.\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "Kích cỡ khóa phải là bội số của 8 bít"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "Khe khóa không đúng."
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 #, fuzzy
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "Tùy chọn --key-file giữ quyền ưu tiên cao hơn tham số tập tin khóa đã chỉ định.\n"
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "Tùy chọn không chấp nhận giá trị là số âm."
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "Chỉ cho phép một tùy chọn --key-file."
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "Chỉ cho phép một tùy chọn “--use-[u]random”."
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "Tùy chọn “--use-[u]random” chỉ được phép cho “luksFormat”."
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "Tùy chọn “--uuid” thì chỉ cho phép với “luksFormat” và “luksUUID”."
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”."
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr ""
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 #, fuzzy
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 #, fuzzy
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "Tùy chọn “--align-payload” chỉ được phép cho “luksFormat”."
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "Tùy chọn “--skip” chỉ hỗ trợ cho lệnh mở (open) của thiết bị thường và “loopaes”.\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "Tùy chọn “--offset” chỉ hỗ trợ cho lệnh mở (open) của thiết bị thường và “loopaes”.\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "Tùy chọn --tcrypt-hidden, --tcrypt-system hay --tcrypt-backup chỉ được hỗ trợ trên thiết bị TCRYPT.\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "Tùy chọn --tcrypt-hidden không thể được tổ hợp cùng với --allow-discards.\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "Tùy chọn --veracrypt chỉ được hỗ trợ trên thiết bị TCRYPT.\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "Thao tác này không được hỗ trợ cho kiểu thiết bị này.\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr ""
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "Tùy chọn “--keep-key” có thể dùng với “--hash” hoặc “--iter-time”."
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 msgid "Cannot disable metadata locking."
 msgstr ""
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "Kích thước thu nhỏ thiết bị tối đa là 64 MiB."
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte"
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "Khoảng bù (offset) thiết bị bị tràn.\n"
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "Kích cỡ giảm phải là bội số cung từ (sector) 512 byte"
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 #, fuzzy
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr "Không được dùng các tùy chọn --ignore-corruption và --restart-on-corruption cùng một lúc.\n"
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 #, fuzzy
 msgid "Invalid salt string specified."
 msgstr "Chuỗi salt (muối) đã cho không hợp lệ.\n"
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, fuzzy, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "Không thể tạo ảnh băm %s để ghi.\n"
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, fuzzy, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "Không thể tạo ảnh băm %s để ghi.\n"
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 #, fuzzy
 msgid "Invalid root hash string specified."
 msgstr "Chuỗi mã băm gốc (thư mục root) đã chỉ ra không hợp lệ.\n"
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "Thiết bị không đúng %s.\n"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr "Không thể đọc tập-tin khóa %s.\n"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<thiết-bị-dữ-liệu> <thiết-bị-băm>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "định dạng thiết bị"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<thiết-bị-dữ-liệu> <thiết-bị-băm> <mã-băm-gốc>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "thẩm tra thiết bị"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 #, fuzzy
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<thiết-bị-dữ-liệu> <thiết-bị-băm> <mã-băm-gốc>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "hiển thị trạng thái các thiết bị đang hoạt động"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<thiết_bị_băm>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "hiển thị thông tin trên-đĩa"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3316,7 +3392,7 @@ msgstr ""
 "<thiết-bị-băm> là thiết bị chứa dữ liệu xác thực\n"
 "<mã-băm-gốc> mã băm của nút root (gốc) trên <thiết-bị-băm>\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3327,132 +3403,147 @@ msgstr ""
 "Các tham số dm-verity dựng sẵn mặc định:\n"
 "\tBăm: %s, Khối dữ liệu (bytes): %u, Khối băm (bytes): %u, Kích thước muối: %u, Định dạng băm: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "Không sử dụng siêu khối thẩm định"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "Kiểu định dạng (1 - thông thường, 0 - Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "số"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "Kích cỡ khối trên thiết bị dữ liệu"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "Kích cỡ của khối trên thiết bị băm"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr ""
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "Số lượng khối trong tập tin dữ liệu"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "khối"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "Khoảng bù (offset) khởi đầu của thiết bị băm"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 #, fuzzy
 msgid "Starting offset on the FEC device"
 msgstr "Khoảng bù (offset) khởi đầu của thiết bị băm"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "Thuật toán băm"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "chuỗi"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "Muối"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "chuỗi hex (thập lục phân)"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "Việc tạo vùng dữ liệu băm gặp lỗi.\n"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr "Khởi động lại nhân nếu thấy có sai hỏng"
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+#, fuzzy
+msgid "Panic kernel if corruption is detected"
+msgstr "Khởi động lại nhân nếu thấy có sai hỏng"
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "Bỏ qua sai hỏng, chỉ ghi nhật ký lại"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 msgid "Do not verify zeroed blocks"
 msgstr "Không thẩm tra các khối không"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "Tùy chọn --ignore-corruption, --restart-on-corruption hay --ignore-zero-blocks chỉ được phép dùng cho thao tác tạo.\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "Không được dùng các tùy chọn --ignore-corruption và --restart-on-corruption cùng một lúc.\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "Không được dùng các tùy chọn --ignore-corruption và --restart-on-corruption cùng một lúc.\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "Kích cỡ khóa không đúng %d.\n"
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, fuzzy, c-format
 msgid "Cannot read keyfile %s."
 msgstr "Không thể đọc tập-tin khóa %s.\n"
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, fuzzy, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "Không thể đọc %d byte từ tập tin khóa %s.\n"
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 #, fuzzy
 msgid "<integrity_device>"
 msgstr "thẩm tra thiết bị"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr ""
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3465,439 +3556,444 @@ msgstr ""
 "<thiết-bị-băm> là thiết bị chứa dữ liệu xác thực\n"
 "<mã-băm-gốc> mã băm của nút root (gốc) trên <thiết-bị-băm>\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr ""
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr ""
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr ""
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr ""
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 #, fuzzy
 msgid "The size of the data integrity key"
 msgstr "Kích cỡ của khóa mã hóa"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 #, fuzzy
 msgid "Read the integrity key from a file"
 msgstr "Đọc khóa từ một tập tin."
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 #, fuzzy
 msgid "The size of the journal integrity key"
 msgstr "Kích cỡ của khóa mã hóa"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 #, fuzzy
 msgid "Read the journal integrity key from a file"
 msgstr "Đọc khóa từ một tập tin."
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr ""
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 #, fuzzy
 msgid "The size of the journal encryption key"
 msgstr "Kích cỡ của khóa mã hóa"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 #, fuzzy
 msgid "Read the journal encryption key from a file"
 msgstr "Đọc khóa từ một tập tin."
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr ""
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 #, fuzzy
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "Tùy chọn “--allow-discards” chỉ cho phép với thao tác mở.\n"
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 #, fuzzy
 msgid "Invalid journal size specification."
 msgstr "Đặc tả kích thước thiết bị không đúng."
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr ""
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr ""
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 #, fuzzy
 msgid "Reencryption already in-progress."
 msgstr "Kích thước khối mã hóa lại"
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, fuzzy, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "Không thể mở %s một cách đệ qui, thiết bị vẫn đang được sử dụng.\n"
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 #, fuzzy
 msgid "Allocation of aligned memory failed."
 msgstr "Phân bổ bộ nhớ điều chỉnh gặp lỗi.\n"
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, fuzzy, c-format
 msgid "Cannot read device %s."
 msgstr "Không thể đọc thiết bị %s.\n"
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, fuzzy, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "Đánh dấu thiết bị LUKS %s là không thể dùng.\n"
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, fuzzy, c-format
 msgid "Cannot write device %s."
 msgstr "Không thể ghi thiết bị %s.\n"
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 #, fuzzy
 msgid "Cannot write reencryption log file."
 msgstr "Không thể ghi tập tin nhật ký reencryption (mã hóa lại).\n"
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 #, fuzzy
 msgid "Cannot read reencryption log file."
 msgstr "Không đọc được tập tin nhật ký reencryption.\n"
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "Tập tin nhật ký %s đã có sẵn rồi, giả định là reencryption (mã hóa lại).\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 #, fuzzy
 msgid "Activating temporary device using old LUKS header."
 msgstr "Hoạt hóa thiết bị tạm thời sử dụng phần đầu LUKS kiểu cũ.\n"
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 #, fuzzy
 msgid "Activating temporary device using new LUKS header."
 msgstr "Hoạt hóa thiết bị tạm thời sử dụng phần đầu LUKS kiểu mới.\n"
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 #, fuzzy
 msgid "Activation of temporary devices failed."
 msgstr "Việc hoạt hóa các thiết bị tạm thời gặp lỗi.\n"
 
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 #, fuzzy
 msgid "Failed to set data offset."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, fuzzy, c-format
 msgid "New LUKS header for device %s created."
 msgstr "Phần đầu LUKS mới cho thiết bị %s được tạo.\n"
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 #, fuzzy
 msgid "Failed to write activation flags to new header."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 #, fuzzy
 msgid "Failed to read requirements from backup header."
 msgstr "Lỗi đọc từ kho lưu khóa.\n"
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, fuzzy, c-format
 msgid "%s header backup of device %s created."
 msgstr "Phần đầu sao lưu LUKS của thiết bị %s được tạo.\n"
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 #, fuzzy
 msgid "Creation of LUKS backup headers failed."
 msgstr "Việc tạo phần đầu LUKS sao lưu dự phòng gặp lỗi.\n"
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, fuzzy, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "Không thể phục hồi phần đầu LUKS trên thiết bị %s.\n"
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, fuzzy, c-format
 msgid "%s header on device %s restored."
 msgstr "Phần đầu LUKS trên thiết bị %s đã được phục hồi.\n"
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 #, fuzzy
 msgid "Cannot open temporary LUKS device."
 msgstr "Không thể r thiết bị LUKS tạm thời.\n"
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 #, fuzzy
 msgid "Cannot get device size."
 msgstr "Không thể lấy kích cỡ thiết bị.\n"
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 #, fuzzy
 msgid "IO error during reencryption."
 msgstr "Lỗi IO (vào/ra) trong quá trình mã hóa lại.\n"
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 #, fuzzy
 msgid "Provided UUID is invalid."
 msgstr "UUID đã cung cấp không hợp lệ.\n"
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 #, fuzzy
 msgid "Cannot open reencryption log file."
 msgstr "Không mở được tập tin nhật ký reencryption.\n"
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 #, fuzzy
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "Không có quá trình giải mã nào đang xử lý, UUID đã cung cấp có thể chỉ được dùng để phục hồi lại tiến trình giải mã đã tạm dừng.\n"
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "Kích thước khối mã hóa lại"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 #, fuzzy
 msgid "Do not change key, no data area reencryption"
 msgstr "Khôngười thay đổi khóa, không có mã hóa lại vùng dữ liệu."
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 #, fuzzy
 msgid "Read new volume (master) key from file"
 msgstr "Đọc khóa khối tin (chủ) từ tập tin."
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "Thời gian lặp lại PBKDF2 cho LUKS (theo mili-giây)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 #, fuzzy
 msgid "Use direct-io when accessing devices"
 msgstr "Sử dụng vào ra trực tiếp khi truy cập các thiết bị."
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 #, fuzzy
 msgid "Use fsync after each block"
 msgstr "Sử dụng fsync sau mỗi khối."
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 #, fuzzy
 msgid "Update log file after every block"
 msgstr "Cập nhật tập tin nhật ký sau mỗi khối."
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 #, fuzzy
 msgid "Use only this slot (others will be disabled)"
 msgstr "Chỉ sử dụng khe này (những cái khác sẽ bị tắt đi)."
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 #, fuzzy
 msgid "Create new header on not encrypted device"
 msgstr "Tạo phần đầu mới không trên thiết bị được mã hóa."
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 #, fuzzy
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "Thiết bị mã hóa cố định (gỡ bỏ mã hóa)."
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 #, fuzzy
 msgid "The UUID used to resume decryption"
 msgstr "uuid được dùng để khôi phục việc giải mã."
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 #, fuzzy
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "Kiểu của siêu dữ liệu thiết bị: luks, plain, loopaes, tcrypt."
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[TÙY_CHỌN…] <thiết-bị>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, fuzzy, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "Reencryption sẽ thay đổi: khóa dung lượng%s%s%s%s.\n"
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 #, fuzzy
 msgid "set hash to "
 msgstr ", đặt kiểu băm thành "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ", đặt kiểu mã hóa thành "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "Cần đối số."
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "Chỉ những giá trị nằm giữa 1MiB và 64 MiB là cho phép đối với kích thước khối reencryption (mã hóa lại)."
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "Kích thước thu nhỏ thiết bị tối đa là 64 MiB."
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 #, fuzzy
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "Tùy chọn “--new” phải được sử dụng cùng với “--reduce-device-size”."
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 #, fuzzy
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "Tùy chọn “--keep-key” có thể dùng với “--hash” hoặc “--iter-time”."
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "Tùy chọn “--new” không được sử dụng cùng với “ --decrypt”."
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "Tùy chọn --decrypt không tương thích với các đối số đã cho."
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "Tùy chọn “--uuid” chỉ được sử dụng cùng với “ --decrypt”."
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr ""
 
@@ -3942,95 +4038,95 @@ msgstr ""
 msgid "Command failed with code %i (%s).\n"
 msgstr "Câu lệnh đã thất bại với mã %i"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, fuzzy, c-format
 msgid "Key slot %i created."
 msgstr "Khe khóa %d đã thay đổi.\n"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, fuzzy, c-format
 msgid "Key slot %i unlocked."
 msgstr "Khe khóa %d được mở khóa.\n"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, fuzzy, c-format
 msgid "Key slot %i removed."
 msgstr "Khe khóa %d được mở khóa.\n"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, c-format
 msgid "Token %i created."
 msgstr ""
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, c-format
 msgid "Token %i removed."
 msgstr ""
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr ""
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 #, fuzzy
 msgid "Failed to initialize device signature probes."
 msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị."
 
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, fuzzy, c-format
 msgid "Failed to stat device %s."
 msgstr "Gặp lỗi khi lấy thông tin tập tin khóa.\n"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr ""
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 #, fuzzy
 msgid "Failed to wipe device signature."
 msgstr "Lỗi ghi khóa vào kho lưu khóa.\n"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, fuzzy, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr "Lỗi lấy thư mục trình ánh xạ thiết bị."
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr "Kích thước khối mã hóa lại"
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, fuzzy, c-format
 msgid "Cannot check password quality: %s"
 msgstr "Không thể kiểm tra chất lượng mật khẩu: %s\n"
@@ -4049,50 +4145,50 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "Gặp lỗi khi kiểm tra chất lượng mật khẩu: mật khẩu sai (%s)\n"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 #, fuzzy
 msgid "Error reading passphrase from terminal."
 msgstr "Gặp lỗi khi đọc cụm từ mật khẩu từ thiết bị cuối.\n"
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "Nhập lại mật khẩu: "
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 #, fuzzy
 msgid "Passphrases do not match."
 msgstr "Hai cụm từ mật khẩu không trùng nhau.\n"
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 #, fuzzy
 msgid "Cannot use offset with terminal input."
 msgstr "Không thể sử dụng khoảng bù (offset) với đầu vào là thiết bị cuối.\n"
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "Gõ cụm từ mật khẩu: "
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "Nhập cụm từ mật khẩu cho %s: "
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 #, fuzzy
 msgid "No key available with this passphrase."
 msgstr "Không có khóa sẵn sàng dùng với cụm từ mật khẩu này.\n"
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, fuzzy, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "Không thể mở tập tin %s.\n"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, fuzzy, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "Không thể đọc tập-tin khóa %s.\n"
@@ -4134,18 +4230,23 @@ msgstr ""
 msgid "Failed to write JSON file."
 msgstr "Gặp lỗi khi mở tập tin khóa.\n"
 
+#, c-format
 #~ msgid "Replaced with key slot %d.\n"
 #~ msgstr "Đã thay thế với khe khóa %d.\n"
 
 #~ msgid "Function not available in FIPS mode.\n"
 #~ msgstr "Chức năng không khả dụng trong chế độ “FIPS”.\n"
 
+#~ msgid "Invalid size parameters for verity device.\n"
+#~ msgstr "Các tham số kích thước cho thiết bị xác thực không hợp lệ.\n"
+
 #~ msgid "Too many tree levels for verity volume.\n"
 #~ msgstr "Có quá nhiều mức cây cho mỗi vùng xác thực.\n"
 
 #~ msgid "memory allocation error in action_luksFormat"
 #~ msgstr "gặp lỗi phân cấp vùng nhớ trong“action_luksFormat”"
 
+#, c-format
 #~ msgid "Key %d not active. Can't wipe.\n"
 #~ msgstr "Khóa %d không hoạt động thì không xóa được.\n"
 
@@ -4158,9 +4259,11 @@ msgstr "Gặp lỗi khi mở tập tin khóa.\n"
 #~ msgid "remove (deactivate) device"
 #~ msgstr "gỡ bỏ (dừng hoạt động) thiết bị"
 
+#, c-format
 #~ msgid "Activated keyslot %i.\n"
 #~ msgstr "Khe-khóa (keyslot) đã được kích hoạt %i.\n"
 
+#, c-format
 #~ msgid "Progress: %5.1f%%, ETA %02llu:%02llu, %4llu MiB written, speed %5.1f MiB/s%s"
 #~ msgstr "Diễn biến: %5.1f%%, ETA %02llu:%02llu, đã ghi %4llu MiB, tốc độ %5.1f MiB/s%s"
 
index c133bc4..407ad2b 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 8ac1d9f..4742538 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: cryptsetup 2.0.3.1\n"
 "Report-Msgid-Bugs-To: dm-crypt@saout.de\n"
-"POT-Creation-Date: 2020-05-28 11:32+0200\n"
+"POT-Creation-Date: 2022-01-13 10:34+0100\n"
 "PO-Revision-Date: 2018-04-27 22:41+0800\n"
 "Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -21,65 +21,66 @@ msgstr ""
 "X-Generator: Poedit 2.0.6\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: lib/libdevmapper.c:399
+#: lib/libdevmapper.c:408
 msgid "Cannot initialize device-mapper, running as non-root user."
 msgstr "无法初始化设备映射器,正作为非 root 用户运行。"
 
-#: lib/libdevmapper.c:402
+#: lib/libdevmapper.c:411
 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?"
 msgstr "无法初始化设备映射器。dm_mod 内核模块装载了吗?"
 
-#: lib/libdevmapper.c:1131
+#: lib/libdevmapper.c:1180
 msgid "Requested deferred flag is not supported."
 msgstr "不支持请求的推迟(deferred)标记。"
 
-#: lib/libdevmapper.c:1198
+#: lib/libdevmapper.c:1249
 #, c-format
 msgid "DM-UUID for device %s was truncated."
 msgstr "设备 %s 的 DM-UUID 被截断。"
 
-#: lib/libdevmapper.c:1520
+#: lib/libdevmapper.c:1580
 #, fuzzy
 msgid "Unknown dm target type."
 msgstr "未知的 PBKDF 类型 %s。"
 
-#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679
+#: lib/libdevmapper.c:1701 lib/libdevmapper.c:1706 lib/libdevmapper.c:1766
+#: lib/libdevmapper.c:1769
 msgid "Requested dm-crypt performance options are not supported."
 msgstr "不支持请求的 dm-crypt 性能选项。"
 
-#: lib/libdevmapper.c:1630
+#: lib/libdevmapper.c:1713 lib/libdevmapper.c:1717
 msgid "Requested dm-verity data corruption handling options are not supported."
 msgstr "不支持请求的 dm-verity 数据损坏处理选项。"
 
-#: lib/libdevmapper.c:1634
+#: lib/libdevmapper.c:1721
 msgid "Requested dm-verity FEC options are not supported."
 msgstr "不支持请求的 dm-verity FEC 选项。"
 
-#: lib/libdevmapper.c:1638
+#: lib/libdevmapper.c:1725
 msgid "Requested data integrity options are not supported."
 msgstr "不支持请求的数据完整性选项。"
 
-#: lib/libdevmapper.c:1640
+#: lib/libdevmapper.c:1727
 msgid "Requested sector_size option is not supported."
 msgstr "不支持请求的 sector_size 选项。"
 
-#: lib/libdevmapper.c:1645
+#: lib/libdevmapper.c:1732
 #, fuzzy
 msgid "Requested automatic recalculation of integrity tags is not supported."
 msgstr "不支持请求的数据完整性选项。"
 
-#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685
-#: lib/luks2/luks2_json_metadata.c:2160
+#: lib/libdevmapper.c:1736 lib/libdevmapper.c:1772 lib/libdevmapper.c:1775
+#: lib/luks2/luks2_json_metadata.c:2347
 #, fuzzy
 msgid "Discard/TRIM is not supported."
 msgstr "不支持哈希算法 %s。"
 
-#: lib/libdevmapper.c:1653
+#: lib/libdevmapper.c:1740
 #, fuzzy
 msgid "Requested dm-integrity bitmap mode is not supported."
 msgstr "不支持请求的数据完整性选项。"
 
-#: lib/libdevmapper.c:2607
+#: lib/libdevmapper.c:2713
 #, c-format
 msgid "Failed to query dm-%s segment."
 msgstr ""
@@ -121,7 +122,7 @@ msgstr "无法初始化加密随机数生成器后端。"
 msgid "Cannot initialize crypto backend."
 msgstr "无法初始化加密后端。"
 
-#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119
+#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:120
 #, c-format
 msgid "Hash algorithm %s not supported."
 msgstr "不支持哈希算法 %s。"
@@ -135,7 +136,7 @@ msgstr "密钥处理错误(使用散列 %s)。"
 msgid "Cannot determine device type. Incompatible activation of device?"
 msgstr "无法确定设备类型。不兼容的设备激活?"
 
-#: lib/setup.c:341 lib/setup.c:3050
+#: lib/setup.c:341 lib/setup.c:3058
 msgid "This operation is supported only for LUKS device."
 msgstr "此操作只适用 LUKS 设备。"
 
@@ -143,7 +144,7 @@ msgstr "此操作只适用 LUKS 设备。"
 msgid "This operation is supported only for LUKS2 device."
 msgstr "此操作只适用 LUKS2 设备。"
 
-#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345
+#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2457
 msgid "All key slots full."
 msgstr "密钥槽全都满了。"
 
@@ -157,7 +158,7 @@ msgstr "密钥槽 %d 无效,请选择 0 到 %d 间的数字。"
 msgid "Key slot %d is full, please select another one."
 msgstr "密钥槽 %d 满了,请选择另一个。"
 
-#: lib/setup.c:525 lib/setup.c:2824
+#: lib/setup.c:525 lib/setup.c:2832
 #, fuzzy
 msgid "Device size is not aligned to device logical block size."
 msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。"
@@ -167,7 +168,8 @@ msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)
 msgid "Header detected but device %s is too small."
 msgstr "检测到标头但设备 %s 太小。"
 
-#: lib/setup.c:661
+#: lib/setup.c:661 lib/setup.c:2777 lib/setup.c:4114
+#: lib/luks2/luks2_reencrypt.c:3154 lib/luks2/luks2_reencrypt.c:3520
 msgid "This operation is not supported for this device type."
 msgstr "不支持在这类设备上执行此操作。"
 
@@ -176,18 +178,13 @@ msgstr "不支持在这类设备上执行此操作。"
 msgid "Illegal operation with reencryption in-progress."
 msgstr "正在进行离线重加密。中止。"
 
-#: lib/setup.c:832 lib/luks1/keymanage.c:475
+#: lib/setup.c:832 lib/luks1/keymanage.c:482
 #, c-format
 msgid "Unsupported LUKS version %d."
 msgstr "不支持的 LUKS 版本 %d。"
 
-#: lib/setup.c:849 lib/setup.c:1539 lib/setup.c:1959
-#, fuzzy
-msgid "Detached metadata device is not supported for this crypt type."
-msgstr "此加密类型不支持 UUID。"
-
-#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628
-#: lib/setup.c:2777 lib/setup.c:4512
+#: lib/setup.c:1427 lib/setup.c:2547 lib/setup.c:2619 lib/setup.c:2631
+#: lib/setup.c:2785 lib/setup.c:4570
 #, c-format
 msgid "Device %s is not active."
 msgstr "设备 %s 未激活。"
@@ -201,7 +198,7 @@ msgstr "加密设备 %s 下层的设备消失了。"
 msgid "Invalid plain crypt parameters."
 msgstr "无效的纯加密选项。"
 
-#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74
+#: lib/setup.c:1529 lib/setup.c:1949
 msgid "Invalid key size."
 msgstr "无效的密钥大小。"
 
@@ -209,12 +206,17 @@ msgstr "无效的密钥大小。"
 msgid "UUID is not supported for this crypt type."
 msgstr "此加密类型不支持 UUID。"
 
-#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308
-#: src/cryptsetup.c:1226 src/cryptsetup.c:3923
+#: lib/setup.c:1539 lib/setup.c:1959
+#, fuzzy
+msgid "Detached metadata device is not supported for this crypt type."
+msgstr "此加密类型不支持 UUID。"
+
+#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2418
+#: src/cryptsetup.c:1346 src/cryptsetup.c:4087
 msgid "Unsupported encryption sector size."
 msgstr "不支持的加密扇区大小。"
 
-#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818
+#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2826
 #, fuzzy
 msgid "Device size is not aligned to requested sector size."
 msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。"
@@ -259,8 +261,8 @@ msgstr ""
 msgid "WARNING: LUKS2 keyslots area size changed to %<PRIu64> bytes.\n"
 msgstr ""
 
-#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255
-#: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367
+#: lib/setup.c:1882 lib/utils_device.c:852 lib/luks1/keyencryption.c:255
+#: lib/luks2/luks2_reencrypt.c:2468 lib/luks2/luks2_reencrypt.c:3609
 #, c-format
 msgid "Device %s is too small."
 msgstr "设备 %s 太小。"
@@ -293,16 +295,16 @@ msgstr "无法在没有设备的情况下格式化 LOOPAES。"
 msgid "Can't format VERITY without device."
 msgstr "无法在没有设备的情况下格式化 VERIFY。"
 
-#: lib/setup.c:2000 lib/verity/verity.c:102
+#: lib/setup.c:2000 lib/verity/verity.c:103
 #, c-format
 msgid "Unsupported VERITY hash type %d."
 msgstr "不支持的 VERITY 哈希类型 %d。"
 
-#: lib/setup.c:2006 lib/verity/verity.c:110
+#: lib/setup.c:2006 lib/verity/verity.c:111
 msgid "Unsupported VERITY block size."
 msgstr "不支持的 VERITY 块大小。"
 
-#: lib/setup.c:2011 lib/verity/verity.c:74
+#: lib/setup.c:2011 lib/verity/verity.c:75
 msgid "Unsupported VERITY hash offset."
 msgstr "不支持的 VERITY 哈希偏移量。"
 
@@ -332,244 +334,244 @@ msgstr ""
 msgid "Unknown crypt device type %s requested."
 msgstr "请求了未知的加密设备类型 %s。"
 
-#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635
+#: lib/setup.c:2553 lib/setup.c:2625 lib/setup.c:2638
 #, fuzzy, c-format
 msgid "Unsupported parameters on device %s."
 msgstr "无法将设备 %s 上的标头擦除。"
 
-#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408
-#: lib/luks2/luks2_reencrypt.c:2737
+#: lib/setup.c:2559 lib/setup.c:2644 lib/luks2/luks2_reencrypt.c:2524
+#: lib/luks2/luks2_reencrypt.c:2876
 #, fuzzy, c-format
 msgid "Mismatching parameters on device %s."
 msgstr "无法将设备 %s 上的标头擦除。"
 
-#: lib/setup.c:2661
+#: lib/setup.c:2664
 msgid "Crypt devices mismatch."
 msgstr ""
 
-#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054
-#: lib/luks2/luks2_reencrypt.c:3145
+#: lib/setup.c:2701 lib/setup.c:2706 lib/luks2/luks2_reencrypt.c:2164
+#: lib/luks2/luks2_reencrypt.c:3366
 #, fuzzy, c-format
 msgid "Failed to reload device %s."
 msgstr "无法获取设备 %s 的读取锁。"
 
-#: lib/setup.c:2708 lib/setup.c:2713 lib/luks2/luks2_reencrypt.c:2025
-#: lib/luks2/luks2_reencrypt.c:2032
+#: lib/setup.c:2711 lib/setup.c:2716 lib/luks2/luks2_reencrypt.c:2135
+#: lib/luks2/luks2_reencrypt.c:2142
 #, fuzzy, c-format
 msgid "Failed to suspend device %s."
 msgstr "无法获取设备 %s 的读取锁。"
 
-#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039
-#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149
+#: lib/setup.c:2721 lib/luks2/luks2_reencrypt.c:2149
+#: lib/luks2/luks2_reencrypt.c:3301 lib/luks2/luks2_reencrypt.c:3370
 #, fuzzy, c-format
 msgid "Failed to resume device %s."
 msgstr "打开临时密钥存储设备失败。\n"
 
-#: lib/setup.c:2732
+#: lib/setup.c:2735
 #, c-format
 msgid "Fatal error while reloading device %s (on top of device %s)."
 msgstr ""
 
-#: lib/setup.c:2735 lib/setup.c:2737
+#: lib/setup.c:2738 lib/setup.c:2740
 #, fuzzy, c-format
 msgid "Failed to switch device %s to dm-error."
 msgstr "无法获取设备 %s 上的写入锁。"
 
-#: lib/setup.c:2809
+#: lib/setup.c:2817
 msgid "Cannot resize loop device."
 msgstr "无法改变回环设备大小。"
 
-#: lib/setup.c:2882
+#: lib/setup.c:2890
 msgid "Do you really want to change UUID of device?"
 msgstr "你真的想改变设备的 UUID 吗?"
 
-#: lib/setup.c:2958
+#: lib/setup.c:2966
 msgid "Header backup file does not contain compatible LUKS header."
 msgstr "标头备份文件不包含兼容的 LUKS 标头。"
 
-#: lib/setup.c:3058
+#: lib/setup.c:3066
 #, c-format
 msgid "Volume %s is not active."
 msgstr "卷 %s 未激活。"
 
-#: lib/setup.c:3069
+#: lib/setup.c:3077
 #, c-format
 msgid "Volume %s is already suspended."
 msgstr "卷 %s 已挂起。"
 
-#: lib/setup.c:3082
+#: lib/setup.c:3090
 #, c-format
 msgid "Suspend is not supported for device %s."
 msgstr "设备 %s 不支持挂起。"
 
-#: lib/setup.c:3084
+#: lib/setup.c:3092
 #, c-format
 msgid "Error during suspending device %s."
 msgstr "挂起设备 %s 时出错。"
 
-#: lib/setup.c:3117 lib/setup.c:3184 lib/setup.c:3267
-#, c-format
-msgid "Volume %s is not suspended."
-msgstr "卷 %s 未挂起。"
-
-#: lib/setup.c:3146
+#: lib/setup.c:3128
 #, c-format
 msgid "Resume is not supported for device %s."
 msgstr "设备 %s 不支持恢复。"
 
-#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297
+#: lib/setup.c:3130
 #, c-format
 msgid "Error during resuming device %s."
 msgstr "恢复设备 %s 时出错。"
 
-#: lib/setup.c:3282 lib/setup.c:3648 lib/setup.c:4309 lib/setup.c:4322
-#: lib/setup.c:4330 lib/setup.c:4343 lib/setup.c:4693 lib/setup.c:5839
+#: lib/setup.c:3164 lib/setup.c:3212 lib/setup.c:3282
+#, c-format
+msgid "Volume %s is not suspended."
+msgstr "卷 %s 未挂起。"
+
+#: lib/setup.c:3297 lib/setup.c:3652 lib/setup.c:4363 lib/setup.c:4376
+#: lib/setup.c:4384 lib/setup.c:4397 lib/setup.c:4751 lib/setup.c:5900
 msgid "Volume key does not match the volume."
 msgstr "卷密钥与卷不匹配。"
 
-#: lib/setup.c:3343 lib/setup.c:3531
+#: lib/setup.c:3344 lib/setup.c:3535
 msgid "Cannot add key slot, all slots disabled and no volume key provided."
 msgstr "无法添加密钥槽,所有密钥槽已禁用且未提供卷密钥。"
 
-#: lib/setup.c:3483
+#: lib/setup.c:3487
 msgid "Failed to swap new key slot."
 msgstr "交换新密钥槽失败。"
 
-#: lib/setup.c:3669
+#: lib/setup.c:3673
 #, c-format
 msgid "Key slot %d is invalid."
 msgstr "密钥槽 %d 无效。"
 
-#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917
+#: lib/setup.c:3679 src/cryptsetup.c:1684 src/cryptsetup.c:2029
 #, fuzzy, c-format
 msgid "Keyslot %d is not active."
 msgstr "密钥槽 %d 未使用。\n"
 
-#: lib/setup.c:3694
+#: lib/setup.c:3698
 #, fuzzy
 msgid "Device header overlaps with data area."
 msgstr "数据区域重叠覆盖了哈希区域。"
 
-#: lib/setup.c:3981
+#: lib/setup.c:3992
 #, fuzzy
 msgid "Reencryption in-progress. Cannot activate device."
 msgstr "重加密已在进行中。"
 
-#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243
-#: lib/luks2/luks2_reencrypt.c:2836
+#: lib/setup.c:3994 lib/luks2/luks2_json_metadata.c:2430
+#: lib/luks2/luks2_reencrypt.c:2975
 #, fuzzy
 msgid "Failed to get reencryption lock."
 msgstr "无法获取写入设备锁。"
 
-#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855
+#: lib/setup.c:4007 lib/luks2/luks2_reencrypt.c:2994
 #, fuzzy
 msgid "LUKS2 reencryption recovery failed."
 msgstr "不支持的加密扇区大小。"
 
-#: lib/setup.c:4127 lib/setup.c:4379
+#: lib/setup.c:4175 lib/setup.c:4437
 #, fuzzy
 msgid "Device type is not properly initialized."
 msgstr "设备类型未正确初始化。"
 
-#: lib/setup.c:4171
-#, c-format
-msgid "Cannot use device %s, name is invalid or still in use."
-msgstr "无法使用设备 %s,名称无效或它正被使用。"
-
-#: lib/setup.c:4174
+#: lib/setup.c:4223
 #, c-format
 msgid "Device %s already exists."
 msgstr "设备 %s 已存在。"
 
-#: lib/setup.c:4296
+#: lib/setup.c:4230
+#, c-format
+msgid "Cannot use device %s, name is invalid or still in use."
+msgstr "无法使用设备 %s,名称无效或它正被使用。"
+
+#: lib/setup.c:4350
 msgid "Incorrect volume key specified for plain device."
 msgstr "为普通设备指定的卷密钥有误。"
 
-#: lib/setup.c:4405
+#: lib/setup.c:4463
 msgid "Incorrect root hash specified for verity device."
 msgstr "为 verity 设备指定的根 hash 不正确。"
 
-#: lib/setup.c:4412
+#: lib/setup.c:4470
 msgid "Root hash signature required."
 msgstr ""
 
-#: lib/setup.c:4421
+#: lib/setup.c:4479
 #, fuzzy
 msgid "Kernel keyring missing: required for passing signature to kernel."
 msgstr "该内核不支持内核密钥环。"
 
-#: lib/setup.c:4438 lib/setup.c:5915
+#: lib/setup.c:4496 lib/setup.c:5976
 msgid "Failed to load key in kernel keyring."
 msgstr "在内核密钥环中加载密钥失败。"
 
-#: lib/setup.c:4491 lib/setup.c:4507 lib/luks2/luks2_json_metadata.c:2296
-#: src/cryptsetup.c:2664
+#: lib/setup.c:4549 lib/setup.c:4565 lib/luks2/luks2_json_metadata.c:2483
+#: src/cryptsetup.c:2794
 #, c-format
 msgid "Device %s is still in use."
 msgstr "设备 %s 仍在使用。"
 
-#: lib/setup.c:4516
+#: lib/setup.c:4574
 #, c-format
 msgid "Invalid device %s."
 msgstr "设备 %s 无效。"
 
-#: lib/setup.c:4632
+#: lib/setup.c:4690
 msgid "Volume key buffer too small."
 msgstr "卷密钥缓冲区太小。"
 
-#: lib/setup.c:4640
+#: lib/setup.c:4698
 msgid "Cannot retrieve volume key for plain device."
 msgstr "无法获取普通设备的卷密钥。"
 
-#: lib/setup.c:4657
+#: lib/setup.c:4715
 #, fuzzy
 msgid "Cannot retrieve root hash for verity device."
 msgstr "为 verity 设备指定的根 hash 不正确。"
 
-#: lib/setup.c:4659
+#: lib/setup.c:4717
 #, c-format
 msgid "This operation is not supported for %s crypt device."
 msgstr "不支持在 %s 加密设备上执行此操作。"
 
-#: lib/setup.c:4865
+#: lib/setup.c:4923
 msgid "Dump operation is not supported for this device type."
 msgstr "不支持在此类设备上执行导出操作。"
 
-#: lib/setup.c:5190
+#: lib/setup.c:5251
 #, c-format
 msgid "Data offset is not multiple of %u bytes."
 msgstr ""
 
-#: lib/setup.c:5475
+#: lib/setup.c:5536
 #, c-format
 msgid "Cannot convert device %s which is still in use."
 msgstr "无法转换正在使用的设备 %s。"
 
-#: lib/setup.c:5772
+#: lib/setup.c:5833
 #, c-format
 msgid "Failed to assign keyslot %u as the new volume key."
 msgstr "将密钥槽 %u 指定为新卷密钥的操作失败。"
 
-#: lib/setup.c:5845
+#: lib/setup.c:5906
 #, fuzzy
 msgid "Failed to initialize default LUKS2 keyslot parameters."
 msgstr "初始化默认 LUKS2 密钥槽参数失败。"
 
-#: lib/setup.c:5851
+#: lib/setup.c:5912
 #, fuzzy, c-format
 msgid "Failed to assign keyslot %d to digest."
 msgstr "交换新密钥槽失败。\n"
 
-#: lib/setup.c:5982
+#: lib/setup.c:6043
 msgid "Kernel keyring is not supported by the kernel."
 msgstr "该内核不支持内核密钥环。"
 
-#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952
+#: lib/setup.c:6053 lib/luks2/luks2_reencrypt.c:3179
 #, c-format
 msgid "Failed to read passphrase from keyring (error %d)."
 msgstr "从密钥环读取口令失败(错误 %d)。"
 
-#: lib/setup.c:6016
+#: lib/setup.c:6077
 msgid "Failed to acquire global memory-hard access serialization lock."
 msgstr ""
 
@@ -598,8 +600,8 @@ msgstr "获取 (stat) 密钥文件信息失败。"
 msgid "Cannot seek to requested keyfile offset."
 msgstr "无法寻找 (seek) 到请求的密钥文件偏移量。"
 
-#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188
-#: src/utils_password.c:201
+#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:223
+#: src/utils_password.c:235
 msgid "Out of memory while reading passphrase."
 msgstr "读取密码时内存耗尽。"
 
@@ -619,51 +621,56 @@ msgstr "超出最大密钥文件大小。"
 msgid "Cannot read requested amount of data."
 msgstr "无法读取请求量的数据。"
 
-#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110
+#: lib/utils_device.c:190 lib/utils_storage_wrappers.c:110
 #: lib/luks1/keyencryption.c:91
 #, fuzzy, c-format
 msgid "Device %s does not exist or access denied."
 msgstr "设备 %s 不存在或访问被拒绝。"
 
-#: lib/utils_device.c:197
+#: lib/utils_device.c:200
 #, fuzzy, c-format
 msgid "Device %s is not compatible."
 msgstr "设备 %s 未激活。"
 
-#: lib/utils_device.c:642
+#: lib/utils_device.c:544
+#, c-format
+msgid "Ignoring bogus optimal-io size for data device (%u bytes)."
+msgstr ""
+
+#: lib/utils_device.c:666
 #, fuzzy, c-format
 msgid "Device %s is too small. Need at least %<PRIu64> bytes."
 msgstr "设备 %s 过小。(LUKS1 需要至少 %<PRIu64> 字节。)"
 
-#: lib/utils_device.c:723
+#: lib/utils_device.c:747
 #, c-format
 msgid "Cannot use device %s which is in use (already mapped or mounted)."
 msgstr "无法使用正被使用的设备 %s(已被映射或挂载)。"
 
-#: lib/utils_device.c:727
+#: lib/utils_device.c:751
 #, c-format
 msgid "Cannot use device %s, permission denied."
 msgstr "无法使用设备 %s,权限被拒绝。"
 
-#: lib/utils_device.c:730
+#: lib/utils_device.c:754
 #, c-format
 msgid "Cannot get info about device %s."
 msgstr "无法获取有关设备 %s 的信息。"
 
-#: lib/utils_device.c:753
+#: lib/utils_device.c:777
 msgid "Cannot use a loopback device, running as non-root user."
 msgstr "无法使用回环设备,正作为非 root 用户运行。"
 
-#: lib/utils_device.c:763
+#: lib/utils_device.c:787
 msgid "Attaching loopback device failed (loop device with autoclear flag is required)."
 msgstr "连接回环设备失败(需要有 autoclear 旗标的回环设备)。"
 
-#: lib/utils_device.c:809
+#: lib/utils_device.c:833
 #, c-format
 msgid "Requested offset is beyond real size of device %s."
 msgstr "请求的偏移量超出设备 %s 的真实大小。"
 
-#: lib/utils_device.c:817
+#: lib/utils_device.c:841
 #, c-format
 msgid "Device %s has zero size."
 msgstr "设备 %s 大小为零。"
@@ -740,16 +747,16 @@ msgstr "锁定中止。锁定路径 %s/%s 不可用(不是一个目录或缺
 
 #: lib/utils_device_locking.c:109
 #, c-format
-msgid "WARNING: Locking directory %s/%s is missing!\n"
-msgstr "警告:锁定目录 %s/%s 缺失!\n"
+msgid "Locking directory %s/%s will be created with default compiled-in permissions."
+msgstr ""
 
 #: lib/utils_device_locking.c:119
 #, c-format
 msgid "Locking aborted. The locking path %s/%s is unusable (%s is not a directory)."
 msgstr "锁定中止。锁定路径 %s/%s 不可用(%s 不是目录)。"
 
-#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941
-#: src/cryptsetup_reencrypt.c:1025
+#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:959
+#: src/cryptsetup_reencrypt.c:1043
 msgid "Cannot seek to device offset."
 msgstr "无法寻找到设备偏移位置。"
 
@@ -776,8 +783,8 @@ msgid "Cipher specification should be in [cipher]-[mode]-[iv] format."
 msgstr ""
 
 #: lib/luks1/keyencryption.c:97 lib/luks1/keymanage.c:344
-#: lib/luks1/keymanage.c:635 lib/luks1/keymanage.c:1080
-#: lib/luks2/luks2_json_metadata.c:1252 lib/luks2/luks2_keyslot.c:734
+#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1094
+#: lib/luks2/luks2_json_metadata.c:1347 lib/luks2/luks2_keyslot.c:740
 #, c-format
 msgid "Cannot write to device %s, permission denied."
 msgstr "无法写入到设备 %s,访问被拒绝。"
@@ -796,12 +803,12 @@ msgid "IO error while encrypting keyslot."
 msgstr "加密密钥槽时发生输入输出错误。"
 
 #: lib/luks1/keyencryption.c:246 lib/luks1/keymanage.c:347
-#: lib/luks1/keymanage.c:588 lib/luks1/keymanage.c:638 lib/tcrypt/tcrypt.c:670
-#: lib/verity/verity.c:80 lib/verity/verity.c:178 lib/verity/verity_hash.c:311
-#: lib/verity/verity_hash.c:322 lib/verity/verity_hash.c:342
-#: lib/verity/verity_fec.c:241 lib/verity/verity_fec.c:253
-#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1255
-#: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212
+#: lib/luks1/keymanage.c:595 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:670
+#: lib/verity/verity.c:81 lib/verity/verity.c:194 lib/verity/verity_hash.c:286
+#: lib/verity/verity_hash.c:295 lib/verity/verity_hash.c:315
+#: lib/verity/verity_fec.c:250 lib/verity/verity_fec.c:262
+#: lib/verity/verity_fec.c:267 lib/luks2/luks2_json_metadata.c:1350
+#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:230
 #, c-format
 msgid "Cannot open device %s."
 msgstr "无法打开设备 %s。"
@@ -822,44 +829,44 @@ msgstr "设备 %s 过小。(LUKS1 需要至少 %<PRIu64> 字节。)"
 msgid "LUKS keyslot %u is invalid."
 msgstr "LUKS 密钥槽 %u 无效。"
 
-#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:472
-#: lib/luks2/luks2_json_metadata.c:1083 src/cryptsetup.c:1433
-#: src/cryptsetup.c:1559 src/cryptsetup.c:1616 src/cryptsetup.c:1672
-#: src/cryptsetup.c:1739 src/cryptsetup.c:1842 src/cryptsetup.c:1906
-#: src/cryptsetup.c:2136 src/cryptsetup.c:2331 src/cryptsetup.c:2391
-#: src/cryptsetup.c:2457 src/cryptsetup.c:2621 src/cryptsetup.c:3271
-#: src/cryptsetup.c:3280 src/cryptsetup_reencrypt.c:1388
+#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:479
+#: lib/luks2/luks2_json_metadata.c:1193 src/cryptsetup.c:1545
+#: src/cryptsetup.c:1671 src/cryptsetup.c:1728 src/cryptsetup.c:1784
+#: src/cryptsetup.c:1851 src/cryptsetup.c:1954 src/cryptsetup.c:2018
+#: src/cryptsetup.c:2248 src/cryptsetup.c:2459 src/cryptsetup.c:2521
+#: src/cryptsetup.c:2587 src/cryptsetup.c:2751 src/cryptsetup.c:3427
+#: src/cryptsetup.c:3436 src/cryptsetup_reencrypt.c:1406
 #, c-format
 msgid "Device %s is not a valid LUKS device."
 msgstr "%s 不是有效的 LUKS 设备。"
 
-#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100
+#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1210
 #, c-format
 msgid "Requested header backup file %s already exists."
 msgstr "请求的标头备份文件 %s 已存在。"
 
-#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102
+#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1212
 #, c-format
 msgid "Cannot create header backup file %s."
 msgstr "无法创建标头备份文件 %s。"
 
-#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109
+#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1219
 #, c-format
 msgid "Cannot write header backup file %s."
 msgstr "无法写入标头备份文件 %s。"
 
-#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161
+#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1256
 #, fuzzy
 msgid "Backup file does not contain valid LUKS header."
 msgstr "备份文件不包含有效 LUKS 标头。"
 
-#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549
-#: lib/luks2/luks2_json_metadata.c:1182
+#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:556
+#: lib/luks2/luks2_json_metadata.c:1277
 #, c-format
 msgid "Cannot open header backup file %s."
 msgstr "无法打开备份标头文件 %s。"
 
-#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190
+#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1285
 #, c-format
 msgid "Cannot read header backup file %s."
 msgstr "无法读取标头备份文件 %s。"
@@ -882,7 +889,7 @@ msgstr "不包含 LUKS 标头。替换标头可能损毁设备上的数据。"
 msgid "already contains LUKS header. Replacing header will destroy existing keyslots."
 msgstr "已包含 LUKS 标头。替换标头将损毁已存在的密钥槽。"
 
-#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224
+#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1319
 msgid ""
 "\n"
 "WARNING: real device header has different UUID than backup!"
@@ -894,102 +901,102 @@ msgstr ""
 msgid "Non standard key size, manual repair required."
 msgstr "不标准的密钥大小,需要手动修复。"
 
-#: lib/luks1/keymanage.c:380
+#: lib/luks1/keymanage.c:385
 msgid "Non standard keyslots alignment, manual repair required."
 msgstr "不标准的密钥槽对齐,需要手动修复。"
 
-#: lib/luks1/keymanage.c:390
+#: lib/luks1/keymanage.c:397
 msgid "Repairing keyslots."
 msgstr "正在修复密钥槽。"
 
-#: lib/luks1/keymanage.c:409
+#: lib/luks1/keymanage.c:416
 #, c-format
 msgid "Keyslot %i: offset repaired (%u -> %u)."
 msgstr "密钥槽 %i: 偏移已修复 (%u -> %u)。"
 
-#: lib/luks1/keymanage.c:417
+#: lib/luks1/keymanage.c:424
 #, c-format
 msgid "Keyslot %i: stripes repaired (%u -> %u)."
 msgstr "密钥槽 %i:已修复条带(%u -> %u)。"
 
-#: lib/luks1/keymanage.c:426
+#: lib/luks1/keymanage.c:433
 #, c-format
 msgid "Keyslot %i: bogus partition signature."
 msgstr "密钥槽 %i:虚假的分区签名。"
 
-#: lib/luks1/keymanage.c:431
+#: lib/luks1/keymanage.c:438
 #, c-format
 msgid "Keyslot %i: salt wiped."
 msgstr "密钥槽 %i: 已清除盐。"
 
-#: lib/luks1/keymanage.c:448
+#: lib/luks1/keymanage.c:455
 msgid "Writing LUKS header to disk."
 msgstr "正在将 LUKS 标头写入磁盘。"
 
-#: lib/luks1/keymanage.c:453
+#: lib/luks1/keymanage.c:460
 msgid "Repair failed."
 msgstr "修复失败。"
 
-#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750
+#: lib/luks1/keymanage.c:488 lib/luks1/keymanage.c:757
 #, c-format
 msgid "Requested LUKS hash %s is not supported."
 msgstr "不支持请求的 LUKS 哈希 %s。"
 
-#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133
+#: lib/luks1/keymanage.c:516 src/cryptsetup.c:1237
 msgid "No known problems detected for LUKS header."
 msgstr "未在 LUKS 标头发现已知问题。"
 
-#: lib/luks1/keymanage.c:660
+#: lib/luks1/keymanage.c:667
 #, c-format
 msgid "Error during update of LUKS header on device %s."
 msgstr "更新设备 %s 上的 LUKS 标头时出错。"
 
-#: lib/luks1/keymanage.c:668
+#: lib/luks1/keymanage.c:675
 #, c-format
 msgid "Error re-reading LUKS header after update on device %s."
 msgstr "在更新设备 %s 后重新读取 LUKS 标头失败。"
 
-#: lib/luks1/keymanage.c:744
+#: lib/luks1/keymanage.c:751
 #, fuzzy
 msgid "Data offset for LUKS header must be either 0 or higher than header size."
 msgstr "分离的 LUKS 标头的数据偏移量必须为零或高于标头大小(%d 扇区)。"
 
-#: lib/luks1/keymanage.c:755 lib/luks1/keymanage.c:825
-#: lib/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1001
-#: src/cryptsetup.c:2784
+#: lib/luks1/keymanage.c:762 lib/luks1/keymanage.c:832
+#: lib/luks2/luks2_json_format.c:284 lib/luks2/luks2_json_metadata.c:1101
+#: src/cryptsetup.c:2914
 msgid "Wrong LUKS UUID format provided."
 msgstr "提供了错误的 LUKS UUID 格式。"
 
-#: lib/luks1/keymanage.c:778
+#: lib/luks1/keymanage.c:785
 msgid "Cannot create LUKS header: reading random salt failed."
 msgstr "无法创建 LUKS 标头:读取随机盐失败。"
 
-#: lib/luks1/keymanage.c:804
+#: lib/luks1/keymanage.c:811
 #, c-format
 msgid "Cannot create LUKS header: header digest failed (using hash %s)."
 msgstr "无法创建 LUKS 标头:标头摘要失败(正在使用哈希 %s)。"
 
-#: lib/luks1/keymanage.c:848
+#: lib/luks1/keymanage.c:855
 #, c-format
 msgid "Key slot %d active, purge first."
 msgstr "密钥槽 %d 已激活,请先清除。"
 
-#: lib/luks1/keymanage.c:854
+#: lib/luks1/keymanage.c:861
 #, fuzzy, c-format
 msgid "Key slot %d material includes too few stripes. Header manipulation?"
 msgstr "密钥槽 %d 条带数过少。标头修改?\n"
 
-#: lib/luks1/keymanage.c:990
+#: lib/luks1/keymanage.c:1002
 #, fuzzy, c-format
 msgid "Cannot open keyslot (using hash %s)."
 msgstr "密钥处理错误(使用散列 %s)。"
 
-#: lib/luks1/keymanage.c:1066
+#: lib/luks1/keymanage.c:1080
 #, fuzzy, c-format
 msgid "Key slot %d is invalid, please select keyslot between 0 and %d."
 msgstr "密钥槽 %d 无效,请选择标号 0 到 %d 间的密钥槽。\n"
 
-#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738
+#: lib/luks1/keymanage.c:1098 lib/luks2/luks2_keyslot.c:744
 #, c-format
 msgid "Cannot wipe device %s."
 msgstr "无法擦除设备 %s。"
@@ -1027,11 +1034,11 @@ msgstr "超出 TCRYPT 口令最大长度限制 (%d)。"
 msgid "PBKDF2 hash algorithm %s not available, skipping."
 msgstr "PBKDF2 哈希算法 %s 不可用,将跳过。"
 
-#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010
+#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1059
 msgid "Required kernel crypto interface not available."
 msgstr "无法找到所需的内核加密接口。"
 
-#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012
+#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1061
 msgid "Ensure you have algif_skcipher kernel module loaded."
 msgstr "请确定您已载入内核模块 algif_skcipher。"
 
@@ -1045,167 +1052,180 @@ msgstr "扇区大小为 %d 时不支持激活。"
 msgid "Kernel does not support activation for this TCRYPT legacy mode."
 msgstr "内核不支持激活此处的旧 TCRYPT 模式。"
 
-#: lib/tcrypt/tcrypt.c:793
+#: lib/tcrypt/tcrypt.c:790
 #, c-format
 msgid "Activating TCRYPT system encryption for partition %s."
 msgstr "正在为分区 %s 激活 TCRYPT 系统加密。"
 
-#: lib/tcrypt/tcrypt.c:871
+#: lib/tcrypt/tcrypt.c:868
 #, fuzzy
 msgid "Kernel does not support TCRYPT compatible mapping."
 msgstr "内核不支持 TCRYPT 兼容映射。"
 
-#: lib/tcrypt/tcrypt.c:1093
+#: lib/tcrypt/tcrypt.c:1090
 msgid "This function is not supported without TCRYPT header load."
 msgstr "未载入 TCRYPT 标头时不支持此功能。"
 
-#: lib/bitlk/bitlk.c:333
+#: lib/bitlk/bitlk.c:350
 #, c-format
 msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:380
+#: lib/bitlk/bitlk.c:397
 msgid "Invalid string found when parsing Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:385
+#: lib/bitlk/bitlk.c:402
 #, c-format
 msgid "Unexpected string ('%s') found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:399
+#: lib/bitlk/bitlk.c:419
 #, c-format
 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:479
+#: lib/bitlk/bitlk.c:502
 #, fuzzy, c-format
 msgid "Failed to read BITLK signature from %s."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/bitlk/bitlk.c:485
-msgid "BITLK version 1 is currently not supported."
+#: lib/bitlk/bitlk.c:514
+msgid "Invalid or unknown signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:491
-msgid "Invalid or unknown boot signature for BITLK device."
+#: lib/bitlk/bitlk.c:520
+msgid "BITLK version 1 is currently not supported."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:503
-msgid "Invalid or unknown signature for BITLK device."
+#: lib/bitlk/bitlk.c:526
+msgid "Invalid or unknown boot signature for BITLK device."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:510
+#: lib/bitlk/bitlk.c:538
 #, fuzzy, c-format
 msgid "Unsupported sector size %<PRIu16>."
 msgstr "不支持的加密扇区大小。"
 
-#: lib/bitlk/bitlk.c:518
+#: lib/bitlk/bitlk.c:546
 #, fuzzy, c-format
 msgid "Failed to read BITLK header from %s."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/bitlk/bitlk.c:543
+#: lib/bitlk/bitlk.c:571
 #, fuzzy, c-format
 msgid "Failed to read BITLK FVE metadata from %s."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/bitlk/bitlk.c:594
+#: lib/bitlk/bitlk.c:622
 #, fuzzy
 msgid "Unknown or unsupported encryption type."
 msgstr "不支持的加密扇区大小。"
 
-#: lib/bitlk/bitlk.c:627
+#: lib/bitlk/bitlk.c:655
 #, fuzzy, c-format
 msgid "Failed to read BITLK metadata entries from %s."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/bitlk/bitlk.c:921
+#: lib/bitlk/bitlk.c:897
+#, c-format
+msgid "Unexpected metadata entry type '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:912
+#, c-format
+msgid "Unexpected metadata entry value '%u' found when parsing external key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:980
+msgid "Unexpected metadata entry found when parsing startup key."
+msgstr ""
+
+#: lib/bitlk/bitlk.c:1071
 #, fuzzy
 msgid "This operation is not supported."
 msgstr "不支持在 %s 加密设备上执行此操作。"
 
-#: lib/bitlk/bitlk.c:929
-#, fuzzy
-msgid "Wrong key size."
-msgstr "无效的密钥大小。"
+#: lib/bitlk/bitlk.c:1079
+msgid "Unexpected key data size."
+msgstr ""
 
-#: lib/bitlk/bitlk.c:981
+#: lib/bitlk/bitlk.c:1133
 msgid "This BITLK device is in an unsupported state and cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:987
+#: lib/bitlk/bitlk.c:1139
 #, c-format
 msgid "BITLK devices with type '%s' cannot be activated."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1069
+#: lib/bitlk/bitlk.c:1234
 #, fuzzy
 msgid "Activation of partially decrypted BITLK device is not supported."
 msgstr "激活临时设备失败。"
 
-#: lib/bitlk/bitlk.c:1205
+#: lib/bitlk/bitlk.c:1370
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV."
 msgstr ""
 
-#: lib/bitlk/bitlk.c:1209
+#: lib/bitlk/bitlk.c:1374
 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser."
 msgstr ""
 
-#: lib/verity/verity.c:68 lib/verity/verity.c:171
+#: lib/verity/verity.c:69 lib/verity/verity.c:180
 #, fuzzy, c-format
 msgid "Verity device %s does not use on-disk header."
 msgstr "Verity 设备 %s 未使用磁盘上的标头。"
 
-#: lib/verity/verity.c:90
+#: lib/verity/verity.c:91
 #, c-format
 msgid "Device %s is not a valid VERITY device."
 msgstr "%s 不是有效的 VERITY 设备。"
 
-#: lib/verity/verity.c:97
+#: lib/verity/verity.c:98
 #, c-format
 msgid "Unsupported VERITY version %d."
 msgstr "不支持的 VERITY 版本 %d。"
 
-#: lib/verity/verity.c:128
+#: lib/verity/verity.c:129
 msgid "VERITY header corrupted."
 msgstr "VERITY 标头损坏。"
 
-#: lib/verity/verity.c:165
+#: lib/verity/verity.c:174
 #, fuzzy, c-format
 msgid "Wrong VERITY UUID format provided on device %s."
 msgstr "为设备 %s 提供的 VERITY UUID 错误。\n"
 
-#: lib/verity/verity.c:198
+#: lib/verity/verity.c:218
 #, fuzzy, c-format
 msgid "Error during update of verity header on device %s."
 msgstr "更新设备 %s 上的 VERITY 标头时出错。\n"
 
-#: lib/verity/verity.c:256
+#: lib/verity/verity.c:276
 #, fuzzy
 msgid "Root hash signature verification is not supported."
 msgstr "不支持请求的 sector_size 选项。"
 
-#: lib/verity/verity.c:267
+#: lib/verity/verity.c:288
 msgid "Errors cannot be repaired with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:269
+#: lib/verity/verity.c:290
 #, c-format
 msgid "Found %u repairable errors with FEC device."
 msgstr ""
 
-#: lib/verity/verity.c:308
+#: lib/verity/verity.c:333
 #, fuzzy
 msgid "Kernel does not support dm-verity mapping."
 msgstr "内核不支持 dm-verity 映射。"
 
-#: lib/verity/verity.c:312
+#: lib/verity/verity.c:337
 #, fuzzy
 msgid "Kernel does not support dm-verity signature option."
 msgstr "内核不支持 dm-verity 映射。"
 
-#: lib/verity/verity.c:323
+#: lib/verity/verity.c:348
 #, fuzzy
 msgid "Verity device detected corruption after activation."
 msgstr "在 VERITY 设备激活后探测到损坏。\n"
@@ -1215,43 +1235,38 @@ msgstr "在 VERITY 设备激活后探测到损坏。\n"
 msgid "Spare area is not zeroed at position %<PRIu64>."
 msgstr "备用区位置 %<PRIu64> 未清零。\n"
 
-#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290
-#: lib/verity/verity_hash.c:303
+#: lib/verity/verity_hash.c:154 lib/verity/verity_hash.c:266
+#: lib/verity/verity_hash.c:277
 msgid "Device offset overflow."
 msgstr "设备偏移量溢出。"
 
-#: lib/verity/verity_hash.c:203
+#: lib/verity/verity_hash.c:194
 #, fuzzy, c-format
 msgid "Verification failed at position %<PRIu64>."
 msgstr "在 %<PRIu64> 上发生检验错误。\n"
 
-#: lib/verity/verity_hash.c:276
-#, fuzzy
-msgid "Invalid size parameters for verity device."
-msgstr "为 VERITY 设备提供的大小指标无效。\n"
-
-#: lib/verity/verity_hash.c:296
+#: lib/verity/verity_hash.c:273
 msgid "Hash area overflow."
 msgstr "哈希区域溢出。"
 
-#: lib/verity/verity_hash.c:373
+#: lib/verity/verity_hash.c:346
 msgid "Verification of data area failed."
 msgstr "数据区检验失败。"
 
-#: lib/verity/verity_hash.c:378
+#: lib/verity/verity_hash.c:351
 msgid "Verification of root hash failed."
 msgstr "根哈希值检验失败。"
 
-#: lib/verity/verity_hash.c:384
+#: lib/verity/verity_hash.c:357
 #, fuzzy
 msgid "Input/output error while creating hash area."
 msgstr "创建哈希数据区时发生输入/输出错误。\n"
 
-#: lib/verity/verity_hash.c:386
+#: lib/verity/verity_hash.c:359
 msgid "Creation of hash area failed."
 msgstr "创建哈希区失败。"
 
-#: lib/verity/verity_hash.c:433
+#: lib/verity/verity_hash.c:394
 #, fuzzy, c-format
 msgid "WARNING: Kernel cannot activate device if data block size exceeds page size (%u)."
 msgstr "警告:如数据块大小超过内存分页大小,内核将无法激活设备 (%u)。\n"
@@ -1262,56 +1277,64 @@ msgid "Failed to allocate RS context."
 msgstr "打开 (open) 密钥文件失败。\n"
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/verity/verity_fec.c:146
+#: lib/verity/verity_fec.c:149
 #, fuzzy
 msgid "Failed to allocate buffer."
 msgstr "获取 (stat) 密钥文件统计数据失败。\n"
 
-#: lib/verity/verity_fec.c:156
+#: lib/verity/verity_fec.c:159
 #, fuzzy, c-format
 msgid "Failed to read RS block %<PRIu64> byte %d."
 msgstr "无法访问临时密钥存储设备。\n"
 
-#: lib/verity/verity_fec.c:169
+#: lib/verity/verity_fec.c:172
 #, fuzzy, c-format
 msgid "Failed to read parity for RS block %<PRIu64>."
 msgstr "无法访问临时密钥存储设备。\n"
 
-#: lib/verity/verity_fec.c:177
+#: lib/verity/verity_fec.c:180
 #, fuzzy, c-format
 msgid "Failed to repair parity for block %<PRIu64>."
 msgstr "无法访问临时密钥存储设备。\n"
 
-#: lib/verity/verity_fec.c:188
+#: lib/verity/verity_fec.c:191
 #, fuzzy, c-format
 msgid "Failed to write parity for RS block %<PRIu64>."
 msgstr "无法访问临时密钥存储设备。\n"
 
-#: lib/verity/verity_fec.c:223
+#: lib/verity/verity_fec.c:227
 msgid "Block sizes must match for FEC."
 msgstr ""
 
-#: lib/verity/verity_fec.c:229
+#: lib/verity/verity_fec.c:233
 msgid "Invalid number of parity bytes."
 msgstr ""
 
-#: lib/verity/verity_fec.c:265
+#: lib/verity/verity_fec.c:238
+msgid "Invalid FEC segment length."
+msgstr ""
+
+#: lib/verity/verity_fec.c:302
 #, fuzzy, c-format
 msgid "Failed to determine size for device %s."
 msgstr "打开临时密钥存储设备失败。\n"
 
-#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343
+#: lib/integrity/integrity.c:272 lib/integrity/integrity.c:355
 #, fuzzy
 msgid "Kernel does not support dm-integrity mapping."
 msgstr "内核不支持 dm-verity 映射。\n"
 
-#: lib/integrity/integrity.c:277
+#: lib/integrity/integrity.c:278
 #, fuzzy
 msgid "Kernel does not support dm-integrity fixed metadata alignment."
 msgstr "内核不支持 dm-verity 映射。\n"
 
-#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959
-#: lib/luks2/luks2_json_metadata.c:1244
+#: lib/integrity/integrity.c:287
+msgid "Kernel refuses to activate insecure recalculate option (see legacy activation options to override)."
+msgstr ""
+
+#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:1059
+#: lib/luks2/luks2_json_metadata.c:1339
 #, c-format
 msgid "Failed to acquire write lock on device %s."
 msgstr "无法获取设备 %s 上的写入锁。"
@@ -1331,118 +1354,118 @@ msgstr ""
 msgid "Requested data offset is too small."
 msgstr "设备 %s 太小。"
 
-#: lib/luks2/luks2_json_format.c:271
+#: lib/luks2/luks2_json_format.c:272
 #, c-format
 msgid "WARNING: keyslots area (%<PRIu64> bytes) is very small, available LUKS2 keyslot count is very limited.\n"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:946 lib/luks2/luks2_json_metadata.c:1074
-#: lib/luks2/luks2_json_metadata.c:1150 lib/luks2/luks2_keyslot_luks2.c:92
+#: lib/luks2/luks2_json_metadata.c:1046 lib/luks2/luks2_json_metadata.c:1184
+#: lib/luks2/luks2_json_metadata.c:1245 lib/luks2/luks2_keyslot_luks2.c:92
 #: lib/luks2/luks2_keyslot_luks2.c:114
 #, c-format
 msgid "Failed to acquire read lock on device %s."
 msgstr "无法获取设备 %s 的读取锁。"
 
-#: lib/luks2/luks2_json_metadata.c:1167
+#: lib/luks2/luks2_json_metadata.c:1262
 #, c-format
 msgid "Forbidden LUKS2 requirements detected in backup %s."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1208
+#: lib/luks2/luks2_json_metadata.c:1303
 #, fuzzy
 msgid "Data offset differ on device and backup, restore failed."
 msgstr "源设备和备份上的数据偏移或密钥大小不符,恢复失败。\n"
 
-#: lib/luks2/luks2_json_metadata.c:1214
+#: lib/luks2/luks2_json_metadata.c:1309
 #, fuzzy
 msgid "Binary header with keyslot areas size differ on device and backup, restore failed."
 msgstr "源设备和备份上的数据偏移或密钥大小不符,恢复失败。\n"
 
-#: lib/luks2/luks2_json_metadata.c:1221
+#: lib/luks2/luks2_json_metadata.c:1316
 #, c-format
 msgid "Device %s %s%s%s%s"
 msgstr "设备 %s %s%s%s%s"
 
-#: lib/luks2/luks2_json_metadata.c:1222
+#: lib/luks2/luks2_json_metadata.c:1317
 #, fuzzy
 msgid "does not contain LUKS2 header. Replacing header can destroy data on that device."
 msgstr "不包含 LUKS 标头。替换标头可能损毁设备上的数据。"
 
-#: lib/luks2/luks2_json_metadata.c:1223
+#: lib/luks2/luks2_json_metadata.c:1318
 #, fuzzy
 msgid "already contains LUKS2 header. Replacing header will destroy existing keyslots."
 msgstr "已包含 LUKS 标头。替换标头将损毁已存在的密钥槽。"
 
-#: lib/luks2/luks2_json_metadata.c:1225
+#: lib/luks2/luks2_json_metadata.c:1320
 msgid ""
 "\n"
 "WARNING: unknown LUKS2 requirements detected in real device header!\n"
 "Replacing header with backup may corrupt the data on that device!"
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1227
+#: lib/luks2/luks2_json_metadata.c:1322
 msgid ""
 "\n"
 "WARNING: Unfinished offline reencryption detected on the device!\n"
 "Replacing header with backup may corrupt data."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:1323
+#: lib/luks2/luks2_json_metadata.c:1420
 #, c-format
 msgid "Ignored unknown flag %s."
 msgstr "已忽略未知旗标 %s。"
 
-#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746
+#: lib/luks2/luks2_json_metadata.c:2197 lib/luks2/luks2_reencrypt.c:1856
 #, c-format
 msgid "Missing key for dm-crypt segment %u"
 msgstr ""
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764
+#: lib/luks2/luks2_json_metadata.c:2209 lib/luks2/luks2_reencrypt.c:1874
 #, fuzzy
 msgid "Failed to set dm-crypt segment."
 msgstr "设置 pbkdf 参数失败。"
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770
+#: lib/luks2/luks2_json_metadata.c:2215 lib/luks2/luks2_reencrypt.c:1880
 #, fuzzy
 msgid "Failed to set dm-linear segment."
 msgstr "设置 pbkdf 参数失败。"
 
-#: lib/luks2/luks2_json_metadata.c:2155
+#: lib/luks2/luks2_json_metadata.c:2342
 msgid "Unsupported device integrity configuration."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2241
+#: lib/luks2/luks2_json_metadata.c:2428
 msgid "Reencryption in-progress. Cannot deactivate device."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2252 lib/luks2/luks2_reencrypt.c:3190
+#: lib/luks2/luks2_json_metadata.c:2439 lib/luks2/luks2_reencrypt.c:3416
 #, c-format
 msgid "Failed to replace suspended device %s with dm-error target."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2332
+#: lib/luks2/luks2_json_metadata.c:2519
 msgid "Failed to read LUKS2 requirements."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/luks2/luks2_json_metadata.c:2339
+#: lib/luks2/luks2_json_metadata.c:2526
 msgid "Unmet LUKS2 requirements detected."
 msgstr "探测到未满足的 LUKS2 需求。"
 
-#: lib/luks2/luks2_json_metadata.c:2347
+#: lib/luks2/luks2_json_metadata.c:2534
 msgid "Operation incompatible with device marked for legacy reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_json_metadata.c:2349
+#: lib/luks2/luks2_json_metadata.c:2536
 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584
+#: lib/luks2/luks2_keyslot.c:556 lib/luks2/luks2_keyslot.c:593
 msgid "Not enough available memory to open a keyslot."
 msgstr ""
 
-#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586
+#: lib/luks2/luks2_keyslot.c:558 lib/luks2/luks2_keyslot.c:595
 #, fuzzy
 msgid "Keyslot open failed."
 msgstr "密钥槽 %i: 已清除盐。"
@@ -1475,7 +1498,7 @@ msgstr "无法移动密钥槽区域。空间不足。"
 msgid "Unable to move keyslot area. LUKS2 keyslots area too small."
 msgstr "无法移动密钥槽区域。空间不足。"
 
-#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:887
+#: lib/luks2/luks2_luks1_convert.c:605 lib/luks2/luks2_luks1_convert.c:889
 msgid "Unable to move keyslot area."
 msgstr "无法移动密钥槽区域。"
 
@@ -1514,551 +1537,586 @@ msgstr "LUKS 密钥槽 %u 无效。\n"
 msgid "Cannot convert to LUKS1 format - keyslot %u is not LUKS1 compatible."
 msgstr "LUKS 密钥槽 %u 无效。\n"
 
-#: lib/luks2/luks2_reencrypt.c:892
+#: lib/luks2/luks2_reencrypt.c:1002
 #, c-format
 msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:897
+#: lib/luks2/luks2_reencrypt.c:1007
 #, fuzzy, c-format
 msgid "Device size must be multiple of calculated zone alignment (%zu bytes)."
 msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。"
 
-#: lib/luks2/luks2_reencrypt.c:941
+#: lib/luks2/luks2_reencrypt.c:1051
 #, fuzzy, c-format
 msgid "Unsupported resilience mode %s"
 msgstr "不支持的 LUKS 版本 %d。"
 
-#: lib/luks2/luks2_reencrypt.c:1158 lib/luks2/luks2_reencrypt.c:1313
-#: lib/luks2/luks2_reencrypt.c:1396 lib/luks2/luks2_reencrypt.c:1430
-#: lib/luks2/luks2_reencrypt.c:3030
+#: lib/luks2/luks2_reencrypt.c:1268 lib/luks2/luks2_reencrypt.c:1423
+#: lib/luks2/luks2_reencrypt.c:1506 lib/luks2/luks2_reencrypt.c:1540
+#: lib/luks2/luks2_reencrypt.c:3251
 #, fuzzy
 msgid "Failed to initialize old segment storage wrapper."
 msgstr "初始化默认 LUKS2 密钥槽参数失败。"
 
-#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291
+#: lib/luks2/luks2_reencrypt.c:1282 lib/luks2/luks2_reencrypt.c:1401
 #, fuzzy
 msgid "Failed to initialize new segment storage wrapper."
 msgstr "初始化默认 LUKS2 密钥槽参数失败。"
 
-#: lib/luks2/luks2_reencrypt.c:1340
+#: lib/luks2/luks2_reencrypt.c:1450
 #, fuzzy
 msgid "Failed to read checksums for current hotzone."
 msgstr "从备份标头读取需求失败。"
 
-#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038
+#: lib/luks2/luks2_reencrypt.c:1457 lib/luks2/luks2_reencrypt.c:3259
 #, fuzzy, c-format
 msgid "Failed to read hotzone area starting at %<PRIu64>."
 msgstr "无法访问临时密钥存储设备。\n"
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/luks2/luks2_reencrypt.c:1366
+#: lib/luks2/luks2_reencrypt.c:1476
 #, fuzzy, c-format
 msgid "Failed to decrypt sector %zu."
 msgstr "获取 (stat) 密钥文件统计数据失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:1372
+#: lib/luks2/luks2_reencrypt.c:1482
 #, fuzzy, c-format
 msgid "Failed to recover sector %zu."
 msgstr "打开 (open) 密钥文件失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:1867
+#: lib/luks2/luks2_reencrypt.c:1977
 #, c-format
 msgid "Source and target device sizes don't match. Source %<PRIu64>, target: %<PRIu64>."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1965
+#: lib/luks2/luks2_reencrypt.c:2075
 #, fuzzy, c-format
 msgid "Failed to activate hotzone device %s."
 msgstr "无法获取设备 %s 上的写入锁。"
 
-#: lib/luks2/luks2_reencrypt.c:1982
+#: lib/luks2/luks2_reencrypt.c:2092
 #, c-format
 msgid "Failed to activate overlay device %s with actual origin table."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:1989
+#: lib/luks2/luks2_reencrypt.c:2099
 #, fuzzy, c-format
 msgid "Failed to load new mapping for device %s."
 msgstr "打开临时密钥存储设备失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:2060
+#: lib/luks2/luks2_reencrypt.c:2170
 #, fuzzy
 msgid "Failed to refresh reencryption devices stack."
 msgstr "无法获取设备 %s 的读取锁。"
 
-#: lib/luks2/luks2_reencrypt.c:2216
+#: lib/luks2/luks2_reencrypt.c:2326
 #, fuzzy
 msgid "Failed to set new keyslots area size."
 msgstr "交换新密钥槽失败。"
 
-#: lib/luks2/luks2_reencrypt.c:2318
+#: lib/luks2/luks2_reencrypt.c:2430
 #, fuzzy, c-format
 msgid "Data shift is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。"
 
-#: lib/luks2/luks2_reencrypt.c:2339
+#: lib/luks2/luks2_reencrypt.c:2451
 #, fuzzy, c-format
 msgid "Data device is not aligned to requested encryption sector size (%<PRIu32> bytes)."
 msgstr "设备 %s 的大小没有和请求的扇区大小对齐(%u 字节)。"
 
-#: lib/luks2/luks2_reencrypt.c:2360
+#: lib/luks2/luks2_reencrypt.c:2472
 #, c-format
 msgid "Data shift (%<PRIu64> sectors) is less than future data offset (%<PRIu64> sectors)."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779
-#: lib/luks2/luks2_reencrypt.c:2800
+#: lib/luks2/luks2_reencrypt.c:2478 lib/luks2/luks2_reencrypt.c:2918
+#: lib/luks2/luks2_reencrypt.c:2939
 #, fuzzy, c-format
 msgid "Failed to open %s in exclusive mode (already mapped or mounted)."
 msgstr "无法使用正被使用的设备 %s(已被映射或挂载)。"
 
-#: lib/luks2/luks2_reencrypt.c:2534
+#: lib/luks2/luks2_reencrypt.c:2647
 msgid "Device not marked for LUKS2 reencryption."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295
+#: lib/luks2/luks2_reencrypt.c:2664 lib/luks2/luks2_reencrypt.c:3536
 #, fuzzy
 msgid "Failed to load LUKS2 reencryption context."
 msgstr "打开 (open) 密钥文件失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:2619
+#: lib/luks2/luks2_reencrypt.c:2744
 #, fuzzy
 msgid "Failed to get reencryption state."
 msgstr "打开 (open) 密钥文件失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:2623
+#: lib/luks2/luks2_reencrypt.c:2748 lib/luks2/luks2_reencrypt.c:3032
 #, fuzzy
 msgid "Device is not in reencryption."
 msgstr "设备 %s 未激活。"
 
-#: lib/luks2/luks2_reencrypt.c:2630
+#: lib/luks2/luks2_reencrypt.c:2755 lib/luks2/luks2_reencrypt.c:3039
 #, fuzzy
 msgid "Reencryption process is already running."
 msgstr "重加密已在进行中。"
 
-#: lib/luks2/luks2_reencrypt.c:2632
+#: lib/luks2/luks2_reencrypt.c:2757 lib/luks2/luks2_reencrypt.c:3041
 #, fuzzy
 msgid "Failed to acquire reencryption lock."
 msgstr "无法获取写入设备锁。"
 
-#: lib/luks2/luks2_reencrypt.c:2650
+#: lib/luks2/luks2_reencrypt.c:2775
 msgid "Cannot proceed with reencryption. Run reencryption recovery first."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2750
+#: lib/luks2/luks2_reencrypt.c:2889
 msgid "Active device size and requested reencryption size don't match."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2764
+#: lib/luks2/luks2_reencrypt.c:2903
 msgid "Illegal device size requested in reencryption parameters."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2834
+#: lib/luks2/luks2_reencrypt.c:2973
 #, fuzzy
 msgid "Reencryption in-progress. Cannot perform recovery."
 msgstr "重加密已在进行中。"
 
-#: lib/luks2/luks2_reencrypt.c:2906
+#: lib/luks2/luks2_reencrypt.c:3129
 msgid "LUKS2 reencryption already initialized in metadata."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:2913
+#: lib/luks2/luks2_reencrypt.c:3136
 #, fuzzy
 msgid "Failed to initialize LUKS2 reencryption in metadata."
 msgstr "初始化默认 LUKS2 密钥槽参数失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3004
+#: lib/luks2/luks2_reencrypt.c:3225
 msgid "Failed to set device segments for next reencryption hotzone."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3046
+#: lib/luks2/luks2_reencrypt.c:3267
 #, fuzzy
 msgid "Failed to write reencryption resilience metadata."
 msgstr "向新表头写入活动旗标失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3053
+#: lib/luks2/luks2_reencrypt.c:3274
 #, fuzzy
 msgid "Decryption failed."
 msgstr "修复失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3058
+#: lib/luks2/luks2_reencrypt.c:3279
 #, fuzzy, c-format
 msgid "Failed to write hotzone area starting at %<PRIu64>."
 msgstr "无法访问临时密钥存储设备。\n"
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/luks2/luks2_reencrypt.c:3063
+#: lib/luks2/luks2_reencrypt.c:3284
 #, fuzzy
 msgid "Failed to sync data."
 msgstr "获取 (stat) 密钥文件信息失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3071
+#: lib/luks2/luks2_reencrypt.c:3292
 msgid "Failed to update metadata after current reencryption hotzone completed."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3138
+#: lib/luks2/luks2_reencrypt.c:3359
 #, fuzzy
 msgid "Failed to write LUKS2 metadata."
 msgstr "读取 LUKS2 需求时失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3161
+#: lib/luks2/luks2_reencrypt.c:3382
 #, fuzzy
 msgid "Failed to wipe backup segment data."
 msgstr "交换新密钥槽失败。"
 
-#: lib/luks2/luks2_reencrypt.c:3174
+#: lib/luks2/luks2_reencrypt.c:3388
+#, fuzzy, c-format
+msgid "Failed to remove unused (unbound) keyslot %d."
+msgstr "打开 (open) 密钥文件失败。\n"
+
+#: lib/luks2/luks2_reencrypt.c:3398
 #, fuzzy
-msgid "Failed to disable reencryption requirement flag."
-msgstr "读取 LUKS2 需求时失败。"
+msgid "Failed to remove reencryption keyslot."
+msgstr "打开 (open) 密钥文件失败。\n"
 
-#: lib/luks2/luks2_reencrypt.c:3182
+#: lib/luks2/luks2_reencrypt.c:3408
 #, c-format
 msgid "Fatal error while reencrypting chunk starting at %<PRIu64>, %<PRIu64> sectors long."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3191
+#: lib/luks2/luks2_reencrypt.c:3417
 msgid "Do not resume the device unless replaced with error target manually."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3240
+#: lib/luks2/luks2_reencrypt.c:3467
 msgid "Cannot proceed with reencryption. Unexpected reencryption status."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3246
+#: lib/luks2/luks2_reencrypt.c:3473
 msgid "Missing or invalid reencrypt context."
 msgstr ""
 
-#: lib/luks2/luks2_reencrypt.c:3253
+#: lib/luks2/luks2_reencrypt.c:3480
 #, fuzzy
 msgid "Failed to initialize reencryption device stack."
 msgstr "无法获取设备 %s 的读取锁。"
 
-#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308
+#: lib/luks2/luks2_reencrypt.c:3508 lib/luks2/luks2_reencrypt.c:3549
 #, fuzzy
 msgid "Failed to update reencryption context."
 msgstr "打开 (open) 密钥文件失败。\n"
 
-#: lib/luks2/luks2_token.c:262
+#: lib/luks2/luks2_reencrypt_digest.c:376
+#, fuzzy
+msgid "Reencryption metadata is invalid."
+msgstr "密钥槽 %d 无效。"
+
+#: lib/luks2/luks2_token.c:263
 #, fuzzy
 msgid "No free token slot."
 msgstr "交换新密钥槽失败。\n"
 
 # stat() 主要就是出来一个各种文件信息……
-#: lib/luks2/luks2_token.c:269
+#: lib/luks2/luks2_token.c:270
 #, fuzzy, c-format
 msgid "Failed to create builtin token %s."
 msgstr "获取 (stat) 密钥文件统计数据失败。\n"
 
-#: src/cryptsetup.c:164
+#: src/cryptsetup.c:198
 #, fuzzy
 msgid "Can't do passphrase verification on non-tty inputs."
 msgstr "无法从非 TTY 输入验证密码。\n"
 
-#: src/cryptsetup.c:221
+#: src/cryptsetup.c:261
 #, fuzzy
 msgid "Keyslot encryption parameters can be set only for LUKS2 device."
 msgstr "此操作只适用 LUKS2 设备。"
 
-#: src/cryptsetup.c:251 src/cryptsetup.c:959 src/cryptsetup.c:1269
-#: src/cryptsetup.c:3145 src/cryptsetup_reencrypt.c:723
-#: src/cryptsetup_reencrypt.c:793
+#: src/cryptsetup.c:291 src/cryptsetup.c:1006 src/cryptsetup.c:1389
+#: src/cryptsetup.c:3295 src/cryptsetup_reencrypt.c:741
+#: src/cryptsetup_reencrypt.c:811
 #, fuzzy
 msgid "No known cipher specification pattern detected."
 msgstr "未探测到已知的密文特征。\n"
 
-#: src/cryptsetup.c:259
+#: src/cryptsetup.c:299
 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n"
 msgstr "警告:在纯文本模式下指定密钥文件时将忽略参数 --hash。\n"
 
-#: src/cryptsetup.c:267
+#: src/cryptsetup.c:307
 msgid "WARNING: The --keyfile-size option is being ignored, the read size is the same as the encryption key size.\n"
 msgstr "警告:将忽略参数 --keyfile-size,读取大小应与加密密钥大小一致。\n"
 
-#: src/cryptsetup.c:307
+#: src/cryptsetup.c:347
 #, c-format
 msgid "Detected device signature(s) on %s. Proceeding further may damage existing data."
 msgstr ""
 
-#: src/cryptsetup.c:313 src/cryptsetup.c:1090 src/cryptsetup.c:1142
-#: src/cryptsetup.c:1246 src/cryptsetup.c:1319 src/cryptsetup.c:1974
-#: src/cryptsetup.c:2682 src/cryptsetup.c:2805 src/integritysetup.c:233
+#: src/cryptsetup.c:353 src/cryptsetup.c:1137 src/cryptsetup.c:1184
+#: src/cryptsetup.c:1246 src/cryptsetup.c:1366 src/cryptsetup.c:1439
+#: src/cryptsetup.c:2086 src/cryptsetup.c:2812 src/cryptsetup.c:2936
+#: src/integritysetup.c:242
 msgid "Operation aborted.\n"
 msgstr "操作中止。\n"
 
-#: src/cryptsetup.c:381
+#: src/cryptsetup.c:421
 msgid "Option --key-file is required."
 msgstr "需要选项 --key-file。"
 
-#: src/cryptsetup.c:434
+#: src/cryptsetup.c:474
 msgid "Enter VeraCrypt PIM: "
 msgstr "输入 VeraCrypt PIM: "
 
-#: src/cryptsetup.c:443
+#: src/cryptsetup.c:483
 msgid "Invalid PIM value: parse error."
 msgstr "无效的 PIM 值:解析错误。"
 
-#: src/cryptsetup.c:446
+#: src/cryptsetup.c:486
 msgid "Invalid PIM value: 0."
 msgstr "无效的 PIM 值:0。"
 
-#: src/cryptsetup.c:449
+#: src/cryptsetup.c:489
 msgid "Invalid PIM value: outside of range."
 msgstr "无效的 PIM 值:超出范围。"
 
-#: src/cryptsetup.c:472
+#: src/cryptsetup.c:512
 #, fuzzy
 msgid "No device header detected with this passphrase."
 msgstr "未从此密码中探测到设备标头。\n"
 
-#: src/cryptsetup.c:541
+#: src/cryptsetup.c:582
 #, fuzzy, c-format
 msgid "Device %s is not a valid BITLK device."
 msgstr "%s 不是有效的 LUKS 设备。"
 
-#: src/cryptsetup.c:576
+#: src/cryptsetup.c:617
 msgid ""
 "Header dump with volume key is sensitive information\n"
 "which allows access to encrypted partition without passphrase.\n"
 "This dump should be always stored encrypted on safe place."
 msgstr ""
 
-#: src/cryptsetup.c:673
+#: src/cryptsetup.c:714
 #, c-format
 msgid "Device %s is still active and scheduled for deferred removal.\n"
 msgstr ""
 
-#: src/cryptsetup.c:701
+#: src/cryptsetup.c:742
 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set."
 msgstr ""
 
-#: src/cryptsetup.c:838
+#: src/cryptsetup.c:885
 #, fuzzy
 msgid "Benchmark interrupted."
 msgstr "测试密文"
 
-#: src/cryptsetup.c:859
+#: src/cryptsetup.c:906
 #, c-format
 msgid "PBKDF2-%-9s     N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:861
+#: src/cryptsetup.c:908
 #, c-format
 msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n"
 msgstr ""
 
-#: src/cryptsetup.c:875
+#: src/cryptsetup.c:922
 #, c-format
 msgid "%-10s N/A\n"
 msgstr ""
 
-#: src/cryptsetup.c:877
+#: src/cryptsetup.c:924
 #, c-format
 msgid "%-10s %4u iterations, %5u memory, %1u parallel threads (CPUs) for %zu-bit key (requested %u ms time)\n"
 msgstr ""
 
-#: src/cryptsetup.c:901
+#: src/cryptsetup.c:948
 #, fuzzy
 msgid "Result of benchmark is not reliable."
 msgstr "测试结果不可靠。\n"
 
-#: src/cryptsetup.c:951
+#: src/cryptsetup.c:998
 msgid "# Tests are approximate using memory only (no storage IO).\n"
 msgstr "# 测试仅使用内存(无存储 IO)。\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:971
+#: src/cryptsetup.c:1018
 #, fuzzy, c-format
 msgid "#%*s Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  算法      | 密钥 | 加密         | 解密\n"
 
-#: src/cryptsetup.c:975
+#: src/cryptsetup.c:1022
 #, fuzzy, c-format
 msgid "Cipher %s (with %i bits key) is not available."
 msgstr "密文 %s 不可用。\n"
 
 #. TRANSLATORS: The string is header of a table and must be exactly (right side) aligned.
-#: src/cryptsetup.c:994
+#: src/cryptsetup.c:1041
 #, fuzzy
 msgid "#     Algorithm |       Key |      Encryption |      Decryption\n"
 msgstr "#  算法      | 密钥 | 加密         | 解密\n"
 
-#: src/cryptsetup.c:1003
+#: src/cryptsetup.c:1052
 msgid "N/A"
 msgstr "不可用"
 
-#: src/cryptsetup.c:1083
+#: src/cryptsetup.c:1134
 msgid ""
-"Seems device does not require reencryption recovery.\n"
-"Do you want to proceed anyway?"
+"Unprotected LUKS2 reencryption metadata detected. Please verify the reencryption operation is desirable (see luksDump output)\n"
+"and continue (upgrade metadata) only if you acknowledge the operation as genuine."
 msgstr ""
 
-#: src/cryptsetup.c:1089
+#: src/cryptsetup.c:1140
+#, fuzzy
+msgid "Enter passphrase to protect and uppgrade reencryption metadata: "
+msgstr "输入要移除的口令: "
+
+#: src/cryptsetup.c:1183
 msgid "Really proceed with LUKS2 reencryption recovery?"
 msgstr ""
 
-#: src/cryptsetup.c:1098
+#: src/cryptsetup.c:1193
+#, fuzzy
+msgid "Enter passphrase to verify reencryption metadata digest: "
+msgstr "输入要移除的口令: "
+
+#: src/cryptsetup.c:1195
 #, fuzzy
 msgid "Enter passphrase for reencryption recovery: "
 msgstr "输入密钥槽 %u 的密码:"
 
-#: src/cryptsetup.c:1141
+#: src/cryptsetup.c:1245
 msgid "Really try to repair LUKS device header?"
 msgstr "确定要尝试修复 LUKS 设备标头吗?"
 
-#: src/cryptsetup.c:1160 src/integritysetup.c:146
+#: src/cryptsetup.c:1265 src/integritysetup.c:157
 msgid ""
 "Wiping device to initialize integrity checksum.\n"
 "You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).\n"
 msgstr ""
 
-#: src/cryptsetup.c:1182 src/integritysetup.c:168
+#: src/cryptsetup.c:1287 src/integritysetup.c:179
 #, fuzzy, c-format
 msgid "Cannot deactivate temporary device %s."
 msgstr "无法打开临时 LUKS 设备。\n"
 
-#: src/cryptsetup.c:1231
+#: src/cryptsetup.c:1351
 msgid "Integrity option can be used only for LUKS2 format."
 msgstr ""
 
-#: src/cryptsetup.c:1236 src/cryptsetup.c:1296
+#: src/cryptsetup.c:1356 src/cryptsetup.c:1416
 #, fuzzy
 msgid "Unsupported LUKS2 metadata size options."
 msgstr "不支持的 LUKS 版本 %d。"
 
-#: src/cryptsetup.c:1253
+#: src/cryptsetup.c:1365
+msgid "Header file does not exist, do you want to create it?"
+msgstr ""
+
+#: src/cryptsetup.c:1373
 #, c-format
 msgid "Cannot create header file %s."
 msgstr "无法创建标头文件 %s。"
 
-#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204
-#: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293
-#: src/integritysetup.c:303
+#: src/cryptsetup.c:1396 src/integritysetup.c:205 src/integritysetup.c:213
+#: src/integritysetup.c:222 src/integritysetup.c:295 src/integritysetup.c:303
+#: src/integritysetup.c:313
 #, fuzzy
 msgid "No known integrity specification pattern detected."
 msgstr "未探测到已知的密文特征。\n"
 
-#: src/cryptsetup.c:1289
+#: src/cryptsetup.c:1409
 #, c-format
 msgid "Cannot use %s as on-disk header."
 msgstr "无法将 %s 作为磁盘上的标头使用。"
 
-#: src/cryptsetup.c:1313 src/integritysetup.c:227
+#: src/cryptsetup.c:1433 src/integritysetup.c:236
 #, c-format
 msgid "This will overwrite data on %s irrevocably."
 msgstr "这将覆盖 %s 上的数据,该动作不可取消。"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/cryptsetup.c:1354 src/cryptsetup.c:1688 src/cryptsetup.c:1755
-#: src/cryptsetup.c:1857 src/cryptsetup.c:1923 src/cryptsetup_reencrypt.c:553
+#: src/cryptsetup.c:1466 src/cryptsetup.c:1800 src/cryptsetup.c:1867
+#: src/cryptsetup.c:1969 src/cryptsetup.c:2035 src/cryptsetup_reencrypt.c:571
 msgid "Failed to set pbkdf parameters."
 msgstr "设置 pbkdf 参数失败。"
 
-#: src/cryptsetup.c:1439
+#: src/cryptsetup.c:1551
 #, fuzzy
 msgid "Reduced data offset is allowed only for detached LUKS header."
 msgstr "仅已脱离的 LUKS 数据头可以使用缩减的数据偏移。\n"
 
-#: src/cryptsetup.c:1450 src/cryptsetup.c:1761
+#: src/cryptsetup.c:1562 src/cryptsetup.c:1873
 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option."
 msgstr ""
 
-#: src/cryptsetup.c:1488
+#: src/cryptsetup.c:1600
 msgid "Device activated but cannot make flags persistent."
 msgstr ""
 
-#: src/cryptsetup.c:1569 src/cryptsetup.c:1639
+#: src/cryptsetup.c:1681 src/cryptsetup.c:1751
 #, fuzzy, c-format
 msgid "Keyslot %d is selected for deletion."
 msgstr "已选中密钥槽 %d 以删除。\n"
 
-#: src/cryptsetup.c:1581 src/cryptsetup.c:1642
+#: src/cryptsetup.c:1693 src/cryptsetup.c:1754
 msgid "This is the last keyslot. Device will become unusable after purging this key."
 msgstr "这是最后一个密钥槽。设备在清空此密钥后将不可用。"
 
-#: src/cryptsetup.c:1582
+#: src/cryptsetup.c:1694
 msgid "Enter any remaining passphrase: "
 msgstr "输入任意剩余的口令: "
 
-#: src/cryptsetup.c:1583 src/cryptsetup.c:1644
+#: src/cryptsetup.c:1695 src/cryptsetup.c:1756
 msgid "Operation aborted, the keyslot was NOT wiped.\n"
 msgstr ""
 
-#: src/cryptsetup.c:1621
+#: src/cryptsetup.c:1733
 msgid "Enter passphrase to be deleted: "
 msgstr "输入要移除的口令: "
 
-#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810
+#: src/cryptsetup.c:1814 src/cryptsetup.c:1888 src/cryptsetup.c:1922
 msgid "Enter new passphrase for key slot: "
 msgstr "输入密钥槽的新口令: "
 
-#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343
+#: src/cryptsetup.c:1905 src/cryptsetup_reencrypt.c:1361
 #, c-format
 msgid "Enter any existing passphrase: "
 msgstr "输入任意已存在的口令: "
 
-#: src/cryptsetup.c:1861
+#: src/cryptsetup.c:1973
 msgid "Enter passphrase to be changed: "
 msgstr "输入要更改的口令: "
 
-#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329
+#: src/cryptsetup.c:1989 src/cryptsetup_reencrypt.c:1347
 msgid "Enter new passphrase: "
 msgstr "输入新口令: "
 
-#: src/cryptsetup.c:1927
+#: src/cryptsetup.c:2039
 #, fuzzy
 msgid "Enter passphrase for keyslot to be converted: "
 msgstr "输入密钥槽 %u 的密码:"
 
-#: src/cryptsetup.c:1951
+#: src/cryptsetup.c:2063
 #, fuzzy
 msgid "Only one device argument for isLuks operation is supported."
 msgstr "isLuks 操作仅支持一个设备参数。\n"
 
-#: src/cryptsetup.c:2001
+#: src/cryptsetup.c:2113
 msgid ""
 "The header dump with volume key is sensitive information\n"
 "that allows access to encrypted partition without a passphrase.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2066
+#: src/cryptsetup.c:2178
 #, fuzzy, c-format
 msgid "Keyslot %d does not contain unbound key."
 msgstr "密钥槽 %d 未使用。\n"
 
-#: src/cryptsetup.c:2072
+#: src/cryptsetup.c:2184
 msgid ""
 "The header dump with unbound key is sensitive information.\n"
 "This dump should be stored encrypted in a safe place."
 msgstr ""
 
-#: src/cryptsetup.c:2207 src/cryptsetup.c:2228
+#: src/cryptsetup.c:2273 src/cryptsetup.c:2302
+#, fuzzy, c-format
+msgid "%s is not active %s device name."
+msgstr "显示已激活的设备信息"
+
+#: src/cryptsetup.c:2297
+#, c-format
+msgid "%s is not active LUKS device name or header is missing."
+msgstr ""
+
+#: src/cryptsetup.c:2335 src/cryptsetup.c:2356
 #, fuzzy
 msgid "Option --header-backup-file is required."
 msgstr "必须指定 --header-backup-file 选项。\n"
 
-#: src/cryptsetup.c:2258
+#: src/cryptsetup.c:2386
 #, c-format
 msgid "%s is not cryptsetup managed device."
 msgstr ""
 
-#: src/cryptsetup.c:2269
+#: src/cryptsetup.c:2397
 #, fuzzy, c-format
 msgid "Refresh is not supported for device type %s"
 msgstr "设备 %s 不支持恢复。"
 
-#: src/cryptsetup.c:2311
+#: src/cryptsetup.c:2439
 #, fuzzy, c-format
 msgid "Unrecognized metadata device type %s."
 msgstr "无法识别的元数据设备类型 %s。\n"
 
-#: src/cryptsetup.c:2314
+#: src/cryptsetup.c:2442
 #, fuzzy
 msgid "Command requires device and mapped name as arguments."
 msgstr "命令需要设备及映射名作为参数。\n"
 
-#: src/cryptsetup.c:2336
+#: src/cryptsetup.c:2464
 #, c-format
 msgid ""
 "This operation will erase all keyslots on device %s.\n"
@@ -2067,97 +2125,97 @@ msgstr ""
 "该操作将清空设备 %s 上所有的密钥槽。\n"
 "设备在此操作后将不可用。"
 
-#: src/cryptsetup.c:2343
+#: src/cryptsetup.c:2471
 msgid "Operation aborted, keyslots were NOT wiped.\n"
 msgstr "操作已中止,密钥槽没有被擦除。\n"
 
-#: src/cryptsetup.c:2380
+#: src/cryptsetup.c:2510
 msgid "Invalid LUKS type, only luks1 and luks2 are supported."
 msgstr ""
 
-#: src/cryptsetup.c:2398
+#: src/cryptsetup.c:2528
 #, c-format
 msgid "Device is already %s type."
 msgstr "设备已为 %s 类型。"
 
-#: src/cryptsetup.c:2403
+#: src/cryptsetup.c:2533
 #, fuzzy, c-format
 msgid "This operation will convert %s to %s format.\n"
 msgstr "不支持在 %s 加密设备上执行此操作。\n"
 
-#: src/cryptsetup.c:2409
+#: src/cryptsetup.c:2539
 msgid "Operation aborted, device was NOT converted.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2449
+#: src/cryptsetup.c:2579
 msgid "Option --priority, --label or --subsystem is missing."
 msgstr "选项 --priority、--label 或 --subsystem 缺失。"
 
-#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539
+#: src/cryptsetup.c:2613 src/cryptsetup.c:2646 src/cryptsetup.c:2669
 #, fuzzy, c-format
 msgid "Token %d is invalid."
 msgstr "密钥槽 %d 无效。\n"
 
-#: src/cryptsetup.c:2486 src/cryptsetup.c:2542
+#: src/cryptsetup.c:2616 src/cryptsetup.c:2672
 #, fuzzy, c-format
 msgid "Token %d in use."
 msgstr "密钥槽 %d 未使用。\n"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/cryptsetup.c:2493
+#: src/cryptsetup.c:2623
 #, fuzzy, c-format
 msgid "Failed to add luks2-keyring token %d."
 msgstr "获取 (stat) 密钥文件统计数据失败。\n"
 
-#: src/cryptsetup.c:2502 src/cryptsetup.c:2564
+#: src/cryptsetup.c:2632 src/cryptsetup.c:2694
 #, fuzzy, c-format
 msgid "Failed to assign token %d to keyslot %d."
 msgstr "交换新密钥槽失败。\n"
 
-#: src/cryptsetup.c:2519
+#: src/cryptsetup.c:2649
 #, fuzzy, c-format
 msgid "Token %d is not in use."
 msgstr "密钥槽 %d 未使用。\n"
 
-#: src/cryptsetup.c:2554
+#: src/cryptsetup.c:2684
 #, fuzzy
 msgid "Failed to import token from file."
 msgstr "打开 (open) 密钥文件失败。"
 
-#: src/cryptsetup.c:2579
+#: src/cryptsetup.c:2709
 #, fuzzy, c-format
 msgid "Failed to get token %d for export."
 msgstr "交换新密钥槽失败。\n"
 
-#: src/cryptsetup.c:2594
+#: src/cryptsetup.c:2724
 msgid "--key-description parameter is mandatory for token add action."
 msgstr ""
 
-#: src/cryptsetup.c:2600 src/cryptsetup.c:2608
+#: src/cryptsetup.c:2730 src/cryptsetup.c:2738
 msgid "Action requires specific token. Use --token-id parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2613
+#: src/cryptsetup.c:2743
 #, fuzzy, c-format
 msgid "Invalid token operation %s."
 msgstr "设备 %s 无效。\n"
 
-#: src/cryptsetup.c:2668
+#: src/cryptsetup.c:2798
 #, c-format
 msgid "Auto-detected active dm device '%s' for data device %s.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2672
+#: src/cryptsetup.c:2802
 #, fuzzy, c-format
 msgid "Device %s is not a block device.\n"
 msgstr "%s 不是有效的 LUKS 设备。"
 
-#: src/cryptsetup.c:2674
+#: src/cryptsetup.c:2804
 #, fuzzy, c-format
 msgid "Failed to auto-detect device %s holders."
 msgstr "无法获取设备 %s 上的写入锁。"
 
-#: src/cryptsetup.c:2676
+#: src/cryptsetup.c:2806
 #, c-format
 msgid ""
 "Unable to decide if device %s is activated or not.\n"
@@ -2166,243 +2224,252 @@ msgid ""
 "To run reencryption in online mode, use --active-name parameter instead.\n"
 msgstr ""
 
-#: src/cryptsetup.c:2756
+#: src/cryptsetup.c:2886
 #, fuzzy
 msgid "Invalid LUKS device type."
 msgstr "设备 %s 无效。"
 
-#: src/cryptsetup.c:2761
+#: src/cryptsetup.c:2891
 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)."
 msgstr ""
 
-#: src/cryptsetup.c:2766
+#: src/cryptsetup.c:2896
 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter."
 msgstr ""
 
-#: src/cryptsetup.c:2775
+#: src/cryptsetup.c:2905
 #, c-format
 msgid "Adjusting --reduce-device-size value to twice the --offset %<PRIu64> (sectors).\n"
 msgstr ""
 
-#: src/cryptsetup.c:2779
+#: src/cryptsetup.c:2909
 #, fuzzy
 msgid "Encryption is supported only for LUKS2 format."
 msgstr "此操作只适用 LUKS2 设备。"
 
-#: src/cryptsetup.c:2801
+#: src/cryptsetup.c:2932
 #, c-format
 msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?"
 msgstr ""
 
-#: src/cryptsetup.c:2816
+#: src/cryptsetup.c:2950
 #, fuzzy, c-format
 msgid "Temporary header file %s already exists. Aborting."
 msgstr "请求的标头备份文件 %s 已存在。"
 
-#: src/cryptsetup.c:2818 src/cryptsetup.c:2825
+#: src/cryptsetup.c:2952 src/cryptsetup.c:2959
 #, fuzzy, c-format
 msgid "Cannot create temporary header file %s."
 msgstr "无法创建标头文件 %s。"
 
-#: src/cryptsetup.c:2889
+#: src/cryptsetup.c:3026
 #, c-format
 msgid "%s/%s is now active and ready for online encryption.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3053 src/cryptsetup.c:3059
+#: src/cryptsetup.c:3063
+msgid "LUKS2 decryption is supported with detached header device only."
+msgstr ""
+
+#: src/cryptsetup.c:3196 src/cryptsetup.c:3202
 #, fuzzy
 msgid "Not enough free keyslots for reencryption."
 msgstr "不要更改密钥,无数据区重加密"
 
-#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294
+#: src/cryptsetup.c:3222 src/cryptsetup_reencrypt.c:1312
 msgid "Key file can be used only with --key-slot or with exactly one key slot active."
 msgstr "密钥文件只能在指定 --key-slot 时或有且只有一个槽启用时使用。"
 
-#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341
-#: src/cryptsetup_reencrypt.c:1352
+#: src/cryptsetup.c:3231 src/cryptsetup_reencrypt.c:1359
+#: src/cryptsetup_reencrypt.c:1370
 #, fuzzy, c-format
 msgid "Enter passphrase for key slot %d: "
 msgstr "输入密钥槽 %u 的口令: "
 
-#: src/cryptsetup.c:3096
+#: src/cryptsetup.c:3240
 #, c-format
 msgid "Enter passphrase for key slot %u: "
 msgstr "输入密钥槽 %u 的口令: "
 
-#: src/cryptsetup.c:3263
+#: src/cryptsetup.c:3286
+#, c-format
+msgid "Switching data encryption cipher to %s.\n"
+msgstr ""
+
+#: src/cryptsetup.c:3419
 #, fuzzy
 msgid "Command requires device as argument."
 msgstr "命令需要设备及映射名作为参数。\n"
 
-#: src/cryptsetup.c:3285
+#: src/cryptsetup.c:3441
 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1."
 msgstr ""
 
-#: src/cryptsetup.c:3297
+#: src/cryptsetup.c:3453
 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility."
 msgstr ""
 
-#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178
+#: src/cryptsetup.c:3463 src/cryptsetup_reencrypt.c:196
 msgid "Reencryption of device with integrity profile is not supported."
 msgstr "不支持带有完整性 profile 信息的设备的重加密。"
 
-#: src/cryptsetup.c:3315
+#: src/cryptsetup.c:3471
 msgid "LUKS2 reencryption already initialized. Aborting operation."
 msgstr ""
 
-#: src/cryptsetup.c:3319
+#: src/cryptsetup.c:3475
 #, fuzzy
 msgid "LUKS2 device is not in reencryption."
 msgstr "日志文件 %s 存在,继续重加密。\n"
 
-#: src/cryptsetup.c:3346
+#: src/cryptsetup.c:3502
 msgid "<device> [--type <type>] [<name>]"
 msgstr "<设备> [--type <类型>] [<名称>]"
 
-#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480
+#: src/cryptsetup.c:3502 src/veritysetup.c:408 src/integritysetup.c:493
 msgid "open device as <name>"
 msgstr "以 <名称> 打开设备"
 
-#: src/cryptsetup.c:3347 src/cryptsetup.c:3348 src/cryptsetup.c:3349
-#: src/veritysetup.c:395 src/veritysetup.c:396 src/integritysetup.c:481
-#: src/integritysetup.c:482
+#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/cryptsetup.c:3505
+#: src/veritysetup.c:409 src/veritysetup.c:410 src/integritysetup.c:494
+#: src/integritysetup.c:495
 msgid "<name>"
 msgstr "<名称>"
 
-#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481
+#: src/cryptsetup.c:3503 src/veritysetup.c:409 src/integritysetup.c:494
 msgid "close device (remove mapping)"
 msgstr "关闭设备(移除映射)"
 
-#: src/cryptsetup.c:3348
+#: src/cryptsetup.c:3504
 msgid "resize active device"
 msgstr "改变活动设备大小。"
 
-#: src/cryptsetup.c:3349
+#: src/cryptsetup.c:3505
 msgid "show device status"
 msgstr "显示设备状态"
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "[--cipher <cipher>]"
 msgstr ""
 
-#: src/cryptsetup.c:3350
+#: src/cryptsetup.c:3506
 msgid "benchmark cipher"
 msgstr "测试密文"
 
-#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 src/cryptsetup.c:3353
-#: src/cryptsetup.c:3354 src/cryptsetup.c:3355 src/cryptsetup.c:3362
-#: src/cryptsetup.c:3363 src/cryptsetup.c:3364 src/cryptsetup.c:3365
-#: src/cryptsetup.c:3366 src/cryptsetup.c:3367 src/cryptsetup.c:3368
-#: src/cryptsetup.c:3369 src/cryptsetup.c:3370
+#: src/cryptsetup.c:3507 src/cryptsetup.c:3508 src/cryptsetup.c:3509
+#: src/cryptsetup.c:3510 src/cryptsetup.c:3511 src/cryptsetup.c:3518
+#: src/cryptsetup.c:3519 src/cryptsetup.c:3520 src/cryptsetup.c:3521
+#: src/cryptsetup.c:3522 src/cryptsetup.c:3523 src/cryptsetup.c:3524
+#: src/cryptsetup.c:3525 src/cryptsetup.c:3526
 msgid "<device>"
 msgstr "<设备>"
 
-#: src/cryptsetup.c:3351
+#: src/cryptsetup.c:3507
 msgid "try to repair on-disk metadata"
 msgstr "尝试修复磁盘上的元数据"
 
-#: src/cryptsetup.c:3352
+#: src/cryptsetup.c:3508
 #, fuzzy
 msgid "reencrypt LUKS2 device"
 msgstr "向 LUKS 设备添加密钥"
 
-#: src/cryptsetup.c:3353
+#: src/cryptsetup.c:3509
 msgid "erase all keyslots (remove encryption key)"
 msgstr "清空所有密钥槽(移除加密密钥)"
 
-#: src/cryptsetup.c:3354
+#: src/cryptsetup.c:3510
 msgid "convert LUKS from/to LUKS2 format"
 msgstr "在 LUKS 和 LUKS2 格式之间转换"
 
-#: src/cryptsetup.c:3355
+#: src/cryptsetup.c:3511
 msgid "set permanent configuration options for LUKS2"
 msgstr ""
 
-#: src/cryptsetup.c:3356 src/cryptsetup.c:3357
+#: src/cryptsetup.c:3512 src/cryptsetup.c:3513
 msgid "<device> [<new key file>]"
 msgstr "<设备> [<新密钥文件>]"
 
-#: src/cryptsetup.c:3356
+#: src/cryptsetup.c:3512
 msgid "formats a LUKS device"
 msgstr "格式化一个 LUKS 设备"
 
-#: src/cryptsetup.c:3357
+#: src/cryptsetup.c:3513
 msgid "add key to LUKS device"
 msgstr "向 LUKS 设备添加密钥"
 
-#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360
+#: src/cryptsetup.c:3514 src/cryptsetup.c:3515 src/cryptsetup.c:3516
 msgid "<device> [<key file>]"
 msgstr "<设备> [<密钥文件>]"
 
-#: src/cryptsetup.c:3358
+#: src/cryptsetup.c:3514
 msgid "removes supplied key or key file from LUKS device"
 msgstr "移除 LUKS 设备中指定的密钥或密钥文件"
 
-#: src/cryptsetup.c:3359
+#: src/cryptsetup.c:3515
 msgid "changes supplied key or key file of LUKS device"
 msgstr "更改 LUKS 设备中指定的密钥或密钥文件"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/cryptsetup.c:3360
+#: src/cryptsetup.c:3516
 #, fuzzy
 msgid "converts a key to new pbkdf parameters"
 msgstr "获取 (stat) 密钥文件统计数据失败。\n"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "<device> <key slot>"
 msgstr "<设备> <密钥槽>"
 
-#: src/cryptsetup.c:3361
+#: src/cryptsetup.c:3517
 msgid "wipes key with number <key slot> from LUKS device"
 msgstr "从 LUKS 设备清理标号为 <key slot> 的密钥"
 
-#: src/cryptsetup.c:3362
+#: src/cryptsetup.c:3518
 msgid "print UUID of LUKS device"
 msgstr "输出 LUKS 设备的 UUID(唯一标识符)"
 
-#: src/cryptsetup.c:3363
+#: src/cryptsetup.c:3519
 msgid "tests <device> for LUKS partition header"
 msgstr "从 <device> 探测 LUKS 分区标头"
 
-#: src/cryptsetup.c:3364
+#: src/cryptsetup.c:3520
 msgid "dump LUKS partition information"
 msgstr "调出 LUKS 分区信息"
 
-#: src/cryptsetup.c:3365
+#: src/cryptsetup.c:3521
 msgid "dump TCRYPT device information"
 msgstr "调出 TCRYPT 设备信息"
 
-#: src/cryptsetup.c:3366
+#: src/cryptsetup.c:3522
 #, fuzzy
 msgid "dump BITLK device information"
 msgstr "调出 TCRYPT 设备信息"
 
-#: src/cryptsetup.c:3367
+#: src/cryptsetup.c:3523
 #, fuzzy
 msgid "Suspend LUKS device and wipe key (all IOs are frozen)"
 msgstr "挂起 LUKS 设备并清除密钥(冻结所有 IO 操作)。"
 
-#: src/cryptsetup.c:3368
+#: src/cryptsetup.c:3524
 msgid "Resume suspended LUKS device"
 msgstr "恢复已挂起的 LUKS 设备"
 
-#: src/cryptsetup.c:3369
+#: src/cryptsetup.c:3525
 msgid "Backup LUKS device header and keyslots"
 msgstr "备份 LUKS 设备标头和密钥槽"
 
-#: src/cryptsetup.c:3370
+#: src/cryptsetup.c:3526
 msgid "Restore LUKS device header and keyslots"
 msgstr "恢复 LUKS 设备标头和密钥槽"
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "<add|remove|import|export> <device>"
 msgstr ""
 
-#: src/cryptsetup.c:3371
+#: src/cryptsetup.c:3527
 msgid "Manipulate LUKS2 tokens"
 msgstr ""
 
-#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498
+#: src/cryptsetup.c:3545 src/veritysetup.c:426 src/integritysetup.c:511
 msgid ""
 "\n"
 "<action> is one of:\n"
@@ -2410,7 +2477,7 @@ msgstr ""
 "\n"
 "<动作> 为其中之一:\n"
 
-#: src/cryptsetup.c:3395
+#: src/cryptsetup.c:3551
 #, fuzzy
 msgid ""
 "\n"
@@ -2423,7 +2490,7 @@ msgstr ""
 "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen\n"
 "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose\n"
 
-#: src/cryptsetup.c:3399
+#: src/cryptsetup.c:3555
 #, c-format
 msgid ""
 "\n"
@@ -2438,14 +2505,14 @@ msgstr ""
 "<key slot> 为需要更改的 LUKS 密钥槽\n"
 "<key file> 提供给 luksAddKey 动作的密钥文件\n"
 
-#: src/cryptsetup.c:3406
+#: src/cryptsetup.c:3562
 #, c-format
 msgid ""
 "\n"
 "Default compiled-in metadata format is %s (for luksFormat action).\n"
 msgstr ""
 
-#: src/cryptsetup.c:3411
+#: src/cryptsetup.c:3567
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2460,7 +2527,7 @@ msgstr ""
 "\t密钥文件的最大大小:%dkB, 交互式密码的最大长度:%d (字符)\n"
 "LUKS 的默认 PBKDF2 迭代时间:%d (毫秒)\n"
 
-#: src/cryptsetup.c:3422
+#: src/cryptsetup.c:3578
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -2475,477 +2542,485 @@ msgstr ""
 "\tplain:%s, 密钥:%d 位, 密码哈希:%s\n"
 "\tLUKS1:%s, 密钥:%d bits, LUKS 数据头哈希:%s, RNG:%s\n"
 
-#: src/cryptsetup.c:3431
+#: src/cryptsetup.c:3587
 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"
 msgstr ""
 
-#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642
+#: src/cryptsetup.c:3605 src/veritysetup.c:587 src/integritysetup.c:665
 #, c-format
 msgid "%s: requires %s as arguments"
 msgstr "%s: 需要 %s 作为参数"
 
-#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536
-#: src/cryptsetup_reencrypt.c:1607
+#: src/cryptsetup.c:3637 src/veritysetup.c:472 src/integritysetup.c:553
+#: src/cryptsetup_reencrypt.c:1627
 msgid "Show this help message"
 msgstr "显示此帮助"
 
-#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537
-#: src/cryptsetup_reencrypt.c:1608
+#: src/cryptsetup.c:3638 src/veritysetup.c:473 src/integritysetup.c:554
+#: src/cryptsetup_reencrypt.c:1628
 msgid "Display brief usage"
 msgstr "显示简短用法"
 
-#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538
-#: src/cryptsetup_reencrypt.c:1609
+#: src/cryptsetup.c:3639 src/veritysetup.c:474 src/integritysetup.c:555
+#: src/cryptsetup_reencrypt.c:1629
 msgid "Print package version"
 msgstr "打印软件包版本"
 
-#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542
-#: src/cryptsetup_reencrypt.c:1613
+#: src/cryptsetup.c:3643 src/veritysetup.c:478 src/integritysetup.c:559
+#: src/cryptsetup_reencrypt.c:1633
 msgid "Help options:"
 msgstr "帮助选项:"
 
-#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543
-#: src/cryptsetup_reencrypt.c:1614
+#: src/cryptsetup.c:3644 src/veritysetup.c:479 src/integritysetup.c:560
+#: src/cryptsetup_reencrypt.c:1634
 msgid "Shows more detailed error messages"
 msgstr "显示更详细的错误信息"
 
-#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544
-#: src/cryptsetup_reencrypt.c:1615
+#: src/cryptsetup.c:3645 src/veritysetup.c:480 src/integritysetup.c:561
+#: src/cryptsetup_reencrypt.c:1635
 msgid "Show debug messages"
 msgstr "显示调试信息"
 
-#: src/cryptsetup.c:3489
+#: src/cryptsetup.c:3646
 #, fuzzy
 msgid "Show debug messages including JSON metadata"
 msgstr "显示调试信息"
 
-#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617
+#: src/cryptsetup.c:3647 src/cryptsetup_reencrypt.c:1637
 msgid "The cipher used to encrypt the disk (see /proc/crypto)"
 msgstr "用于加密磁盘的密文(参见 /proc/crypto)"
 
-#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619
+#: src/cryptsetup.c:3648 src/cryptsetup_reencrypt.c:1639
 msgid "The hash used to create the encryption key from the passphrase"
 msgstr "用于从密码创建加密密钥的哈希值"
 
-#: src/cryptsetup.c:3492
+#: src/cryptsetup.c:3649
 msgid "Verifies the passphrase by asking for it twice"
 msgstr "两次询问密码以进行验证"
 
-#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621
+#: src/cryptsetup.c:3650 src/cryptsetup_reencrypt.c:1641
 msgid "Read the key from a file"
 msgstr "从文件读取密钥"
 
-#: src/cryptsetup.c:3494
+#: src/cryptsetup.c:3651
 msgid "Read the volume (master) key from file."
 msgstr "从文件读取卷(主)密钥。"
 
-#: src/cryptsetup.c:3495
+#: src/cryptsetup.c:3652
 #, fuzzy
 msgid "Dump volume (master) key instead of keyslots info"
 msgstr "转储卷(主)密钥而不是键槽信息。"
 
-#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup_reencrypt.c:1638
 msgid "The size of the encryption key"
 msgstr "加密密钥大小"
 
-#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562
-#: src/integritysetup.c:566 src/integritysetup.c:570
-#: src/cryptsetup_reencrypt.c:1618
+#: src/cryptsetup.c:3653 src/cryptsetup.c:3716 src/integritysetup.c:579
+#: src/integritysetup.c:583 src/integritysetup.c:587
+#: src/cryptsetup_reencrypt.c:1638
 msgid "BITS"
 msgstr "位"
 
-#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634
+#: src/cryptsetup.c:3654 src/cryptsetup_reencrypt.c:1654
 msgid "Limits the read from keyfile"
 msgstr "限制从密钥文件读取"
 
-#: src/cryptsetup.c:3497 src/cryptsetup.c:3498 src/cryptsetup.c:3499
-#: src/cryptsetup.c:3500 src/cryptsetup.c:3503 src/cryptsetup.c:3554
-#: src/cryptsetup.c:3555 src/cryptsetup.c:3563 src/cryptsetup.c:3564
-#: src/veritysetup.c:468 src/veritysetup.c:469 src/veritysetup.c:470
-#: src/veritysetup.c:473 src/veritysetup.c:474 src/integritysetup.c:551
-#: src/integritysetup.c:557 src/integritysetup.c:558
-#: src/cryptsetup_reencrypt.c:1633 src/cryptsetup_reencrypt.c:1634
-#: src/cryptsetup_reencrypt.c:1635 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3654 src/cryptsetup.c:3655 src/cryptsetup.c:3656
+#: src/cryptsetup.c:3657 src/cryptsetup.c:3660 src/cryptsetup.c:3713
+#: src/cryptsetup.c:3714 src/cryptsetup.c:3722 src/cryptsetup.c:3723
+#: src/veritysetup.c:483 src/veritysetup.c:484 src/veritysetup.c:485
+#: src/veritysetup.c:488 src/veritysetup.c:489 src/integritysetup.c:568
+#: src/integritysetup.c:574 src/integritysetup.c:575
+#: src/cryptsetup_reencrypt.c:1653 src/cryptsetup_reencrypt.c:1654
+#: src/cryptsetup_reencrypt.c:1655 src/cryptsetup_reencrypt.c:1656
 msgid "bytes"
 msgstr "字节"
 
-#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633
+#: src/cryptsetup.c:3655 src/cryptsetup_reencrypt.c:1653
 msgid "Number of bytes to skip in keyfile"
 msgstr "要从密钥文件跳过的字节数"
 
-#: src/cryptsetup.c:3499
+#: src/cryptsetup.c:3656
 msgid "Limits the read from newly added keyfile"
 msgstr "限制从新增密钥文件的读取"
 
-#: src/cryptsetup.c:3500
+#: src/cryptsetup.c:3657
 msgid "Number of bytes to skip in newly added keyfile"
 msgstr "要从新增密钥文件跳过的字节数"
 
-#: src/cryptsetup.c:3501
+#: src/cryptsetup.c:3658
 msgid "Slot number for new key (default is first free)"
 msgstr "新密钥的槽号(默认为第一个可用的)"
 
-#: src/cryptsetup.c:3502
+#: src/cryptsetup.c:3659
 msgid "The size of the device"
 msgstr "设备大小"
 
-#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505
-#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559
+#: src/cryptsetup.c:3659 src/cryptsetup.c:3661 src/cryptsetup.c:3662
+#: src/cryptsetup.c:3668 src/integritysetup.c:569 src/integritysetup.c:576
 msgid "SECTORS"
 msgstr "扇区"
 
-#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636
+#: src/cryptsetup.c:3660 src/cryptsetup_reencrypt.c:1656
 msgid "Use only specified device size (ignore rest of device). DANGEROUS!"
 msgstr "只使用指定的设备大小(忽略设备其余部分)。危险!"
 
-#: src/cryptsetup.c:3504
+#: src/cryptsetup.c:3661
 msgid "The start offset in the backend device"
 msgstr "后端设备的起始偏移量"
 
-#: src/cryptsetup.c:3505
+#: src/cryptsetup.c:3662
 msgid "How many sectors of the encrypted data to skip at the beginning"
 msgstr "从开头要跳过的加密数据扇区数量"
 
-#: src/cryptsetup.c:3506
+#: src/cryptsetup.c:3663
 msgid "Create a readonly mapping"
 msgstr "创建只读映射"
 
-#: src/cryptsetup.c:3507 src/integritysetup.c:545
-#: src/cryptsetup_reencrypt.c:1624
+#: src/cryptsetup.c:3664 src/integritysetup.c:562
+#: src/cryptsetup_reencrypt.c:1644
 msgid "Do not ask for confirmation"
 msgstr "不要请求确认"
 
-#: src/cryptsetup.c:3508
+#: src/cryptsetup.c:3665
 msgid "Timeout for interactive passphrase prompt (in seconds)"
 msgstr "交互式密码提示符超时长度(秒)"
 
-#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3665 src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "secs"
 msgstr "秒"
 
-#: src/cryptsetup.c:3509 src/integritysetup.c:546
-#: src/cryptsetup_reencrypt.c:1625
+#: src/cryptsetup.c:3666 src/integritysetup.c:563
+#: src/cryptsetup_reencrypt.c:1645
 msgid "Progress line update (in seconds)"
 msgstr ""
 
-#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626
+#: src/cryptsetup.c:3667 src/cryptsetup_reencrypt.c:1646
 msgid "How often the input of the passphrase can be retried"
 msgstr "输入密码的最大重试频率"
 
-#: src/cryptsetup.c:3511
+#: src/cryptsetup.c:3668
 msgid "Align payload at <n> sector boundaries - for luksFormat"
 msgstr "于 <n> 个扇区边界处对其载荷数据 - 供 luks 格式用"
 
-#: src/cryptsetup.c:3512
+#: src/cryptsetup.c:3669
 #, fuzzy
 msgid "File with LUKS header and keyslots backup"
 msgstr "带有 LUKS 数据头和密钥槽备份的文件。"
 
-#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627
+#: src/cryptsetup.c:3670 src/cryptsetup_reencrypt.c:1647
 msgid "Use /dev/random for generating volume key"
 msgstr "使用 /dev/random 生成卷密钥"
 
-#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628
+#: src/cryptsetup.c:3671 src/cryptsetup_reencrypt.c:1648
 msgid "Use /dev/urandom for generating volume key"
 msgstr "使用 /dev/urandom 生成卷密钥"
 
-#: src/cryptsetup.c:3515
+#: src/cryptsetup.c:3672
 #, fuzzy
 msgid "Share device with another non-overlapping crypt segment"
 msgstr "与另一个不重合的加密段共享设备。"
 
-#: src/cryptsetup.c:3516 src/veritysetup.c:477
+#: src/cryptsetup.c:3673 src/veritysetup.c:492
 #, fuzzy
 msgid "UUID for device to use"
 msgstr "设备使用的 UUID 已占用。"
 
-#: src/cryptsetup.c:3517 src/integritysetup.c:579
+#: src/cryptsetup.c:3674 src/integritysetup.c:599
 #, fuzzy
 msgid "Allow discards (aka TRIM) requests for device"
 msgstr "允许设备的 discard(或称 TRIM)请求。"
 
-#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645
+#: src/cryptsetup.c:3675 src/cryptsetup_reencrypt.c:1665
 #, fuzzy
 msgid "Device or file with separated LUKS header"
 msgstr "带有分离 LUKS 数据头的设备或文件。"
 
-#: src/cryptsetup.c:3519
+#: src/cryptsetup.c:3676
 #, fuzzy
 msgid "Do not activate device, just check passphrase"
 msgstr "不要激活设备,仅检查密码。"
 
-#: src/cryptsetup.c:3520
+#: src/cryptsetup.c:3677
 #, fuzzy
 msgid "Use hidden header (hidden TCRYPT device)"
 msgstr "使用隐藏数据头(隐藏 TCRYPT 设备)"
 
-#: src/cryptsetup.c:3521
+#: src/cryptsetup.c:3678
 #, fuzzy
 msgid "Device is system TCRYPT drive (with bootloader)"
 msgstr "设备为系统 TCRYPT 驱动器(带有引导器)。"
 
-#: src/cryptsetup.c:3522
+#: src/cryptsetup.c:3679
 msgid "Use backup (secondary) TCRYPT header"
 msgstr "使用备份(次级)TCRYPT 标头"
 
-#: src/cryptsetup.c:3523
+#: src/cryptsetup.c:3680
 #, fuzzy
 msgid "Scan also for VeraCrypt compatible device"
 msgstr "同时扫描 VeraCrypt 兼容的设备。"
 
-#: src/cryptsetup.c:3524
+#: src/cryptsetup.c:3681
 #, fuzzy
 msgid "Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "同时扫描 VeraCrypt 兼容的设备。"
 
-#: src/cryptsetup.c:3525
+#: src/cryptsetup.c:3682
 #, fuzzy
 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device"
 msgstr "同时扫描 VeraCrypt 兼容的设备。"
 
-#: src/cryptsetup.c:3526
+#: src/cryptsetup.c:3683
 #, fuzzy
 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk"
 msgstr "设备元数据类型:luks, 纯粹 (plain), loopaes, tcrypt."
 
-#: src/cryptsetup.c:3527
+#: src/cryptsetup.c:3684
 #, fuzzy
 msgid "Disable password quality check (if enabled)"
 msgstr "禁用密码质量检查 (如果已启用)。"
 
-#: src/cryptsetup.c:3528
+#: src/cryptsetup.c:3685
 #, fuzzy
 msgid "Use dm-crypt same_cpu_crypt performance compatibility option"
 msgstr "使用 dm-crypt same_cpu_crypt 性能兼容性选项。"
 
-#: src/cryptsetup.c:3529
+#: src/cryptsetup.c:3686
 #, fuzzy
 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option"
 msgstr "使用 dm-crypt submit_from_crypt_cpus 性能兼容性选项。"
 
-#: src/cryptsetup.c:3530
+#: src/cryptsetup.c:3687
+msgid "Bypass dm-crypt workqueue and process read requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3688
+msgid "Bypass dm-crypt workqueue and process write requests synchronously"
+msgstr ""
+
+#: src/cryptsetup.c:3689
 msgid "Device removal is deferred until the last user closes it"
 msgstr ""
 
-#: src/cryptsetup.c:3531
+#: src/cryptsetup.c:3690
 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)"
 msgstr ""
 
-#: src/cryptsetup.c:3532
+#: src/cryptsetup.c:3691
 msgid "PBKDF iteration time for LUKS (in ms)"
 msgstr "LUKS 默认 PBKDF 迭代时间(毫秒)"
 
-#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup.c:3691 src/cryptsetup_reencrypt.c:1643
 msgid "msecs"
 msgstr "毫秒"
 
-#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641
+#: src/cryptsetup.c:3692 src/cryptsetup_reencrypt.c:1661
 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2"
 msgstr ""
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "PBKDF memory cost limit"
 msgstr "PBKDF 内存开销限制"
 
-#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642
+#: src/cryptsetup.c:3693 src/cryptsetup_reencrypt.c:1662
 msgid "kilobytes"
 msgstr "千字节"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "PBKDF parallel cost"
 msgstr "PBKDF 并行开销"
 
-#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643
+#: src/cryptsetup.c:3694 src/cryptsetup_reencrypt.c:1663
 msgid "threads"
 msgstr "线程"
 
-#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644
+#: src/cryptsetup.c:3695 src/cryptsetup_reencrypt.c:1664
 msgid "PBKDF iterations cost (forced, disables benchmark)"
 msgstr ""
 
-#: src/cryptsetup.c:3537
+#: src/cryptsetup.c:3696
 msgid "Keyslot priority: ignore, normal, prefer"
 msgstr ""
 
-#: src/cryptsetup.c:3538
+#: src/cryptsetup.c:3697
 #, fuzzy
 msgid "Disable locking of on-disk metadata"
 msgstr "尝试修复磁盘上的元数据"
 
-#: src/cryptsetup.c:3539
+#: src/cryptsetup.c:3698
 msgid "Disable loading volume keys via kernel keyring"
 msgstr ""
 
-#: src/cryptsetup.c:3540
+#: src/cryptsetup.c:3699
 msgid "Data integrity algorithm (LUKS2 only)"
 msgstr ""
 
-#: src/cryptsetup.c:3541 src/integritysetup.c:573
+#: src/cryptsetup.c:3700 src/integritysetup.c:590
 #, fuzzy
 msgid "Disable journal for integrity device"
 msgstr "为 VERITY 设备提供的大小指标无效。\n"
 
-#: src/cryptsetup.c:3542 src/integritysetup.c:547
+#: src/cryptsetup.c:3701 src/integritysetup.c:564
 msgid "Do not wipe device after format"
 msgstr ""
 
-#: src/cryptsetup.c:3543 src/integritysetup.c:577
+#: src/cryptsetup.c:3702 src/integritysetup.c:594
 msgid "Use inefficient legacy padding (old kernels)"
 msgstr ""
 
-#: src/cryptsetup.c:3544
+#: src/cryptsetup.c:3703
 msgid "Do not ask for passphrase if activation by token fails"
 msgstr ""
 
-#: src/cryptsetup.c:3545
+#: src/cryptsetup.c:3704
 msgid "Token number (default: any)"
 msgstr ""
 
-#: src/cryptsetup.c:3546
+#: src/cryptsetup.c:3705
 msgid "Key description"
 msgstr ""
 
-#: src/cryptsetup.c:3547
+#: src/cryptsetup.c:3706
 msgid "Encryption sector size (default: 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3548
+#: src/cryptsetup.c:3707
 msgid "Use IV counted in sector size (not in 512 bytes)"
 msgstr ""
 
-#: src/cryptsetup.c:3549
+#: src/cryptsetup.c:3708
 msgid "Set activation flags persistent for device"
 msgstr ""
 
-#: src/cryptsetup.c:3550
+#: src/cryptsetup.c:3709
 #, fuzzy
 msgid "Set label for the LUKS2 device"
 msgstr "格式化一个 LUKS 设备"
 
-#: src/cryptsetup.c:3551
+#: src/cryptsetup.c:3710
 #, fuzzy
 msgid "Set subsystem label for the LUKS2 device"
 msgstr "格式化一个 LUKS 设备"
 
-#: src/cryptsetup.c:3552
+#: src/cryptsetup.c:3711
 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot"
 msgstr ""
 
-#: src/cryptsetup.c:3553
+#: src/cryptsetup.c:3712
 #, fuzzy
 msgid "Read or write the json from or to a file"
 msgstr "从文件读取密钥"
 
-#: src/cryptsetup.c:3554
+#: src/cryptsetup.c:3713
 msgid "LUKS2 header metadata area size"
 msgstr ""
 
-#: src/cryptsetup.c:3555
+#: src/cryptsetup.c:3714
 #, fuzzy
 msgid "LUKS2 header keyslots area size"
 msgstr "带有 LUKS 数据头和密钥槽备份的文件。"
 
-#: src/cryptsetup.c:3556
+#: src/cryptsetup.c:3715
 msgid "Refresh (reactivate) device with new parameters"
 msgstr ""
 
-#: src/cryptsetup.c:3557
+#: src/cryptsetup.c:3716
 #, fuzzy
 msgid "LUKS2 keyslot: The size of the encryption key"
 msgstr "加密密钥大小"
 
-#: src/cryptsetup.c:3558
+#: src/cryptsetup.c:3717
 msgid "LUKS2 keyslot: The cipher used for keyslot encryption"
 msgstr ""
 
-#: src/cryptsetup.c:3559
+#: src/cryptsetup.c:3718
 #, fuzzy
 msgid "Encrypt LUKS2 device (in-place encryption)."
 msgstr "永久解密设备(移除加密)"
 
-#: src/cryptsetup.c:3560
+#: src/cryptsetup.c:3719
 #, fuzzy
 msgid "Decrypt LUKS2 device (remove encryption)."
 msgstr "永久解密设备(移除加密)"
 
-#: src/cryptsetup.c:3561
+#: src/cryptsetup.c:3720
 msgid "Initialize LUKS2 reencryption in metadata only."
 msgstr ""
 
-#: src/cryptsetup.c:3562
+#: src/cryptsetup.c:3721
 msgid "Resume initialized LUKS2 reencryption only."
 msgstr ""
 
-#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635
+#: src/cryptsetup.c:3722 src/cryptsetup_reencrypt.c:1655
 msgid "Reduce data device size (move data offset). DANGEROUS!"
 msgstr "减少数据设备大小(移动数据偏移量)。危险!"
 
-#: src/cryptsetup.c:3564
+#: src/cryptsetup.c:3723
 #, fuzzy
 msgid "Maximal reencryption hotzone size."
 msgstr "重加密块大小"
 
-#: src/cryptsetup.c:3565
+#: src/cryptsetup.c:3724
 msgid "Reencryption hotzone resilience type (checksum,journal,none)"
 msgstr ""
 
-#: src/cryptsetup.c:3566
+#: src/cryptsetup.c:3725
 #, fuzzy
 msgid "Reencryption hotzone checksums hash"
 msgstr "重加密块大小"
 
-#: src/cryptsetup.c:3567
+#: src/cryptsetup.c:3726
 msgid "Override device autodetection of dm device to be reencrypted"
 msgstr ""
 
-#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595
+#: src/cryptsetup.c:3742 src/veritysetup.c:515 src/integritysetup.c:615
 msgid "[OPTION...] <action> <action-specific>"
 msgstr "[选项…] <动作> <动作特定参数>"
 
-#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606
+#: src/cryptsetup.c:3797 src/veritysetup.c:551 src/integritysetup.c:626
 msgid "Argument <action> missing."
 msgstr "缺失参数 <动作>。"
 
-#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637
+#: src/cryptsetup.c:3867 src/veritysetup.c:582 src/integritysetup.c:660
 msgid "Unknown action."
 msgstr "未知动作。"
 
-#: src/cryptsetup.c:3713
+#: src/cryptsetup.c:3877
 msgid "Options --refresh and --test-passphrase are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3718
+#: src/cryptsetup.c:3882
 #, fuzzy
 msgid "Option --deferred is allowed only for close command."
 msgstr "选项 --shared 只适用于打开纯设备。\n"
 
-#: src/cryptsetup.c:3723
+#: src/cryptsetup.c:3887
 #, fuzzy
 msgid "Option --shared is allowed only for open of plain device."
 msgstr "选项 --shared 只适用于打开纯设备。\n"
 
-#: src/cryptsetup.c:3728 src/integritysetup.c:654
+#: src/cryptsetup.c:3892 src/integritysetup.c:677
 #, fuzzy
 msgid "Option --allow-discards is allowed only for open operation."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/cryptsetup.c:3733
+#: src/cryptsetup.c:3897
 #, fuzzy
 msgid "Option --persistent is allowed only for open operation."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/cryptsetup.c:3738
+#: src/cryptsetup.c:3902
 #, fuzzy
 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/cryptsetup.c:3743
+#: src/cryptsetup.c:3907
 #, fuzzy
 msgid "Option --persistent is not allowed with --test-passphrase."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/cryptsetup.c:3753
+#: src/cryptsetup.c:3917
 #, fuzzy
 msgid ""
 "Option --key-size is allowed only for luksFormat, luksAddKey,\n"
@@ -2954,287 +3029,287 @@ msgstr ""
 "选项 --key-size 只能用于 luksFormat, 打开和性能测试。\n"
 "要限制密钥文件读取请使用 --keyfile-size=(字节数)。"
 
-#: src/cryptsetup.c:3759
+#: src/cryptsetup.c:3923
 #, fuzzy
 msgid "Option --integrity is allowed only for luksFormat (LUKS2)."
 msgstr "选项 --align-payload 只允许用于 luksFormat。"
 
-#: src/cryptsetup.c:3764
+#: src/cryptsetup.c:3928
 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension."
 msgstr ""
 
-#: src/cryptsetup.c:3770
+#: src/cryptsetup.c:3934
 #, fuzzy
 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."
 msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。"
 
-#: src/cryptsetup.c:3776
+#: src/cryptsetup.c:3940
 #, fuzzy
 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."
 msgstr "选项 --test-passphrase 只能用于打开 LUKS 和 TCRYPT 设备。\n"
 
-#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708
+#: src/cryptsetup.c:3945 src/cryptsetup_reencrypt.c:1728
 msgid "Key size must be a multiple of 8 bits"
 msgstr "密钥尺寸必须是 8 的倍数"
 
-#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394
-#: src/cryptsetup_reencrypt.c:1713
+#: src/cryptsetup.c:3951 src/cryptsetup_reencrypt.c:1412
+#: src/cryptsetup_reencrypt.c:1733
 msgid "Key slot is invalid."
 msgstr "密钥槽无效。"
 
-#: src/cryptsetup.c:3794
+#: src/cryptsetup.c:3958
 #, fuzzy
 msgid "Option --key-file takes precedence over specified key file argument."
 msgstr "选项 --key-file 优先使用指定的密钥文件参数。\n"
 
-#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663
-#: src/cryptsetup_reencrypt.c:1687
+#: src/cryptsetup.c:3965 src/veritysetup.c:594 src/integritysetup.c:686
+#: src/cryptsetup_reencrypt.c:1707
 msgid "Negative number for option not permitted."
 msgstr "不允许在选项中填入负数。"
 
-#: src/cryptsetup.c:3805
+#: src/cryptsetup.c:3969
 msgid "Only one --key-file argument is allowed."
 msgstr "只允许存在一个 --key-file 选项。"
 
-#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679
-#: src/cryptsetup_reencrypt.c:1717
+#: src/cryptsetup.c:3973 src/cryptsetup_reencrypt.c:1699
+#: src/cryptsetup_reencrypt.c:1737
 msgid "Only one of --use-[u]random options is allowed."
 msgstr "--use-[u]random 选项只能用一处。"
 
-#: src/cryptsetup.c:3813
+#: src/cryptsetup.c:3977
 msgid "Option --use-[u]random is allowed only for luksFormat."
 msgstr "选项 --use-[u]random 只适用于 luksFormat。"
 
-#: src/cryptsetup.c:3817
+#: src/cryptsetup.c:3981
 msgid "Option --uuid is allowed only for luksFormat and luksUUID."
 msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。"
 
-#: src/cryptsetup.c:3821
+#: src/cryptsetup.c:3985
 msgid "Option --align-payload is allowed only for luksFormat."
 msgstr "选项 --align-payload 只允许用于 luksFormat。"
 
-#: src/cryptsetup.c:3825
+#: src/cryptsetup.c:3989
 #, fuzzy
 msgid "Options --luks2-metadata-size and --opt-luks2-keyslots-size are allowed only for luksFormat with LUKS2."
 msgstr "选项 --uuid 只允许用于 luksFormat 和 luksUUID。"
 
-#: src/cryptsetup.c:3830
+#: src/cryptsetup.c:3994
 #, fuzzy
 msgid "Invalid LUKS2 metadata size specification."
 msgstr "无效的设备大小指标。"
 
-#: src/cryptsetup.c:3834
+#: src/cryptsetup.c:3998
 #, fuzzy
 msgid "Invalid LUKS2 keyslots size specification."
 msgstr "无效的设备大小指标。"
 
-#: src/cryptsetup.c:3838
+#: src/cryptsetup.c:4002
 #, fuzzy
 msgid "Options --align-payload and --offset cannot be combined."
 msgstr "选项 --align-payload 只允许用于 luksFormat。"
 
-#: src/cryptsetup.c:3844
+#: src/cryptsetup.c:4008
 #, fuzzy
 msgid "Option --skip is supported only for open of plain and loopaes devices."
 msgstr "选项 --skip 只适用于打开纯设备和 loopaes 设备。\n"
 
-#: src/cryptsetup.c:3851
+#: src/cryptsetup.c:4015
 #, fuzzy
 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."
 msgstr "选项 --offset 只适用于打开纯设备和 loopaes 设备。\n"
 
-#: src/cryptsetup.c:3857
+#: src/cryptsetup.c:4021
 #, fuzzy
 msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."
 msgstr "选项 --tcrypt-hidden, --tcrypt-system 或 --tcrypt-backup 只支持 TCRYPT 设备。\n"
 
-#: src/cryptsetup.c:3862
+#: src/cryptsetup.c:4026
 #, fuzzy
 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards."
 msgstr "选项 --tcrypt-hidden 不能与 --allow-discards 共用。\n"
 
-#: src/cryptsetup.c:3867
+#: src/cryptsetup.c:4031
 #, fuzzy
 msgid "Option --veracrypt is supported only for TCRYPT device type."
 msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n"
 
-#: src/cryptsetup.c:3873
+#: src/cryptsetup.c:4037
 msgid "Invalid argument for parameter --veracrypt-pim supplied."
 msgstr ""
 
-#: src/cryptsetup.c:3877
+#: src/cryptsetup.c:4041
 #, fuzzy
 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices."
 msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n"
 
-#: src/cryptsetup.c:3885
+#: src/cryptsetup.c:4049
 #, fuzzy
 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices."
 msgstr "选项 --veracrypt 只支持 TCRYPT 设备类型。\n"
 
-#: src/cryptsetup.c:3889
+#: src/cryptsetup.c:4053
 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive."
 msgstr ""
 
-#: src/cryptsetup.c:3896
+#: src/cryptsetup.c:4060
 msgid "Option --priority can be only ignore/normal/prefer."
 msgstr ""
 
-#: src/cryptsetup.c:3901 src/cryptsetup.c:3939
+#: src/cryptsetup.c:4065 src/cryptsetup.c:4103
 msgid "Keyslot specification is required."
 msgstr ""
 
-#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693
+#: src/cryptsetup.c:4070 src/cryptsetup_reencrypt.c:1713
 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."
 msgstr ""
 
-#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698
+#: src/cryptsetup.c:4075 src/cryptsetup_reencrypt.c:1718
 msgid "PBKDF forced iterations cannot be combined with iteration time option."
 msgstr ""
 
-#: src/cryptsetup.c:3917
+#: src/cryptsetup.c:4081
 #, fuzzy
 msgid "Sector size option is not supported for this command."
 msgstr "不支持在这类设备上执行此操作。\n"
 
-#: src/cryptsetup.c:3929
+#: src/cryptsetup.c:4093
 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes."
 msgstr ""
 
-#: src/cryptsetup.c:3934
+#: src/cryptsetup.c:4098
 msgid "Key size is required with --unbound option."
 msgstr ""
 
-#: src/cryptsetup.c:3944
+#: src/cryptsetup.c:4108
 #, fuzzy
 msgid "Option --unbound may be used only with luksAddKey and luksDump actions."
 msgstr "选项 --new 不可与 --decrypt 共用。"
 
-#: src/cryptsetup.c:3949
+#: src/cryptsetup.c:4113
 #, fuzzy
 msgid "Option --refresh may be used only with open action."
 msgstr "选项 --new 不可与 --decrypt 共用。"
 
-#: src/cryptsetup.c:3960
+#: src/cryptsetup.c:4124
 #, fuzzy
 msgid "Cannot disable metadata locking."
 msgstr "无法禁用元数据锁定。\n"
 
-#: src/cryptsetup.c:3970
+#: src/cryptsetup.c:4135
 #, fuzzy
 msgid "Invalid max reencryption hotzone size specification."
 msgstr "无效的设备大小指标。"
 
-#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722
-#: src/cryptsetup_reencrypt.c:1727
+#: src/cryptsetup.c:4143 src/cryptsetup_reencrypt.c:1742
+#: src/cryptsetup_reencrypt.c:1747
 msgid "Invalid device size specification."
 msgstr "无效的设备大小指标。"
 
-#: src/cryptsetup.c:3981
+#: src/cryptsetup.c:4146
 #, fuzzy
 msgid "Maximum device reduce size is 1 GiB."
 msgstr "最大设备缩减大小为 64 MiB。"
 
-#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733
+#: src/cryptsetup.c:4149 src/cryptsetup_reencrypt.c:1753
 msgid "Reduce size must be multiple of 512 bytes sector."
 msgstr "缩减大小必须为 512 字节扇区的倍数。"
 
-#: src/cryptsetup.c:3989
+#: src/cryptsetup.c:4154
 #, fuzzy
 msgid "Invalid data size specification."
 msgstr "无效的设备大小指标。"
 
-#: src/cryptsetup.c:3994
+#: src/cryptsetup.c:4159
 #, fuzzy
 msgid "Reduce size overflow."
 msgstr "设备偏移量溢出。"
 
-#: src/cryptsetup.c:3998
+#: src/cryptsetup.c:4163
 msgid "LUKS2 decryption requires option --header."
 msgstr ""
 
-#: src/cryptsetup.c:4002
+#: src/cryptsetup.c:4167
 #, fuzzy
 msgid "Device size must be multiple of 512 bytes sector."
 msgstr "缩减大小必须为 512 字节扇区的倍数。"
 
-#: src/cryptsetup.c:4006
+#: src/cryptsetup.c:4171
 msgid "Options --reduce-device-size and --data-size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4010
+#: src/cryptsetup.c:4175
 msgid "Options --device-size and --size cannot be combined."
 msgstr ""
 
-#: src/cryptsetup.c:4014
+#: src/cryptsetup.c:4179
 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together."
 msgstr ""
 
-#: src/veritysetup.c:66
+#: src/veritysetup.c:76
 msgid "Invalid salt string specified."
 msgstr "指定了无效的盐字串。"
 
-#: src/veritysetup.c:97
+#: src/veritysetup.c:107
 #, fuzzy, c-format
 msgid "Cannot create hash image %s for writing."
 msgstr "无法为创建哈希映像 %s 以供写入。\n"
 
-#: src/veritysetup.c:107
+#: src/veritysetup.c:117
 #, fuzzy, c-format
 msgid "Cannot create FEC image %s for writing."
 msgstr "无法为创建哈希映像 %s 以供写入。\n"
 
-#: src/veritysetup.c:179
+#: src/veritysetup.c:191
 #, fuzzy
 msgid "Invalid root hash string specified."
 msgstr "指定了无效的根哈希值字串。\n"
 
-#: src/veritysetup.c:187
+#: src/veritysetup.c:199
 #, fuzzy, c-format
 msgid "Invalid signature file %s."
 msgstr "设备 %s 无效。"
 
-#: src/veritysetup.c:194
+#: src/veritysetup.c:206
 #, fuzzy, c-format
 msgid "Cannot read signature file %s."
 msgstr ""
 "无法读取密钥文件 %s。\n"
 "\n"
 
-#: src/veritysetup.c:392
+#: src/veritysetup.c:406
 msgid "<data_device> <hash_device>"
 msgstr "<数据设备> <哈希设备>"
 
-#: src/veritysetup.c:392 src/integritysetup.c:479
+#: src/veritysetup.c:406 src/integritysetup.c:492
 msgid "format device"
 msgstr "格式化设备"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "<data_device> <hash_device> <root_hash>"
 msgstr "<数据设备> <哈希设备> <根哈希值>"
 
-#: src/veritysetup.c:393
+#: src/veritysetup.c:407
 msgid "verify device"
 msgstr "验证设备"
 
-#: src/veritysetup.c:394
+#: src/veritysetup.c:408
 #, fuzzy
 msgid "<data_device> <name> <hash_device> <root_hash>"
 msgstr "<数据设备> <哈希设备> <根哈希值>"
 
-#: src/veritysetup.c:396 src/integritysetup.c:482
+#: src/veritysetup.c:410 src/integritysetup.c:495
 msgid "show active device status"
 msgstr "显示已激活的设备信息"
 
-#: src/veritysetup.c:397
+#: src/veritysetup.c:411
 msgid "<hash_device>"
 msgstr "<哈希设备>"
 
-#: src/veritysetup.c:397 src/integritysetup.c:483
+#: src/veritysetup.c:411 src/integritysetup.c:496
 msgid "show on-disk information"
 msgstr "显示磁盘上的信息"
 
-#: src/veritysetup.c:416
+#: src/veritysetup.c:430
 #, c-format
 msgid ""
 "\n"
@@ -3249,7 +3324,7 @@ msgstr ""
 "<哈希设备> 是含有验证信息的设备\n"
 "<根哈希值> 是 <哈希设备> 根节点的哈希值\n"
 
-#: src/veritysetup.c:423
+#: src/veritysetup.c:437
 #, c-format
 msgid ""
 "\n"
@@ -3260,135 +3335,149 @@ msgstr ""
 "编译时决定的默认 dm-verify 参数:\n"
 "\t哈希: %s, 数据块 (字节): %u, 哈希块 (字节): %u, 盐大小: %u, 哈希格式: %u\n"
 
-#: src/veritysetup.c:466
+#: src/veritysetup.c:481
 msgid "Do not use verity superblock"
 msgstr "不使用真理超级块"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "Format type (1 - normal, 0 - original Chrome OS)"
 msgstr "格式类型 (1 - 正常, 0 - 原版 Chrome OS)"
 
-#: src/veritysetup.c:467
+#: src/veritysetup.c:482
 msgid "number"
 msgstr "数字"
 
-#: src/veritysetup.c:468
+#: src/veritysetup.c:483
 msgid "Block size on the data device"
 msgstr "数据设备的块大小"
 
-#: src/veritysetup.c:469
+#: src/veritysetup.c:484
 msgid "Block size on the hash device"
 msgstr "哈希设备的块大小"
 
-#: src/veritysetup.c:470
+#: src/veritysetup.c:485
 msgid "FEC parity bytes"
 msgstr "FEC 校验字节"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "The number of blocks in the data file"
 msgstr "数据文件的块数量"
 
-#: src/veritysetup.c:471
+#: src/veritysetup.c:486
 msgid "blocks"
 msgstr "块"
 
-#: src/veritysetup.c:472
+#: src/veritysetup.c:487
 msgid "Path to device with error correction data"
 msgstr ""
 
-#: src/veritysetup.c:472 src/integritysetup.c:549
+#: src/veritysetup.c:487 src/integritysetup.c:566
 msgid "path"
 msgstr ""
 
-#: src/veritysetup.c:473
+#: src/veritysetup.c:488
 msgid "Starting offset on the hash device"
 msgstr "哈希设备开始位置偏移量"
 
-#: src/veritysetup.c:474
+#: src/veritysetup.c:489
 #, fuzzy
 msgid "Starting offset on the FEC device"
 msgstr "哈希设备开始位置偏移量"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "Hash algorithm"
 msgstr "哈希算法"
 
-#: src/veritysetup.c:475
+#: src/veritysetup.c:490
 msgid "string"
 msgstr "字符串"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "Salt"
 msgstr "盐"
 
-#: src/veritysetup.c:476
+#: src/veritysetup.c:491
 msgid "hex string"
 msgstr "十六进制字符串"
 
-#: src/veritysetup.c:478
+#: src/veritysetup.c:493
 #, fuzzy
 msgid "Path to root hash signature file"
 msgstr "创建哈希区失败。"
 
-#: src/veritysetup.c:479
+#: src/veritysetup.c:494
 msgid "Restart kernel if corruption is detected"
 msgstr ""
 
-#: src/veritysetup.c:480
+#: src/veritysetup.c:495
+msgid "Panic kernel if corruption is detected"
+msgstr ""
+
+#: src/veritysetup.c:496
 msgid "Ignore corruption, log it only"
 msgstr "忽略数据损坏,仅对其进行日志记录"
 
-#: src/veritysetup.c:481
+#: src/veritysetup.c:497
 #, fuzzy
 msgid "Do not verify zeroed blocks"
 msgstr "不使用真理超级块"
 
-#: src/veritysetup.c:482
+#: src/veritysetup.c:498
 msgid "Verify data block only the first time it is read"
 msgstr ""
 
-#: src/veritysetup.c:582
+#: src/veritysetup.c:600
 #, fuzzy
 msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/veritysetup.c:587
+#: src/veritysetup.c:605
 #, fuzzy
 msgid "Option --root-hash-signature can be used only for open operation."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/veritysetup.c:592
+#: src/veritysetup.c:610
 #, fuzzy
 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/integritysetup.c:84 src/utils_password.c:305
+#: src/veritysetup.c:615
+#, fuzzy
+msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together."
+msgstr "选项 --allow-discards 只适用于打开操作。\n"
+
+#: src/integritysetup.c:85
+#, fuzzy, c-format
+msgid "Invalid key size. Maximum is %u bytes."
+msgstr "无效的密钥大小。"
+
+#: src/integritysetup.c:95 src/utils_password.c:339
 #, fuzzy, c-format
 msgid "Cannot read keyfile %s."
 msgstr ""
 "无法读取密钥文件 %s。\n"
 "\n"
 
-#: src/integritysetup.c:88 src/utils_password.c:310
+#: src/integritysetup.c:99 src/utils_password.c:344
 #, fuzzy, c-format
 msgid "Cannot read %d bytes from keyfile %s."
 msgstr "无法从密钥文件 %2$s 读取 %1$d 字节。\n"
 
-#: src/integritysetup.c:254
+#: src/integritysetup.c:266
 #, c-format
 msgid "Formatted with tag size %u, internal integrity %s.\n"
 msgstr ""
 
-#: src/integritysetup.c:479 src/integritysetup.c:483
+#: src/integritysetup.c:492 src/integritysetup.c:496
 #, fuzzy
 msgid "<integrity_device>"
 msgstr "验证设备"
 
-#: src/integritysetup.c:480
+#: src/integritysetup.c:493
 msgid "<integrity_device> <name>"
 msgstr ""
 
-#: src/integritysetup.c:502
+#: src/integritysetup.c:515
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3401,415 +3490,420 @@ msgstr ""
 "<哈希设备> 是含有验证信息的设备\n"
 "<根哈希值> 是 <哈希设备> 根节点的哈希值\n"
 
-#: src/integritysetup.c:507
+#: src/integritysetup.c:520
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Default compiled-in dm-integrity parameters:\n"
 "\tChecksum algorithm: %s\n"
+"\tMaximum keyfile size: %dkB\n"
 msgstr ""
 "\n"
 "编译时决定的默认 dm-verify 参数:\n"
 "\t哈希: %s, 数据块 (字节): %u, 哈希块 (字节): %u, 盐大小: %u, 哈希格式: %u\n"
 
-#: src/integritysetup.c:549
+#: src/integritysetup.c:566
 msgid "Path to data device (if separated)"
 msgstr ""
 
-#: src/integritysetup.c:551
+#: src/integritysetup.c:568
 msgid "Journal size"
 msgstr "日志大小"
 
-#: src/integritysetup.c:552
+#: src/integritysetup.c:569
 msgid "Interleave sectors"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "Journal watermark"
 msgstr ""
 
-#: src/integritysetup.c:553
+#: src/integritysetup.c:570
 msgid "percent"
 msgstr ""
 
-#: src/integritysetup.c:554
+#: src/integritysetup.c:571
 msgid "Journal commit time"
 msgstr "日志提交时间"
 
-#: src/integritysetup.c:554 src/integritysetup.c:556
+#: src/integritysetup.c:571 src/integritysetup.c:573
 msgid "ms"
 msgstr ""
 
-#: src/integritysetup.c:555
+#: src/integritysetup.c:572
 msgid "Number of 512-byte sectors per bit (bitmap mode)."
 msgstr ""
 
-#: src/integritysetup.c:556
+#: src/integritysetup.c:573
 msgid "Bitmap mode flush time"
 msgstr ""
 
-#: src/integritysetup.c:557
+#: src/integritysetup.c:574
 msgid "Tag size (per-sector)"
 msgstr ""
 
-#: src/integritysetup.c:558
+#: src/integritysetup.c:575
 msgid "Sector size"
 msgstr "扇区大小"
 
-#: src/integritysetup.c:559
+#: src/integritysetup.c:576
 msgid "Buffers size"
 msgstr "缓冲大小"
 
-#: src/integritysetup.c:561
+#: src/integritysetup.c:578
 msgid "Data integrity algorithm"
 msgstr "数据完整性校验算法"
 
-#: src/integritysetup.c:562
+#: src/integritysetup.c:579
 #, fuzzy
 msgid "The size of the data integrity key"
 msgstr "加密密钥大小"
 
-#: src/integritysetup.c:563
+#: src/integritysetup.c:580
 #, fuzzy
 msgid "Read the integrity key from a file"
 msgstr "从文件读取密钥。"
 
-#: src/integritysetup.c:565
+#: src/integritysetup.c:582
 msgid "Journal integrity algorithm"
 msgstr ""
 
-#: src/integritysetup.c:566
+#: src/integritysetup.c:583
 #, fuzzy
 msgid "The size of the journal integrity key"
 msgstr "加密密钥大小"
 
-#: src/integritysetup.c:567
+#: src/integritysetup.c:584
 #, fuzzy
 msgid "Read the journal integrity key from a file"
 msgstr "从文件读取密钥。"
 
-#: src/integritysetup.c:569
+#: src/integritysetup.c:586
 msgid "Journal encryption algorithm"
 msgstr "日志加密算法"
 
-#: src/integritysetup.c:570
+#: src/integritysetup.c:587
 #, fuzzy
 msgid "The size of the journal encryption key"
 msgstr "加密密钥大小"
 
-#: src/integritysetup.c:571
+#: src/integritysetup.c:588
 #, fuzzy
 msgid "Read the journal encryption key from a file"
 msgstr "从文件读取密钥。"
 
-#: src/integritysetup.c:574
+#: src/integritysetup.c:591
 msgid "Recovery mode (no journal, no tag checking)"
 msgstr ""
 
-#: src/integritysetup.c:575
+#: src/integritysetup.c:592
 #, fuzzy
 msgid "Use bitmap to track changes and disable journal for integrity device"
 msgstr "为 VERITY 设备提供的大小指标无效。\n"
 
-#: src/integritysetup.c:576
+#: src/integritysetup.c:593
 msgid "Recalculate initial tags automatically."
 msgstr ""
 
-#: src/integritysetup.c:649
+#: src/integritysetup.c:596
+msgid "Do not protect superblock with HMAC (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:597
+msgid "Allow recalculating of volumes with HMAC keys (old kernels)"
+msgstr ""
+
+#: src/integritysetup.c:672
 #, fuzzy
 msgid "Option --integrity-recalculate can be used only for open action."
 msgstr "选项 --allow-discards 只适用于打开操作。\n"
 
-#: src/integritysetup.c:669
+#: src/integritysetup.c:692
 msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action."
 msgstr ""
 
-#: src/integritysetup.c:675
+#: src/integritysetup.c:698
 msgid "Invalid journal size specification."
 msgstr "无效的日志大小指标。"
 
-#: src/integritysetup.c:680
+#: src/integritysetup.c:703
 msgid "Both key file and key size options must be specified."
 msgstr "密钥文件和密钥大小选项均必须指定。"
 
-#: src/integritysetup.c:683
-msgid "Integrity algorithm must be specified if integrity key is used."
-msgstr ""
-
-#: src/integritysetup.c:688
+#: src/integritysetup.c:708
 msgid "Both journal integrity key file and key size options must be specified."
 msgstr ""
 
-#: src/integritysetup.c:691
+#: src/integritysetup.c:711
 msgid "Journal integrity algorithm must be specified if journal integrity key is used."
 msgstr "如果使用了日志加密密钥,则必须指定日志完整性校验算法。"
 
-#: src/integritysetup.c:696
+#: src/integritysetup.c:716
 msgid "Both journal encryption key file and key size options must be specified."
 msgstr "日志加密密钥文件和密钥大小选项均必须指定。"
 
-#: src/integritysetup.c:699
+#: src/integritysetup.c:719
 msgid "Journal encryption algorithm must be specified if journal encryption key is used."
 msgstr "如果使用了日志加密密钥,则必须指定日志加密算法。"
 
-#: src/integritysetup.c:703
+#: src/integritysetup.c:723
 msgid "Recovery and bitmap mode options are mutually exclusive."
 msgstr ""
 
-#: src/integritysetup.c:707
+#: src/integritysetup.c:727
 msgid "Journal options cannot be used in bitmap mode."
 msgstr ""
 
-#: src/integritysetup.c:711
+#: src/integritysetup.c:731
 msgid "Bitmap options can be used only in bitmap mode."
 msgstr ""
 
-#: src/cryptsetup_reencrypt.c:172
+#: src/cryptsetup_reencrypt.c:190
 msgid "Reencryption already in-progress."
 msgstr "重加密已在进行中。"
 
-#: src/cryptsetup_reencrypt.c:208
+#: src/cryptsetup_reencrypt.c:226
 #, c-format
 msgid "Cannot exclusively open %s, device in use."
 msgstr "无法独占打开 %s,设备正在使用中。"
 
-#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135
+#: src/cryptsetup_reencrypt.c:240 src/cryptsetup_reencrypt.c:1153
 msgid "Allocation of aligned memory failed."
 msgstr "分配对齐内存失败。"
 
-#: src/cryptsetup_reencrypt.c:229
+#: src/cryptsetup_reencrypt.c:247
 #, c-format
 msgid "Cannot read device %s."
 msgstr "无法读取设备 %s。"
 
-#: src/cryptsetup_reencrypt.c:240
+#: src/cryptsetup_reencrypt.c:258
 #, c-format
 msgid "Marking LUKS1 device %s unusable."
 msgstr "正在标记 LUKS1 设备 %s 为不可用状态。"
 
-#: src/cryptsetup_reencrypt.c:244
+#: src/cryptsetup_reencrypt.c:262
 #, c-format
 msgid "Setting LUKS2 offline reencrypt flag on device %s."
 msgstr "正在设备 %s 上设定 LUKS2 离线重加密旗标。"
 
-#: src/cryptsetup_reencrypt.c:261
+#: src/cryptsetup_reencrypt.c:279
 #, c-format
 msgid "Cannot write device %s."
 msgstr "无法写入设备 %s。"
 
-#: src/cryptsetup_reencrypt.c:309
+#: src/cryptsetup_reencrypt.c:327
 msgid "Cannot write reencryption log file."
 msgstr "无法写入重加密日志文件。"
 
-#: src/cryptsetup_reencrypt.c:365
+#: src/cryptsetup_reencrypt.c:383
 msgid "Cannot read reencryption log file."
 msgstr "无法读取重加密日志文件。"
 
-#: src/cryptsetup_reencrypt.c:403
+#: src/cryptsetup_reencrypt.c:421
 #, c-format
 msgid "Log file %s exists, resuming reencryption.\n"
 msgstr "日志文件 %s 存在,继续重加密。\n"
 
-#: src/cryptsetup_reencrypt.c:452
+#: src/cryptsetup_reencrypt.c:470
 msgid "Activating temporary device using old LUKS header."
 msgstr "正使用旧 LUKS 标头激活临时设备。"
 
-#: src/cryptsetup_reencrypt.c:462
+#: src/cryptsetup_reencrypt.c:480
 msgid "Activating temporary device using new LUKS header."
 msgstr "正使用新 LUKS 标头激活临时设备。"
 
-#: src/cryptsetup_reencrypt.c:472
+#: src/cryptsetup_reencrypt.c:490
 msgid "Activation of temporary devices failed."
 msgstr "激活临时设备失败。"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/cryptsetup_reencrypt.c:559
+#: src/cryptsetup_reencrypt.c:577
 #, fuzzy
 msgid "Failed to set data offset."
 msgstr "获取 (stat) 密钥文件信息失败。"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/cryptsetup_reencrypt.c:565
+#: src/cryptsetup_reencrypt.c:583
 #, fuzzy
 msgid "Failed to set metadata size."
 msgstr "获取 (stat) 密钥文件信息失败。"
 
-#: src/cryptsetup_reencrypt.c:573
+#: src/cryptsetup_reencrypt.c:591
 #, c-format
 msgid "New LUKS header for device %s created."
 msgstr "已创建设备 %s 的新 LUKS 标头。"
 
-#: src/cryptsetup_reencrypt.c:633
+#: src/cryptsetup_reencrypt.c:651
 #, c-format
 msgid "This version of cryptsetup-reencrypt can't handle new internal token type %s."
 msgstr "该版本的 cryptsetup-reencrypt 无法处理新的内部 token 类型 %s。"
 
-#: src/cryptsetup_reencrypt.c:655
+#: src/cryptsetup_reencrypt.c:673
 msgid "Failed to read activation flags from backup header."
 msgstr "从备份标头读取活动旗标失败。"
 
-#: src/cryptsetup_reencrypt.c:659
+#: src/cryptsetup_reencrypt.c:677
 msgid "Failed to write activation flags to new header."
 msgstr "向新表头写入活动旗标失败。"
 
-#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667
+#: src/cryptsetup_reencrypt.c:681 src/cryptsetup_reencrypt.c:685
 msgid "Failed to read requirements from backup header."
 msgstr "从备份标头读取需求失败。"
 
-#: src/cryptsetup_reencrypt.c:705
+#: src/cryptsetup_reencrypt.c:723
 #, c-format
 msgid "%s header backup of device %s created."
 msgstr "已创建 %s 标头备份(对应设备 %s)。"
 
-#: src/cryptsetup_reencrypt.c:768
+#: src/cryptsetup_reencrypt.c:786
 msgid "Creation of LUKS backup headers failed."
 msgstr "LUKS 备份标头创建失败。"
 
-#: src/cryptsetup_reencrypt.c:901
+#: src/cryptsetup_reencrypt.c:919
 #, c-format
 msgid "Cannot restore %s header on device %s."
 msgstr "无法恢复 %s 标头(在设备 %s 上)。"
 
-#: src/cryptsetup_reencrypt.c:903
+#: src/cryptsetup_reencrypt.c:921
 #, c-format
 msgid "%s header on device %s restored."
 msgstr "已恢复 %s 标头(在设备 %s 上)。"
 
-#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113
+#: src/cryptsetup_reencrypt.c:1125 src/cryptsetup_reencrypt.c:1131
 msgid "Cannot open temporary LUKS device."
 msgstr "无法打开临时 LUKS 设备。"
 
-#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123
+#: src/cryptsetup_reencrypt.c:1136 src/cryptsetup_reencrypt.c:1141
 msgid "Cannot get device size."
 msgstr "无法获取设备大小。"
 
-#: src/cryptsetup_reencrypt.c:1158
+#: src/cryptsetup_reencrypt.c:1176
 msgid "IO error during reencryption."
 msgstr "重加密时发生 IO 错误。"
 
-#: src/cryptsetup_reencrypt.c:1189
+#: src/cryptsetup_reencrypt.c:1207
 msgid "Provided UUID is invalid."
 msgstr "提供的 UUID 无效。"
 
-#: src/cryptsetup_reencrypt.c:1423
+#: src/cryptsetup_reencrypt.c:1441
 msgid "Cannot open reencryption log file."
 msgstr "无法打开重加密日志文件。"
 
-#: src/cryptsetup_reencrypt.c:1429
+#: src/cryptsetup_reencrypt.c:1447
 msgid "No decryption in progress, provided UUID can be used only to resume suspended decryption process."
 msgstr "没有正在进行中的解密操作,提供的 UUID 仅能用于继续已挂起的解密操作。"
 
-#: src/cryptsetup_reencrypt.c:1504
+#: src/cryptsetup_reencrypt.c:1522
 #, c-format
 msgid "Changed pbkdf parameters in keyslot %i."
 msgstr "已在密钥槽 %i 更改 pbkdf 参数。"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "Reencryption block size"
 msgstr "重加密块大小"
 
-#: src/cryptsetup_reencrypt.c:1616
+#: src/cryptsetup_reencrypt.c:1636
 msgid "MiB"
 msgstr "MiB"
 
-#: src/cryptsetup_reencrypt.c:1620
+#: src/cryptsetup_reencrypt.c:1640
 msgid "Do not change key, no data area reencryption"
 msgstr "不要更改密钥,无数据区重加密"
 
-#: src/cryptsetup_reencrypt.c:1622
+#: src/cryptsetup_reencrypt.c:1642
 msgid "Read new volume (master) key from file"
 msgstr "从文件读取卷(主)密钥"
 
-#: src/cryptsetup_reencrypt.c:1623
+#: src/cryptsetup_reencrypt.c:1643
 msgid "PBKDF2 iteration time for LUKS (in ms)"
 msgstr "LUKS 默认 PBKDF2 迭代时间(毫秒)"
 
-#: src/cryptsetup_reencrypt.c:1629
+#: src/cryptsetup_reencrypt.c:1649
 msgid "Use direct-io when accessing devices"
 msgstr "在访问设备时使用 direct-io"
 
-#: src/cryptsetup_reencrypt.c:1630
+#: src/cryptsetup_reencrypt.c:1650
 msgid "Use fsync after each block"
 msgstr "在每个数据块后使用 fsync"
 
-#: src/cryptsetup_reencrypt.c:1631
+#: src/cryptsetup_reencrypt.c:1651
 msgid "Update log file after every block"
 msgstr "在每个数据块后更新日志文件"
 
-#: src/cryptsetup_reencrypt.c:1632
+#: src/cryptsetup_reencrypt.c:1652
 msgid "Use only this slot (others will be disabled)"
 msgstr "仅使用这个密钥槽(其他的密钥槽将被禁用)"
 
-#: src/cryptsetup_reencrypt.c:1637
+#: src/cryptsetup_reencrypt.c:1657
 msgid "Create new header on not encrypted device"
 msgstr "在未加密的设备上创建新的标头"
 
-#: src/cryptsetup_reencrypt.c:1638
+#: src/cryptsetup_reencrypt.c:1658
 msgid "Permanently decrypt device (remove encryption)"
 msgstr "永久解密设备(移除加密)"
 
-#: src/cryptsetup_reencrypt.c:1639
+#: src/cryptsetup_reencrypt.c:1659
 msgid "The UUID used to resume decryption"
 msgstr "用于继续解密的 UUID"
 
-#: src/cryptsetup_reencrypt.c:1640
+#: src/cryptsetup_reencrypt.c:1660
 msgid "Type of LUKS metadata: luks1, luks2"
 msgstr "LUKS 元数据类型:luks1、luks2"
 
-#: src/cryptsetup_reencrypt.c:1659
+#: src/cryptsetup_reencrypt.c:1679
 msgid "[OPTION...] <device>"
 msgstr "[选项...] <设备>"
 
-#: src/cryptsetup_reencrypt.c:1667
+#: src/cryptsetup_reencrypt.c:1687
 #, c-format
 msgid "Reencryption will change: %s%s%s%s%s%s."
 msgstr "重加密会改变:%s%s%s%s%s%s。"
 
-#: src/cryptsetup_reencrypt.c:1668
+#: src/cryptsetup_reencrypt.c:1688
 msgid "volume key"
 msgstr "卷密钥"
 
-#: src/cryptsetup_reencrypt.c:1670
+#: src/cryptsetup_reencrypt.c:1690
 msgid "set hash to "
 msgstr "设置哈希值为 "
 
-#: src/cryptsetup_reencrypt.c:1671
+#: src/cryptsetup_reencrypt.c:1691
 msgid ", set cipher to "
 msgstr ",设定密文为 "
 
-#: src/cryptsetup_reencrypt.c:1675
+#: src/cryptsetup_reencrypt.c:1695
 msgid "Argument required."
 msgstr "需要参数。"
 
-#: src/cryptsetup_reencrypt.c:1703
+#: src/cryptsetup_reencrypt.c:1723
 msgid "Only values between 1 MiB and 64 MiB allowed for reencryption block size."
 msgstr "重加密块大小只能是 1 MiB 到 64 MiB 之间的值。"
 
-#: src/cryptsetup_reencrypt.c:1730
+#: src/cryptsetup_reencrypt.c:1750
 msgid "Maximum device reduce size is 64 MiB."
 msgstr "最大设备缩减大小为 64 MiB。"
 
-#: src/cryptsetup_reencrypt.c:1737
+#: src/cryptsetup_reencrypt.c:1757
 msgid "Option --new must be used together with --reduce-device-size or --header."
 msgstr "选项 --new 必须与 --reduce-device-size 或 --header 共用。"
 
-#: src/cryptsetup_reencrypt.c:1741
+#: src/cryptsetup_reencrypt.c:1761
 msgid "Option --keep-key can be used only with --hash, --iter-time or --pbkdf-force-iterations."
 msgstr "选项 --keep-key 只能与 --hash、--iter-time 或 --pbkdf-force-iterations 共用。"
 
-#: src/cryptsetup_reencrypt.c:1745
+#: src/cryptsetup_reencrypt.c:1765
 msgid "Option --new cannot be used together with --decrypt."
 msgstr "选项 --new 不可与 --decrypt 共用。"
 
-#: src/cryptsetup_reencrypt.c:1749
+#: src/cryptsetup_reencrypt.c:1769
 msgid "Option --decrypt is incompatible with specified parameters."
 msgstr "选项 --decrypt 与选定参数不兼容。"
 
-#: src/cryptsetup_reencrypt.c:1753
+#: src/cryptsetup_reencrypt.c:1773
 msgid "Option --uuid is allowed only together with --decrypt."
 msgstr "选项 --uuid 不可与 --decrypt 共用。"
 
-#: src/cryptsetup_reencrypt.c:1757
+#: src/cryptsetup_reencrypt.c:1777
 msgid "Invalid luks type. Use one of these: 'luks', 'luks1' or 'luks2'."
 msgstr "无效的 luks 类型。请使用下列选项之一:'luks'、'luks1' 或 'luks2'。"
 
@@ -3850,97 +3944,97 @@ msgstr "未知错误"
 msgid "Command failed with code %i (%s).\n"
 msgstr "命令失败,代码 %i(%s)。\n"
 
-#: src/utils_tools.c:283
+#: src/utils_tools.c:284
 #, fuzzy, c-format
 msgid "Key slot %i created."
 msgstr "密钥槽 %d 已改变。"
 
-#: src/utils_tools.c:285
+#: src/utils_tools.c:286
 #, fuzzy, c-format
 msgid "Key slot %i unlocked."
 msgstr "密钥槽 %d 已解锁。"
 
-#: src/utils_tools.c:287
+#: src/utils_tools.c:288
 #, fuzzy, c-format
 msgid "Key slot %i removed."
 msgstr "密钥槽 %d 已解锁。"
 
-#: src/utils_tools.c:296
+#: src/utils_tools.c:297
 #, fuzzy, c-format
 msgid "Token %i created."
 msgstr "密钥槽 %d 未使用。\n"
 
-#: src/utils_tools.c:298
+#: src/utils_tools.c:299
 #, fuzzy, c-format
 msgid "Token %i removed."
 msgstr "密钥槽 %d 未使用。\n"
 
-#: src/utils_tools.c:464
+#: src/utils_tools.c:465
 #, fuzzy
 msgid ""
 "\n"
 "Wipe interrupted."
 msgstr "测试密文"
 
-#: src/utils_tools.c:475
+#: src/utils_tools.c:476
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' partition signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:483
+#: src/utils_tools.c:484
 #, c-format
 msgid "WARNING: Device %s already contains a '%s' superblock signature.\n"
 msgstr ""
 
-#: src/utils_tools.c:504 src/utils_tools.c:568
+#: src/utils_tools.c:505 src/utils_tools.c:569
 #, fuzzy
 msgid "Failed to initialize device signature probes."
 msgstr "初始化默认 LUKS2 密钥槽参数失败。"
 
 # stat() 主要就是出来一个各种文件信息……
-#: src/utils_tools.c:548
+#: src/utils_tools.c:549
 #, fuzzy, c-format
 msgid "Failed to stat device %s."
 msgstr "获取 (stat) 密钥文件信息失败。"
 
-#: src/utils_tools.c:561
+#: src/utils_tools.c:562
 #, c-format
 msgid "Device %s is in use. Can not proceed with format operation."
 msgstr ""
 
-#: src/utils_tools.c:563
+#: src/utils_tools.c:564
 #, fuzzy, c-format
 msgid "Failed to open file %s in read/write mode."
 msgstr "无法打开密钥文件 %s 以供写入。"
 
-#: src/utils_tools.c:577
+#: src/utils_tools.c:578
 #, c-format
 msgid "Existing '%s' partition signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:580
+#: src/utils_tools.c:581
 #, c-format
 msgid "Existing '%s' superblock signature (offset: %<PRIi64> bytes) on device %s will be wiped."
 msgstr ""
 
-#: src/utils_tools.c:583
+#: src/utils_tools.c:584
 #, fuzzy
 msgid "Failed to wipe device signature."
 msgstr "无法获取写入设备锁。"
 
-#: src/utils_tools.c:590
+#: src/utils_tools.c:591
 #, c-format
 msgid "Failed to probe device %s for a signature."
 msgstr ""
 
-#: src/utils_tools.c:629
+#: src/utils_tools.c:622
 #, fuzzy
 msgid ""
 "\n"
 "Reencryption interrupted."
 msgstr "测试密文"
 
-#: src/utils_password.c:43 src/utils_password.c:75
+#: src/utils_password.c:43 src/utils_password.c:76
 #, c-format
 msgid "Cannot check password quality: %s"
 msgstr "无法检查密码质量:%s"
@@ -3959,46 +4053,46 @@ msgstr ""
 msgid "Password quality check failed: Bad passphrase (%s)"
 msgstr "密码质量检查失败:无效密码 (%s)"
 
-#: src/utils_password.c:193 src/utils_password.c:208
+#: src/utils_password.c:228 src/utils_password.c:242
 msgid "Error reading passphrase from terminal."
 msgstr "从终端读取口令时出错。"
 
-#: src/utils_password.c:206
+#: src/utils_password.c:240
 msgid "Verify passphrase: "
 msgstr "确认密码:"
 
-#: src/utils_password.c:213
+#: src/utils_password.c:247
 msgid "Passphrases do not match."
 msgstr "口令不匹配。"
 
-#: src/utils_password.c:250
+#: src/utils_password.c:284
 msgid "Cannot use offset with terminal input."
 msgstr "不能将偏移量用于终端输入。"
 
-#: src/utils_password.c:253
+#: src/utils_password.c:287
 #, c-format
 msgid "Enter passphrase: "
 msgstr "输入口令:"
 
-#: src/utils_password.c:256
+#: src/utils_password.c:290
 #, c-format
 msgid "Enter passphrase for %s: "
 msgstr "输入 %s 的口令:"
 
-#: src/utils_password.c:287
+#: src/utils_password.c:321
 msgid "No key available with this passphrase."
 msgstr "此口令无可用的密钥。"
 
-#: src/utils_password.c:289
+#: src/utils_password.c:323
 msgid "No usable keyslot is available."
 msgstr ""
 
-#: src/utils_password.c:328
+#: src/utils_password.c:365
 #, c-format
 msgid "Cannot open keyfile %s for write."
 msgstr "无法打开密钥文件 %s 以供写入。"
 
-#: src/utils_password.c:335
+#: src/utils_password.c:372
 #, c-format
 msgid "Cannot write to keyfile %s."
 msgstr "无法写入密钥文件 %s。"
@@ -4041,21 +4135,35 @@ msgstr "测试密文"
 msgid "Failed to write JSON file."
 msgstr "打开 (open) 密钥文件失败。"
 
+#, c-format
 #~ msgid "Cannot format device %s which is still in use."
 #~ msgstr "无法格式化正在使用的设备 %s。"
 
+#, c-format
 #~ msgid "Replaced with key slot %d."
 #~ msgstr "替换为密钥槽 %d。"
 
+#, c-format
 #~ msgid "Key slot %d is not used."
 #~ msgstr "密钥槽 %d 未使用。"
 
 #~ msgid "Function not available in FIPS mode."
 #~ msgstr "功能在 FIPS 模式无效。"
 
+#, c-format
+#~ msgid "WARNING: Locking directory %s/%s is missing!\n"
+#~ msgstr "警告:锁定目录 %s/%s 缺失!\n"
+
+#, fuzzy
+#~| msgid "Invalid size parameters for verity device.\n"
+#~ msgid "Invalid size parameters for verity device."
+#~ msgstr "为 VERITY 设备提供的大小指标无效。\n"
+
+#, c-format
 #~ msgid "Device %s is too small. (LUKS2 requires at least %<PRIu64> bytes.)"
 #~ msgstr "设备 %s 过小。(LUKS2 需要至少 %<PRIu64> 字节。)"
 
+#, c-format
 #~ msgid "Key slot %d selected for deletion."
 #~ msgstr "已选中密钥槽 %d 以供删除。"
 
@@ -4074,6 +4182,7 @@ msgstr "打开 (open) 密钥文件失败。"
 #~ msgid "Failed to set PBKDF parameters."
 #~ msgstr "设置 pbkdf 参数失败。"
 
+#, c-format
 #~ msgid "Activated keyslot %i."
 #~ msgstr "已激活密钥槽 %i。"
 
index c527690..fcc3571 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
 #include "cryptsetup.h"
 #include <uuid/uuid.h>
 
-static const char *opt_cipher = NULL;
-static const char *opt_keyslot_cipher = NULL;
-static const char *opt_hash = NULL;
-static int opt_verify_passphrase = 0;
+static char *opt_cipher = NULL;
+static char *opt_keyslot_cipher = NULL;
+static char *opt_hash = NULL;
+static char *opt_json_file = NULL;
+static char *opt_key_file = NULL;
+static char *opt_keyfile_stdin = NULL;
+static char *opt_keyfiles[MAX_KEYFILES];
+static char *opt_master_key_file = NULL;
+static char *opt_header_backup_file = NULL;
+static char *opt_uuid = NULL;
+static char *opt_header_device = NULL;
+static char *opt_type = NULL;
+static char *opt_pbkdf = NULL;
+static char *opt_priority = NULL; /* normal */
+static char *opt_integrity = NULL; /* none */
+static char *opt_key_description = NULL;
+static char *opt_label = NULL;
+static char *opt_subsystem = NULL;
+static char *opt_active_name = NULL;
+static char *opt_resilience_mode = NULL; /* default value "checksum" */
+static char *opt_resilience_hash = NULL; /* default value "sha256" */
+
+/* helper strings converted to uint64_t later */
+static char *opt_reduce_size_str = NULL;
+static char *opt_hotzone_size_str = NULL;
+static char *opt_device_size_str = NULL;
+static char *opt_luks2_metadata_size_str = NULL;
+static char *opt_luks2_keyslots_size_str = NULL;
 
-static const char *opt_json_file = NULL;
-static const char *opt_key_file = NULL;
-static const char *opt_keyfile_stdin = NULL;
-static int opt_keyfiles_count = 0;
-static const char *opt_keyfiles[MAX_KEYFILES];
+static uint64_t opt_reduce_size = 0;
+static uint64_t opt_hotzone_size = 0;
+static uint64_t opt_device_size = 0;
+static uint64_t opt_luks2_metadata_size = 0;
+static uint64_t opt_luks2_keyslots_size = 0;
 
-static const char *opt_master_key_file = NULL;
-static const char *opt_header_backup_file = NULL;
-static const char *opt_uuid = NULL;
-static const char *opt_header_device = NULL;
-static const char *opt_type = "luks";
+static int opt_keyfiles_count = 0;
+static int opt_verify_passphrase = 0;
 static int opt_key_size = 0;
 static int opt_keyslot_key_size = 0;
 static long opt_keyfile_size = 0;
@@ -64,6 +85,8 @@ static int opt_shared = 0;
 static int opt_allow_discards = 0;
 static int opt_perf_same_cpu_crypt = 0;
 static int opt_perf_submit_from_crypt_cpus = 0;
+static int opt_perf_no_read_workqueue = 0;
+static int opt_perf_no_write_workqueue = 0;
 static int opt_test_passphrase = 0;
 static int opt_tcrypt_hidden = 0;
 static int opt_tcrypt_system = 0;
@@ -74,57 +97,68 @@ static int opt_veracrypt_query_pim = 0;
 static int opt_deferred_remove = 0;
 static int opt_serialize_memory_hard_pbkdf = 0;
 //FIXME: check uint32 overflow for long type
-static const char *opt_pbkdf = NULL;
 static long opt_pbkdf_memory = DEFAULT_LUKS2_MEMORY_KB;
 static long opt_pbkdf_parallel = DEFAULT_LUKS2_PARALLEL_THREADS;
 static long opt_pbkdf_iterations = 0;
 static int opt_iteration_time = 0;
 static int opt_disable_locks = 0;
 static int opt_disable_keyring = 0;
-static const char *opt_priority = NULL; /* normal */
-static const char *opt_integrity = NULL; /* none */
 static int opt_integrity_nojournal = 0;
 static int opt_integrity_no_wipe = 0;
 static int opt_integrity_legacy_padding = 0;
-static const char *opt_key_description = NULL;
 static int opt_sector_size = 0;
 static int opt_iv_large_sectors = 0;
 static int opt_persistent = 0;
-static const char *opt_label = NULL;
-static const char *opt_subsystem = NULL;
 static int opt_unbound = 0;
 static int opt_refresh = 0;
 
 /* LUKS2 reencryption parameters */
-static const char *opt_active_name = NULL;
-static const char *opt_resilience_mode = "checksum"; // TODO: default resilience
-static const char *opt_resilience_hash = "sha256"; // TODO: default checksum hash
 static int opt_encrypt = 0;
 static int opt_reencrypt_init_only = 0;
 static int opt_reencrypt_resume_only = 0;
 static int opt_decrypt = 0;
 
-static const char *opt_reduce_size_str = NULL;
-static uint64_t opt_reduce_size = 0;
-
-static const char *opt_hotzone_size_str = NULL;
-static uint64_t opt_hotzone_size = 0;
-
-static const char *opt_device_size_str = NULL;
-static uint64_t opt_device_size = 0;
-
 /* do not set from command line, use helpers above */
 static int64_t opt_data_shift;
-
-static const char *opt_luks2_metadata_size_str = NULL;
-static uint64_t opt_luks2_metadata_size = 0;
-static const char *opt_luks2_keyslots_size_str = NULL;
-static uint64_t opt_luks2_keyslots_size = 0;
+static const char *device_type = "luks";
+static const char *set_pbkdf = NULL;
 
 static const char **action_argv;
 static int action_argc;
 static const char *null_action_argv[] = {NULL, NULL};
 
+void tools_cleanup(void)
+{
+       FREE_AND_NULL(opt_cipher);
+       FREE_AND_NULL(opt_keyslot_cipher);
+       FREE_AND_NULL(opt_hash);
+       FREE_AND_NULL(opt_json_file);
+       FREE_AND_NULL(opt_key_file);
+       FREE_AND_NULL(opt_keyfile_stdin);
+       FREE_AND_NULL(opt_master_key_file);
+       FREE_AND_NULL(opt_header_backup_file);
+       FREE_AND_NULL(opt_uuid);
+       FREE_AND_NULL(opt_header_device);
+       FREE_AND_NULL(opt_type);
+       FREE_AND_NULL(opt_pbkdf);
+       FREE_AND_NULL(opt_priority);
+       FREE_AND_NULL(opt_integrity);
+       FREE_AND_NULL(opt_key_description);
+       FREE_AND_NULL(opt_label);
+       FREE_AND_NULL(opt_subsystem);
+       FREE_AND_NULL(opt_active_name);
+       FREE_AND_NULL(opt_resilience_mode);
+       FREE_AND_NULL(opt_resilience_hash);
+       FREE_AND_NULL(opt_reduce_size_str);
+       FREE_AND_NULL(opt_hotzone_size_str);
+       FREE_AND_NULL(opt_device_size_str);
+       FREE_AND_NULL(opt_luks2_metadata_size_str);
+       FREE_AND_NULL(opt_luks2_keyslots_size_str);
+
+       while (opt_keyfiles_count)
+               free(opt_keyfiles[--opt_keyfiles_count]);
+}
+
 static const char *uuid_or_device_header(const char **data_device)
 {
        if (data_device)
@@ -182,6 +216,12 @@ static void _set_activation_flags(uint32_t *flags)
        if (opt_perf_submit_from_crypt_cpus)
                *flags |= CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS;
 
+       if (opt_perf_no_read_workqueue)
+               *flags |= CRYPT_ACTIVATE_NO_READ_WORKQUEUE;
+
+       if (opt_perf_no_write_workqueue)
+               *flags |= CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE;
+
        if (opt_integrity_nojournal)
                *flags |= CRYPT_ACTIVATE_NO_JOURNAL;
 
@@ -432,7 +472,7 @@ static int tcrypt_load(struct crypt_device *cd, struct crypt_params_tcrypt *para
                        unsigned long long tmp_pim_ull = 0;
 
                        r = tools_get_key(_("Enter VeraCrypt PIM: "),
-                                       CONST_CAST(char**)&tmp_pim_nptr,
+                                       &tmp_pim_nptr,
                                        &tmp_pim_size, 0, 0, opt_keyfile_stdin, opt_timeout,
                                        _verify_passphrase(0), 0, cd);
                        if (r < 0)
@@ -449,7 +489,7 @@ static int tcrypt_load(struct crypt_device *cd, struct crypt_params_tcrypt *para
                                log_err(_("Invalid PIM value: outside of range."));
                                r = -ERANGE;
                        }
-                       crypt_safe_free(CONST_CAST(char*)tmp_pim_nptr);
+                       crypt_safe_free(tmp_pim_nptr);
                        if (r < 0)
                                continue;
 
@@ -492,7 +532,7 @@ static int action_open_tcrypt(void)
 {
        struct crypt_device *cd = NULL;
        struct crypt_params_tcrypt params = {
-               .keyfiles = opt_keyfiles,
+               .keyfiles = CONST_CAST(const char **)opt_keyfiles,
                .keyfiles_count = opt_keyfiles_count,
                .flags = CRYPT_TCRYPT_LEGACY_MODES |
                         (opt_veracrypt ? CRYPT_TCRYPT_VERA_MODES : 0),
@@ -504,7 +544,8 @@ static int action_open_tcrypt(void)
 
        activated_name = opt_test_passphrase ? NULL : action_argv[1];
 
-       if ((r = crypt_init(&cd, action_argv[0])))
+       r = crypt_init_data_device(&cd, opt_header_device ?: action_argv[0], action_argv[0]);
+       if (r < 0)
                goto out;
 
        r = tcrypt_load(cd, &params);
@@ -610,15 +651,15 @@ static int action_tcryptDump(void)
 {
        struct crypt_device *cd = NULL;
        struct crypt_params_tcrypt params = {
-               .keyfiles = opt_keyfiles,
+               .keyfiles = CONST_CAST(const char **)opt_keyfiles,
                .keyfiles_count = opt_keyfiles_count,
                .flags = CRYPT_TCRYPT_LEGACY_MODES |
                         (opt_veracrypt ? CRYPT_TCRYPT_VERA_MODES : 0),
                .veracrypt_pim = (opt_veracrypt_pim > 0) ? opt_veracrypt_pim : 0,
        };
        int r;
-
-       if ((r = crypt_init(&cd, action_argv[0])))
+       r = crypt_init_data_device(&cd, opt_header_device ?: action_argv[0], action_argv[0]);
+       if (r < 0)
                goto out;
 
        r = tcrypt_load(cd, &params);
@@ -707,7 +748,9 @@ static int action_resize(void)
                r = crypt_activate_by_token(cd, NULL, opt_token, NULL,
                                            CRYPT_ACTIVATE_KEYRING_KEY);
                tools_keyslot_msg(r, UNLOCKED);
-               if (r < 0 && opt_token_only)
+               if (r >= 0)
+                       goto resize;
+               else if (opt_token_only)
                        goto out;
 
                r = tools_get_key(NULL, &password, &passwordLen,
@@ -723,7 +766,7 @@ static int action_resize(void)
                tools_keyslot_msg(r, UNLOCKED);
                crypt_safe_free(password);
        }
-
+resize:
        if (opt_device_size)
                opt_size = opt_device_size / SECTOR_SIZE;
 
@@ -815,11 +858,15 @@ static int action_status(void)
                                           (cad.flags & CRYPT_ACTIVATE_SUSPENDED) ? " (suspended)" : "");
                if (cad.flags & (CRYPT_ACTIVATE_ALLOW_DISCARDS|
                                 CRYPT_ACTIVATE_SAME_CPU_CRYPT|
-                                CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS))
-                       log_std("  flags:   %s%s%s\n",
+                                CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS|
+                                CRYPT_ACTIVATE_NO_READ_WORKQUEUE|
+                                CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE))
+                       log_std("  flags:   %s%s%s%s%s\n",
                                (cad.flags & CRYPT_ACTIVATE_ALLOW_DISCARDS) ? "discards " : "",
                                (cad.flags & CRYPT_ACTIVATE_SAME_CPU_CRYPT) ? "same_cpu_crypt " : "",
-                               (cad.flags & CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS) ? "submit_from_crypt_cpus" : "");
+                               (cad.flags & CRYPT_ACTIVATE_SUBMIT_FROM_CRYPT_CPUS) ? "submit_from_crypt_cpus " : "",
+                               (cad.flags & CRYPT_ACTIVATE_NO_READ_WORKQUEUE) ? "no_read_workqueue " : "",
+                               (cad.flags & CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE) ? "no_write_workqueue" : "");
        }
 out:
        crypt_free(cd);
@@ -949,10 +996,10 @@ static int action_benchmark(void)
        int i, r;
 
        log_std(_("# Tests are approximate using memory only (no storage IO).\n"));
-       if (opt_pbkdf || opt_hash) {
-               if (!opt_pbkdf && opt_hash)
-                       opt_pbkdf = CRYPT_KDF_PBKDF2;
-               r = action_benchmark_kdf(opt_pbkdf, opt_hash, key_size);
+       if (set_pbkdf || opt_hash) {
+               if (!set_pbkdf && opt_hash)
+                       set_pbkdf = CRYPT_KDF_PBKDF2;
+               r = action_benchmark_kdf(set_pbkdf, opt_hash, key_size);
        } else if (opt_cipher) {
                r = crypt_parse_name_and_mode(opt_cipher, cipher, NULL, cipher_mode);
                if (r < 0) {
@@ -993,8 +1040,10 @@ static int action_benchmark(void)
                                /* TRANSLATORS: The string is header of a table and must be exactly (right side) aligned. */
                                log_std(_("#     Algorithm |       Key |      Encryption |      Decryption\n"));
 
-                       snprintf(cipher, MAX_CIPHER_LEN, "%s-%s",
-                                bciphers[i].cipher, bciphers[i].mode);
+                       if (snprintf(cipher, MAX_CIPHER_LEN, "%s-%s",
+                                    bciphers[i].cipher, bciphers[i].mode) < 0)
+                               r = -EINVAL;
+
                        if (!r)
                                log_std("%15s  %9zub  %10.1f MiB/s  %10.1f MiB/s\n",
                                        cipher, bciphers[i].key_size*8, enc_mbr, dec_mbr);
@@ -1024,7 +1073,7 @@ static int set_pbkdf_params(struct crypt_device *cd, const char *dev_type)
        if (!pbkdf_default)
                return -EINVAL;
 
-       pbkdf.type = opt_pbkdf ?: pbkdf_default->type;
+       pbkdf.type = set_pbkdf ?: pbkdf_default->type;
        pbkdf.hash = opt_hash ?: pbkdf_default->hash;
        pbkdf.time_ms = (uint32_t)opt_iteration_time ?: pbkdf_default->time_ms;
        if (strcmp(pbkdf.type, CRYPT_KDF_PBKDF2)) {
@@ -1051,11 +1100,17 @@ static int set_keyslot_params(struct crypt_device *cd, int keyslot)
        if (!cipher)
                return -EINVAL;
 
+       if (crypt_is_cipher_null(cipher)) {
+               log_dbg("Keyslot %d uses cipher_null. Replacing with default encryption in new keyslot.", keyslot);
+               cipher = DEFAULT_LUKS2_KEYSLOT_CIPHER;
+               key_size = DEFAULT_LUKS2_KEYSLOT_KEYBITS / 8;
+       }
+
        if (crypt_keyslot_set_encryption(cd, cipher, key_size))
                return -EINVAL;
 
        /* if requested any of those just reinitialize context pbkdf */
-       if (opt_pbkdf || opt_hash || opt_pbkdf_iterations || opt_iteration_time)
+       if (set_pbkdf || opt_hash || opt_pbkdf_iterations || opt_iteration_time)
                return set_pbkdf_params(cd, CRYPT_LUKS2);
 
        if (crypt_keyslot_get_pbkdf(cd, keyslot, &pbkdf))
@@ -1066,24 +1121,63 @@ static int set_keyslot_params(struct crypt_device *cd, int keyslot)
        return crypt_set_pbkdf_type(cd, &pbkdf);
 }
 
-static int _do_luks2_reencrypt_recovery(struct crypt_device *cd)
+static int reencrypt_metadata_repair(struct crypt_device *cd)
+{
+       char *password;
+       size_t passwordLen;
+       int r;
+       struct crypt_params_reencrypt params = {
+               .flags = CRYPT_REENCRYPT_REPAIR_NEEDED
+       };
+
+       if (!opt_batch_mode &&
+           !yesDialog(_("Unprotected LUKS2 reencryption metadata detected. "
+                        "Please verify the reencryption operation is desirable (see luksDump output)\n"
+                        "and continue (upgrade metadata) only if you acknowledge the operation as genuine."),
+                      _("Operation aborted.\n")))
+               return -EINVAL;
+
+       r = tools_get_key(_("Enter passphrase to protect and uppgrade reencryption metadata: "),
+                         &password, &passwordLen, opt_keyfile_offset,
+                         opt_keyfile_size, opt_key_file, opt_timeout,
+                         _verify_passphrase(0), 0, cd);
+       if (r < 0)
+               return r;
+
+       r = crypt_reencrypt_init_by_passphrase(cd, NULL, password, passwordLen,
+                       opt_key_slot, opt_key_slot, NULL, NULL, &params);
+       tools_passphrase_msg(r);
+       if (r < 0)
+               goto out;
+
+       r = crypt_activate_by_passphrase(cd, NULL, opt_key_slot,
+                                        password, passwordLen, 0);
+       tools_passphrase_msg(r);
+       if (r >= 0)
+               r = 0;
+
+out:
+       crypt_safe_free(password);
+       return r;
+}
+
+static int luks2_reencrypt_repair(struct crypt_device *cd)
 {
        int r;
        size_t passwordLen;
+       const char *msg;
        char *password = NULL;
-       struct crypt_params_reencrypt recovery_params = {
-               .flags = CRYPT_REENCRYPT_RECOVERY
-       };
+       struct crypt_params_reencrypt params = {};
+
+       crypt_reencrypt_info ri = crypt_reencrypt_status(cd, &params);
+
+       if (params.flags & CRYPT_REENCRYPT_REPAIR_NEEDED)
+               return reencrypt_metadata_repair(cd);
 
-       crypt_reencrypt_info ri = crypt_reencrypt_status(cd, NULL);
        switch (ri) {
        case CRYPT_REENCRYPT_NONE:
-               /* fall through */
+               return 0;
        case CRYPT_REENCRYPT_CLEAN:
-               r = noDialog(_("Seems device does not require reencryption recovery.\n"
-                               "Do you want to proceed anyway?"), NULL);
-               if (!r)
-                       return 0;
                break;
        case CRYPT_REENCRYPT_CRASH:
                r = yesDialog(_("Really proceed with LUKS2 reencryption recovery?"),
@@ -1095,8 +1189,12 @@ static int _do_luks2_reencrypt_recovery(struct crypt_device *cd)
                return -EINVAL;
        }
 
-       r = tools_get_key(_("Enter passphrase for reencryption recovery: "),
-                         &password, &passwordLen, opt_keyfile_offset,
+       if (ri == CRYPT_REENCRYPT_CLEAN)
+               msg = _("Enter passphrase to verify reencryption metadata digest: ");
+       else
+               msg = _("Enter passphrase for reencryption recovery: ");
+
+       r = tools_get_key(msg, &password, &passwordLen, opt_keyfile_offset,
                          opt_keyfile_size, opt_key_file, opt_timeout,
                          _verify_passphrase(0), 0, cd);
        if (r < 0)
@@ -1107,8 +1205,14 @@ static int _do_luks2_reencrypt_recovery(struct crypt_device *cd)
        if (r < 0)
                goto out;
 
+       if (ri == CRYPT_REENCRYPT_CLEAN) {
+               r = 0;
+               goto out;
+       }
+
        r = crypt_reencrypt_init_by_passphrase(cd, NULL, password, passwordLen,
-                       opt_key_slot, opt_key_slot, NULL, NULL, &recovery_params);
+                       opt_key_slot, opt_key_slot, NULL, NULL,
+                       &(struct crypt_params_reencrypt){ .flags = CRYPT_REENCRYPT_RECOVERY });
        if (r > 0)
                r = 0;
 out:
@@ -1127,7 +1231,7 @@ static int action_luksRepair(void)
                goto out;
 
        crypt_set_log_callback(cd, quiet_log, NULL);
-       r = crypt_load(cd, luksType(opt_type), NULL);
+       r = crypt_load(cd, luksType(device_type), NULL);
        crypt_set_log_callback(cd, tool_log, NULL);
        if (r == 0) {
                log_verbose(_("No known problems detected for LUKS header."));
@@ -1141,10 +1245,11 @@ static int action_luksRepair(void)
        r = yesDialog(_("Really try to repair LUKS device header?"),
                       _("Operation aborted.\n")) ? 0 : -EINVAL;
        if (r == 0)
-               r = crypt_repair(cd, luksType(opt_type), NULL);
+               r = crypt_repair(cd, luksType(device_type), NULL);
 skip_repair:
+       /* Header is ok, check if reencryption metadata needs repair/recovery. */
        if (!r && crypt_get_type(cd) && !strcmp(crypt_get_type(cd), CRYPT_LUKS2))
-               r = _do_luks2_reencrypt_recovery(cd);
+               r = luks2_reencrypt_repair(cd);
 out:
        crypt_free(cd);
        return r;
@@ -1190,6 +1295,21 @@ static int strcmp_or_null(const char *str, const char *expected)
        return !str ? 0 : strcmp(str, expected);
 }
 
+static int get_adjusted_key_size(const char *cipher_mode, uint32_t default_size_bits, int integrity_keysize)
+{
+       uint32_t keysize_bits = opt_key_size;
+
+#ifdef ENABLE_LUKS_ADJUST_XTS_KEYSIZE
+       if (!opt_key_size && !strncmp(cipher_mode, "xts-", 4)) {
+               if (default_size_bits == 128)
+                       keysize_bits = 256;
+               else if (default_size_bits == 256)
+                       keysize_bits = 512;
+       }
+#endif
+       return (keysize_bits ?: default_size_bits) / 8 + integrity_keysize;
+}
+
 static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_passwordLen)
 {
        int r = -EINVAL, keysize, integrity_keysize = 0, fd, created = 0;
@@ -1213,7 +1333,7 @@ static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_
        };
        void *params;
 
-       type = luksType(opt_type);
+       type = luksType(device_type);
        if (!type)
                type = crypt_get_default_type();
 
@@ -1242,8 +1362,8 @@ static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_
        /* Create header file (must contain at least one sector)? */
        if (opt_header_device && stat(opt_header_device, &st) < 0 && errno == ENOENT) {
                if (!opt_batch_mode &&
-                   !yesDialog("Header file does not exist, do you want to create it?",
-                           _("Operation aborted.\n")))
+                   !yesDialog(_("Header file does not exist, do you want to create it?"),
+                              _("Operation aborted.\n")))
                    return -EPERM;
 
                log_dbg("Creating header file.");
@@ -1281,7 +1401,7 @@ static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_
        }
 
        /* Never call pwquality if using null cipher */
-       if (tools_is_cipher_null(cipher))
+       if (crypt_is_cipher_null(cipher))
                opt_force_password = 1;
 
        if ((r = crypt_init(&cd, header_device))) {
@@ -1322,15 +1442,7 @@ static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_
                        goto out;
        }
 
-#ifdef ENABLE_LUKS_ADJUST_XTS_KEYSIZE
-       if (!opt_key_size && !strncmp(cipher_mode, "xts-", 4)) {
-               if (DEFAULT_LUKS1_KEYBITS == 128)
-                       opt_key_size = 256;
-               else if (DEFAULT_LUKS1_KEYBITS == 256)
-                       opt_key_size = 512;
-       }
-#endif
-       keysize = (opt_key_size ?: DEFAULT_LUKS1_KEYBITS) / 8 + integrity_keysize;
+       keysize = get_adjusted_key_size(cipher_mode, DEFAULT_LUKS1_KEYBITS, integrity_keysize);
 
        if (opt_random)
                crypt_set_rng_type(cd, CRYPT_RNG_RANDOM);
@@ -1429,7 +1541,7 @@ static int action_open_luks(void)
                if ((r = crypt_init_data_device(&cd, header_device, data_device)))
                        goto out;
 
-               if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+               if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                        log_err(_("Device %s is not a valid LUKS device."),
                                header_device);
                        goto out;
@@ -1555,7 +1667,7 @@ static int action_luksKillSlot(void)
 
        crypt_set_confirm_callback(cd, yesDialog, NULL);
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -1612,7 +1724,7 @@ static int action_luksRemoveKey(void)
 
        crypt_set_confirm_callback(cd, yesDialog, NULL);
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -1679,7 +1791,7 @@ static int luksAddUnboundKey(void)
                goto out;
 
        /* Never call pwquality if using null cipher */
-       if (tools_is_cipher_null(crypt_get_cipher(cd)))
+       if (crypt_is_cipher_null(crypt_get_cipher(cd)))
                opt_force_password = 1;
 
        keysize = opt_key_size / 8;
@@ -1735,7 +1847,7 @@ static int action_luksAddKey(void)
 
        crypt_set_confirm_callback(cd, yesDialog, NULL);
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -1746,7 +1858,7 @@ static int action_luksAddKey(void)
                goto out;
 
        /* Never call pwquality if using null cipher */
-       if (tools_is_cipher_null(crypt_get_cipher(cd)))
+       if (crypt_is_cipher_null(crypt_get_cipher(cd)))
                opt_force_password = 1;
 
        keysize = crypt_get_volume_key_size(cd);
@@ -1838,7 +1950,7 @@ static int action_luksChangeKey(void)
        if ((r = crypt_init(&cd, uuid_or_device_header(NULL))))
                goto out;
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -1849,7 +1961,7 @@ static int action_luksChangeKey(void)
                goto out;
 
        /* Never call pwquality if using null cipher */
-       if (tools_is_cipher_null(crypt_get_cipher(cd)))
+       if (crypt_is_cipher_null(crypt_get_cipher(cd)))
                opt_force_password = 1;
 
        r = set_pbkdf_params(cd, crypt_get_type(cd));
@@ -1956,7 +2068,7 @@ static int action_isLuks(void)
                goto out;
 
        crypt_set_log_callback(cd, quiet_log, NULL);
-       r = crypt_load(cd, luksType(opt_type), NULL);
+       r = crypt_load(cd, luksType(device_type), NULL);
 out:
        crypt_free(cd);
        return r;
@@ -1973,7 +2085,7 @@ static int action_luksUUID(void)
 
        crypt_set_confirm_callback(cd, yesDialog, _("Operation aborted.\n"));
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL)))
+       if ((r = crypt_load(cd, luksType(device_type), NULL)))
                goto out;
 
        if (opt_uuid)
@@ -2132,7 +2244,7 @@ static int action_luksDump(void)
        if ((r = crypt_init(&cd, uuid_or_device_header(NULL))))
                goto out;
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -2155,8 +2267,11 @@ static int action_luksSuspend(void)
        int r;
 
        r = crypt_init_by_name_and_header(&cd, action_argv[0], uuid_or_device(opt_header_device));
-       if (!r)
+       if (!r) {
                r = crypt_suspend(cd, action_argv[0]);
+               if (r == -ENODEV)
+                       log_err(_("%s is not active %s device name."), action_argv[0], "LUKS");
+       }
 
        crypt_free(cd);
        return r;
@@ -2168,12 +2283,25 @@ static int action_luksResume(void)
        char *password = NULL;
        size_t passwordLen;
        int r, tries;
+       const char *type, *req_type = luksType(device_type);
+
+       if (req_type && strcmp(req_type, CRYPT_LUKS1) && strcmp(req_type, CRYPT_LUKS2))
+               return -EINVAL;
 
        if ((r = crypt_init_by_name_and_header(&cd, action_argv[0], uuid_or_device(opt_header_device))))
+               return r;
+
+       r = -EINVAL;
+       type = crypt_get_type(cd);
+       if (!type || (strcmp(type, CRYPT_LUKS1) && strcmp(type, CRYPT_LUKS2))) {
+               log_err(_("%s is not active LUKS device name or header is missing."), action_argv[0]);
                goto out;
+       }
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL)))
+       if (req_type && strcmp(req_type, crypt_get_type(cd))) {
+               log_err(_("%s is not active %s device name."), action_argv[0], req_type);
                goto out;
+       }
 
        tries = (tools_is_stdin(opt_key_file) && isatty(STDIN_FILENO)) ? opt_tries : 1;
        do {
@@ -2277,38 +2405,38 @@ static const char *_get_device_type(void)
 
 static int action_open(void)
 {
-       if (opt_refresh && !opt_type)
+       if (opt_refresh && !device_type)
                /* read device type from active mapping */
-               opt_type = _get_device_type();
+               device_type = _get_device_type();
 
-       if (!opt_type)
+       if (!device_type)
                return -EINVAL;
 
-       if (!strcmp(opt_type, "luks") ||
-           !strcmp(opt_type, "luks1") ||
-           !strcmp(opt_type, "luks2")) {
+       if (!strcmp(device_type, "luks") ||
+           !strcmp(device_type, "luks1") ||
+           !strcmp(device_type, "luks2")) {
                if (action_argc < 2 && (!opt_test_passphrase && !opt_refresh))
                        goto args;
                return action_open_luks();
-       } else if (!strcmp(opt_type, "plain")) {
+       } else if (!strcmp(device_type, "plain")) {
                if (action_argc < 2 && !opt_refresh)
                        goto args;
                return action_open_plain();
-       } else if (!strcmp(opt_type, "loopaes")) {
+       } else if (!strcmp(device_type, "loopaes")) {
                if (action_argc < 2 && !opt_refresh)
                        goto args;
                return action_open_loopaes();
-       } else if (!strcmp(opt_type, "tcrypt")) {
+       } else if (!strcmp(device_type, "tcrypt")) {
                if (action_argc < 2 && !opt_test_passphrase)
                        goto args;
                return action_open_tcrypt();
-       } else if (!strcmp(opt_type, "bitlk")) {
+       } else if (!strcmp(device_type, "bitlk")) {
                if (action_argc < 2 && !opt_test_passphrase)
                        goto args;
                return action_open_bitlk();
        }
 
-       log_err(_("Unrecognized metadata device type %s."), opt_type);
+       log_err(_("Unrecognized metadata device type %s."), device_type);
        return -EINVAL;
 args:
        log_err(_("Command requires device and mapped name as arguments."));
@@ -2327,7 +2455,7 @@ static int action_luksErase(void)
 
        crypt_set_confirm_callback(cd, yesDialog, NULL);
 
-       if ((r = crypt_load(cd, luksType(opt_type), NULL))) {
+       if ((r = crypt_load(cd, luksType(device_type), NULL))) {
                log_err(_("Device %s is not a valid LUKS device."),
                        uuid_or_device_header(NULL));
                goto out;
@@ -2347,8 +2475,10 @@ static int action_luksErase(void)
 
        /* Safety check */
        max = crypt_keyslot_max(crypt_get_type(cd));
-       if (max <= 0)
-               return -EINVAL;
+       if (max <= 0) {
+               r = -EINVAL;
+               goto out;
+       }
 
        for (i = 0; i < max; i++) {
                ki = crypt_keyslot_status(cd, i);
@@ -2372,9 +2502,9 @@ static int action_luksConvert(void)
        const char *to_type, *from_type;
        int r;
 
-       if (!strcmp(opt_type, "luks2")) {
+       if (!strcmp(device_type, "luks2")) {
                to_type = CRYPT_LUKS2;
-       } else if (!strcmp(opt_type, "luks1")) {
+       } else if (!strcmp(device_type, "luks1")) {
                to_type = CRYPT_LUKS1;
        } else {
                log_err(_("Invalid LUKS type, only luks1 and luks2 are supported."));
@@ -2693,8 +2823,8 @@ static int action_reencrypt_load(struct crypt_device *cd)
        char dm_name[PATH_MAX] = {}, *password = NULL;
        const char *active_name = NULL;
        struct crypt_params_reencrypt params = {
-               .resilience = opt_resilience_mode,
-               .hash = opt_resilience_hash,
+               .resilience = opt_resilience_mode ?: "checksum",
+               .hash = opt_resilience_hash ?: "sha256",
                .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE,
                .device_size = opt_device_size / SECTOR_SIZE,
                .flags = CRYPT_REENCRYPT_RESUME_ONLY
@@ -2738,8 +2868,8 @@ static int action_encrypt_luks2(struct crypt_device **cd)
        struct crypt_params_reencrypt params = {
                .mode = CRYPT_REENCRYPT_ENCRYPT,
                .direction = opt_data_shift < 0 ? CRYPT_REENCRYPT_BACKWARD : CRYPT_REENCRYPT_FORWARD,
-               .resilience = opt_resilience_mode,
-               .hash = opt_resilience_hash,
+               .resilience = opt_resilience_mode ?: "checksum",
+               .hash = opt_resilience_hash ?: "sha256",
                .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE,
                .device_size = opt_device_size / SECTOR_SIZE,
                .luks2 = &luks2_params,
@@ -2748,7 +2878,7 @@ static int action_encrypt_luks2(struct crypt_device **cd)
 
        _set_reencryption_flags(&params.flags);
 
-       type = luksType(opt_type);
+       type = luksType(device_type);
        if (!type)
                type = crypt_get_default_type();
 
@@ -2788,7 +2918,8 @@ static int action_encrypt_luks2(struct crypt_device **cd)
        if (!opt_uuid) {
                uuid_generate(uuid);
                uuid_unparse(uuid, uuid_str);
-               opt_uuid = uuid_str;
+               if (!(opt_uuid = strdup(uuid_str)))
+                       return -ENOMEM;
        }
 
        /* Check the data device is not LUKS device already */
@@ -2809,7 +2940,10 @@ static int action_encrypt_luks2(struct crypt_device **cd)
        }
 
        if (!opt_header_device) {
-               snprintf(header_file, sizeof(header_file), "LUKS2-temp-%s.new", opt_uuid);
+               r = snprintf(header_file, sizeof(header_file), "LUKS2-temp-%s.new", opt_uuid);
+               if (r < 0 || (size_t)r >= sizeof(header_file))
+                       return -EINVAL;
+
                fd = open(header_file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IWUSR);
                if (fd == -1) {
                        if (errno == EEXIST)
@@ -2827,7 +2961,10 @@ static int action_encrypt_luks2(struct crypt_device **cd)
                        goto err;
                }
 
-               opt_header_device = header_file;
+               if (!(opt_header_device = strdup(header_file))) {
+                       r = -ENOMEM;
+                       goto err;
+               }
                /*
                 * FIXME: just override offset here, but we should support both.
                 * offset and implicit offset via data shift (lvprepend?)
@@ -2913,14 +3050,20 @@ static int action_decrypt_luks2(struct crypt_device *cd)
        struct crypt_params_reencrypt params = {
                .mode = CRYPT_REENCRYPT_DECRYPT,
                .direction = opt_data_shift > 0 ? CRYPT_REENCRYPT_FORWARD : CRYPT_REENCRYPT_BACKWARD,
-               .resilience = opt_data_shift ? "datashift" : opt_resilience_mode,
-               .hash = opt_resilience_hash,
+               .resilience = opt_data_shift ? "datashift" : (opt_resilience_mode ?: "checksum"),
+               .hash = opt_resilience_hash ?: "sha256",
                .data_shift = imaxabs(opt_data_shift) / SECTOR_SIZE,
                .device_size = opt_device_size / SECTOR_SIZE,
                .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE,
        };
        size_t passwordLen;
 
+       if (!crypt_get_metadata_device_name(cd) || !crypt_get_device_name(cd) ||
+           !strcmp(crypt_get_metadata_device_name(cd), crypt_get_device_name(cd))) {
+               log_err(_("LUKS2 decryption is supported with detached header device only."));
+               return -ENOTSUP;
+       }
+
        _set_reencryption_flags(&params.flags);
 
        r = tools_get_key(NULL, &password, &passwordLen,
@@ -3085,7 +3228,8 @@ static int fill_keyslot_passwords(struct crypt_device *cd,
 
        if (opt_key_slot == CRYPT_ANY_SLOT) {
                for (i = 0; (size_t)i < kp_size; i++) {
-                       snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %d: "), i);
+                       if (snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %d: "), i) < 0)
+                               return -EINVAL;
                        r = init_passphrase(kp, kp_size, cd, msg, i);
                        if (r == -ENOENT)
                                r = 0;
@@ -3093,7 +3237,8 @@ static int fill_keyslot_passwords(struct crypt_device *cd,
                                break;
                }
        } else {
-               snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %u: "), opt_key_slot);
+               if (snprintf(msg, sizeof(msg), _("Enter passphrase for key slot %u: "), opt_key_slot) < 0)
+                       return -EINVAL;
                r = init_passphrase(kp, kp_size, cd, msg, opt_key_slot);
        }
 
@@ -3119,15 +3264,15 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
 {
        size_t i, vk_size, kp_size;
        int r, keyslot_old = CRYPT_ANY_SLOT, keyslot_new = CRYPT_ANY_SLOT, key_size;
-       char dm_name[PATH_MAX], cipher [MAX_CIPHER_LEN], mode[MAX_CIPHER_LEN], *vk;
+       char dm_name[PATH_MAX], cipher [MAX_CIPHER_LEN], mode[MAX_CIPHER_LEN], *vk = NULL;
        const char *active_name = NULL;
        struct keyslot_passwords *kp;
        struct crypt_params_luks2 luks2_params = {};
        struct crypt_params_reencrypt params = {
                .mode = CRYPT_REENCRYPT_REENCRYPT,
                .direction = opt_data_shift < 0 ? CRYPT_REENCRYPT_BACKWARD : CRYPT_REENCRYPT_FORWARD,
-               .resilience = opt_data_shift ? "datashift" : opt_resilience_mode,
-               .hash = opt_resilience_hash,
+               .resilience = opt_data_shift ? "datashift" : (opt_resilience_mode ?: "checksum"),
+               .hash = opt_resilience_hash ?: "sha256",
                .data_shift = imaxabs(opt_data_shift) / SECTOR_SIZE,
                .max_hotzone_size = opt_hotzone_size / SECTOR_SIZE,
                .device_size = opt_device_size / SECTOR_SIZE,
@@ -3136,6 +3281,11 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
 
        _set_reencryption_flags(&params.flags);
 
+       if (!opt_cipher && crypt_is_cipher_null(crypt_get_cipher(cd))) {
+               opt_cipher = strdup(DEFAULT_CIPHER(LUKS1));
+               log_std(_("Switching data encryption cipher to %s.\n"), opt_cipher);
+       }
+
        if (!opt_cipher) {
                strncpy(cipher, crypt_get_cipher(cd), MAX_CIPHER_LEN - 1);
                strncpy(mode, crypt_get_cipher_mode(cd), MAX_CIPHER_LEN - 1);
@@ -3152,15 +3302,14 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
        if (r)
                return r;
 
-       if (opt_key_size)
-               key_size = opt_key_size / 8;
-       else if (opt_cipher)
-               key_size = DEFAULT_LUKS1_KEYBITS / 8;
+       if (opt_key_size || opt_cipher)
+               key_size = get_adjusted_key_size(mode, DEFAULT_LUKS1_KEYBITS, 0);
        else
                key_size = crypt_get_volume_key_size(cd);
 
        if (!key_size)
                return -EINVAL;
+       vk_size = key_size;
 
        r = crypt_keyslot_max(CRYPT_LUKS2);
        if (r < 0)
@@ -3175,11 +3324,11 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
        if (r)
                goto err;
 
-       vk_size = key_size;
-       vk = crypt_safe_alloc(vk_size);
-       if (!vk) {
-               r = -ENOMEM;
-               goto err;
+       if (opt_master_key_file) {
+               r = tools_read_mk(opt_master_key_file, &vk, key_size);
+
+               if (r < 0)
+                       goto err;
        }
 
        r = -ENOENT;
@@ -3189,7 +3338,7 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
                        r = set_keyslot_params(cd, i);
                        if (r < 0)
                                break;
-                       r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, NULL, key_size,
+                       r = crypt_keyslot_add_by_key(cd, CRYPT_ANY_SLOT, vk, key_size,
                                        kp[i].password, kp[i].passwordLen, CRYPT_VOLUME_KEY_NO_SEGMENT);
                        tools_keyslot_msg(r, CREATED);
                        if (r < 0)
@@ -3198,9 +3347,17 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
                        kp[i].new = r;
                        keyslot_new = r;
                        keyslot_old = i;
-                       r = crypt_volume_key_get(cd, keyslot_new, vk, &vk_size, kp[i].password, kp[i].passwordLen);
-                       if (r < 0)
-                               break;
+                       if (!vk) {
+                               /* key generated in crypt_keyslot_add_by_key() call above */
+                               vk = crypt_safe_alloc(key_size);
+                               if (!vk) {
+                                       r = -ENOMEM;
+                                       break;
+                               }
+                               r = crypt_volume_key_get(cd, keyslot_new, vk, &vk_size, kp[i].password, kp[i].passwordLen);
+                               if (r < 0)
+                                       break;
+                       }
                        r = assign_tokens(cd, i, r);
                        if (r < 0)
                                break;
@@ -3220,8 +3377,6 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
                }
        }
 
-       crypt_safe_free(vk);
-
        if (r < 0)
                goto err;
 
@@ -3241,6 +3396,7 @@ static int action_reencrypt_luks2(struct crypt_device *cd)
                        kp[keyslot_old].passwordLen, keyslot_old, kp[keyslot_old].new,
                        cipher, mode, &params);
 err:
+       crypt_safe_free(vk);
        for (i = 0; i < kp_size; i++) {
                crypt_safe_free(kp[i].password);
                if (r < 0 && kp[i].new >= 0 &&
@@ -3430,10 +3586,12 @@ static void help(poptContext popt_context,
 #if defined(ENABLE_LUKS_ADJUST_XTS_KEYSIZE) && DEFAULT_LUKS1_KEYBITS != 512
                log_std(_("\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n"));
 #endif
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else if (key->shortName == 'V') {
                log_std("%s %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else
@@ -3474,7 +3632,6 @@ static int run_action(struct action_type *action)
 
 int main(int argc, const char **argv)
 {
-       static char *popt_tmp;
        static struct poptOption popt_help_options[] = {
                { NULL,    '\0', POPT_ARG_CALLBACK, help, 0, NULL,                         NULL },
                { "help",  '?',  POPT_ARG_NONE,     NULL, 0, N_("Show this help message"), NULL },
@@ -3490,19 +3647,19 @@ int main(int argc, const char **argv)
                { "cipher",            'c',  POPT_ARG_STRING, &opt_cipher,              0, N_("The cipher used to encrypt the disk (see /proc/crypto)"), NULL },
                { "hash",              'h',  POPT_ARG_STRING, &opt_hash,                0, N_("The hash used to create the encryption key from the passphrase"), NULL },
                { "verify-passphrase", 'y',  POPT_ARG_NONE, &opt_verify_passphrase,     0, N_("Verifies the passphrase by asking for it twice"), NULL },
-               { "key-file",          'd',  POPT_ARG_STRING, &opt_key_file,            6, N_("Read the key from a file"), NULL },
+               { "key-file",          'd',  POPT_ARG_STRING, NULL,                     6, N_("Read the key from a file"), NULL },
                { "master-key-file",  '\0',  POPT_ARG_STRING, &opt_master_key_file,     0, N_("Read the volume (master) key from file."), NULL },
                { "dump-master-key",  '\0',  POPT_ARG_NONE, &opt_dump_master_key,       0, N_("Dump volume (master) key instead of keyslots info"), NULL },
                { "key-size",          's',  POPT_ARG_INT, &opt_key_size,               0, N_("The size of the encryption key"), N_("BITS") },
                { "keyfile-size",      'l',  POPT_ARG_LONG, &opt_keyfile_size,          0, N_("Limits the read from keyfile"), N_("bytes") },
-               { "keyfile-offset",   '\0',  POPT_ARG_STRING, &popt_tmp,                4, N_("Number of bytes to skip in keyfile"), N_("bytes") },
+               { "keyfile-offset",   '\0',  POPT_ARG_STRING, NULL,                     4, N_("Number of bytes to skip in keyfile"), N_("bytes") },
                { "new-keyfile-size", '\0',  POPT_ARG_LONG, &opt_new_keyfile_size,      0, N_("Limits the read from newly added keyfile"), N_("bytes") },
-               { "new-keyfile-offset",'\0', POPT_ARG_STRING, &popt_tmp,                5, N_("Number of bytes to skip in newly added keyfile"), N_("bytes") },
+               { "new-keyfile-offset",'\0', POPT_ARG_STRING, NULL,                     5, N_("Number of bytes to skip in newly added keyfile"), N_("bytes") },
                { "key-slot",          'S',  POPT_ARG_INT, &opt_key_slot,               0, N_("Slot number for new key (default is first free)"), NULL },
-               { "size",              'b',  POPT_ARG_STRING, &popt_tmp,                1, N_("The size of the device"), N_("SECTORS") },
+               { "size",              'b',  POPT_ARG_STRING, NULL,                     1, N_("The size of the device"), N_("SECTORS") },
                { "device-size",      '\0',  POPT_ARG_STRING, &opt_device_size_str,     0, N_("Use only specified device size (ignore rest of device). DANGEROUS!"), N_("bytes") },
-               { "offset",            'o',  POPT_ARG_STRING, &popt_tmp,                2, N_("The start offset in the backend device"), N_("SECTORS") },
-               { "skip",              'p',  POPT_ARG_STRING, &popt_tmp,                3, N_("How many sectors of the encrypted data to skip at the beginning"), N_("SECTORS") },
+               { "offset",            'o',  POPT_ARG_STRING, NULL,                     2, N_("The start offset in the backend device"), N_("SECTORS") },
+               { "skip",              'p',  POPT_ARG_STRING, NULL,                     3, N_("How many sectors of the encrypted data to skip at the beginning"), N_("SECTORS") },
                { "readonly",          'r',  POPT_ARG_NONE, &opt_readonly,              0, N_("Create a readonly mapping"), NULL },
                { "batch-mode",        'q',  POPT_ARG_NONE, &opt_batch_mode,            0, N_("Do not ask for confirmation"), NULL },
                { "timeout",           't',  POPT_ARG_INT, &opt_timeout,                0, N_("Timeout for interactive passphrase prompt (in seconds)"), N_("secs") },
@@ -3527,6 +3684,8 @@ int main(int argc, const char **argv)
                { "force-password",    '\0', POPT_ARG_NONE, &opt_force_password,        0, N_("Disable password quality check (if enabled)"), NULL },
                { "perf-same_cpu_crypt",'\0', POPT_ARG_NONE, &opt_perf_same_cpu_crypt,  0, N_("Use dm-crypt same_cpu_crypt performance compatibility option"), NULL },
                { "perf-submit_from_crypt_cpus",'\0', POPT_ARG_NONE, &opt_perf_submit_from_crypt_cpus,0,N_("Use dm-crypt submit_from_crypt_cpus performance compatibility option"), NULL },
+               { "perf-no_read_workqueue",'\0', POPT_ARG_NONE, &opt_perf_no_read_workqueue,0,N_("Bypass dm-crypt workqueue and process read requests synchronously"), NULL },
+               { "perf-no_write_workqueue",'\0', POPT_ARG_NONE, &opt_perf_no_write_workqueue,0,N_("Bypass dm-crypt workqueue and process write requests synchronously"), NULL },
                { "deferred",          '\0', POPT_ARG_NONE, &opt_deferred_remove,       0, N_("Device removal is deferred until the last user closes it"), NULL },
                { "serialize-memory-hard-pbkdf", '\0', POPT_ARG_NONE, &opt_serialize_memory_hard_pbkdf, 0, N_("Use global lock to serialize memory hard PBKDF (OOM workaround)"), NULL },
                { "iter-time",         'i',  POPT_ARG_INT, &opt_iteration_time,         0, N_("PBKDF iteration time for LUKS (in ms)"), N_("msecs") },
@@ -3584,25 +3743,29 @@ int main(int argc, const char **argv)
 
        while((r = poptGetNextOpt(popt_context)) > 0) {
                unsigned long long ull_value;
-               char *endp;
+               char *endp, *str = poptGetOptArg(popt_context);
 
                if (r == 6) {
-                       const char *kf = poptGetOptArg(popt_context);
-                       if (tools_is_stdin(kf))
-                               opt_keyfile_stdin = kf;
-                       else if (opt_keyfiles_count < MAX_KEYFILES)
-                               opt_keyfiles[opt_keyfiles_count++] = kf;
+                       free(opt_key_file);
+                       opt_key_file = str;
+                       if (tools_is_stdin(str)) {
+                               free(opt_keyfile_stdin);
+                               opt_keyfile_stdin = strdup(str);
+                       } else if (opt_keyfiles_count < MAX_KEYFILES)
+                               opt_keyfiles[opt_keyfiles_count++] = strdup(str);
                        total_keyfiles++;
                        continue;
                }
 
                errno = 0;
-               ull_value = strtoull(popt_tmp, &endp, 0);
-               if (*endp || !*popt_tmp || !isdigit(*popt_tmp) ||
+               ull_value = strtoull(str, &endp, 0);
+               if (*endp || !*str || !isdigit(*str) ||
                    (errno == ERANGE && ull_value == ULLONG_MAX) ||
                    (errno != 0 && ull_value == 0))
                        r = POPT_ERROR_BADNUMBER;
 
+               free(str);
+
                switch(r) {
                        case 1:
                                opt_size = ull_value;
@@ -3653,26 +3816,26 @@ int main(int argc, const char **argv)
                        action_argv[1] = tmp;
                }
                aname = "open";
-               opt_type = "plain";
+               device_type = "plain";
        } else if (!strcmp(aname, "plainOpen")) {
                aname = "open";
-               opt_type = "plain";
+               device_type = "plain";
        } else if (!strcmp(aname, "luksOpen")) {
                aname = "open";
-               opt_type = "luks";
+               device_type = "luks";
        } else if (!strcmp(aname, "loopaesOpen")) {
                aname = "open";
-               opt_type = "loopaes";
+               device_type = "loopaes";
        } else if (!strcmp(aname, "tcryptOpen")) {
                aname = "open";
-               opt_type = "tcrypt";
+               device_type = "tcrypt";
        } else if (!strcmp(aname, "bitlkOpen")) {
                aname = "open";
-               opt_type = "bitlk";
+               device_type = "bitlk";
        } else if (!strcmp(aname, "tcryptDump")) {
-               opt_type = "tcrypt";
+               device_type = "tcrypt";
        } else if (!strcmp(aname, "bitlkDump")) {
-               opt_type = "bitlk";
+               device_type = "bitlk";
        } else if (!strcmp(aname, "remove") ||
                   !strcmp(aname, "plainClose") ||
                   !strcmp(aname, "luksClose") ||
@@ -3682,18 +3845,19 @@ int main(int argc, const char **argv)
                aname = "close";
        } else if (!strcmp(aname, "luksErase")) {
                aname = "erase";
-               opt_type = "luks";
+               device_type = "luks";
        } else if (!strcmp(aname, "luksConfig")) {
                aname = "config";
-               opt_type = "luks2";
+               device_type = "luks2";
        } else if (!strcmp(aname, "refresh")) {
                aname = "open";
                opt_refresh = 1;
-       }
+       } else if (opt_type)
+               device_type = opt_type;
 
        /* ignore user supplied type and query device type instead */
        if (opt_refresh)
-               opt_type = NULL;
+               device_type = NULL;
 
        for(action = action_types; action->type; action++)
                if (strcmp(action->type, aname) == 0)
@@ -3718,7 +3882,7 @@ int main(int argc, const char **argv)
                      _("Option --deferred is allowed only for close command."),
                      poptGetInvocationName(popt_context));
 
-       if (opt_shared && (strcmp(aname, "open") || strcmp_or_null(opt_type, "plain")))
+       if (opt_shared && (strcmp(aname, "open") || strcmp_or_null(device_type, "plain")))
                usage(popt_context, EXIT_FAILURE,
                      _("Option --shared is allowed only for open of plain device."),
                      poptGetInvocationName(popt_context));
@@ -3770,8 +3934,8 @@ int main(int argc, const char **argv)
                      _("Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations."),
                      poptGetInvocationName(popt_context));
 
-       if (opt_test_passphrase && (strcmp(aname, "open") || !opt_type ||
-           (strncmp(opt_type, "luks", 4) && strcmp(opt_type, "tcrypt") && strcmp(opt_type, "bitlk"))))
+       if (opt_test_passphrase && (strcmp(aname, "open") || !device_type ||
+           (strncmp(device_type, "luks", 4) && strcmp(device_type, "tcrypt") && strcmp(device_type, "bitlk"))))
                usage(popt_context, EXIT_FAILURE,
                      _("Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices."),
                      poptGetInvocationName(popt_context));
@@ -3793,7 +3957,7 @@ int main(int argc, const char **argv)
                if (opt_key_file)
                        log_err(_("Option --key-file takes precedence over specified key file argument."));
                else
-                       opt_key_file = action_argv[1];
+                       opt_key_file = strdup(action_argv[1]);
        }
 
        if (opt_keyfile_size < 0 || opt_new_keyfile_size < 0 || opt_key_size < 0)
@@ -3801,7 +3965,7 @@ int main(int argc, const char **argv)
                      _("Negative number for option not permitted."),
                      poptGetInvocationName(popt_context));
 
-       if (total_keyfiles > 1 && (strcmp_or_null(opt_type, "tcrypt")))
+       if (total_keyfiles > 1 && (strcmp_or_null(device_type, "tcrypt")))
                usage(popt_context, EXIT_FAILURE, _("Only one --key-file argument is allowed."),
                      poptGetInvocationName(popt_context));
 
@@ -3839,20 +4003,20 @@ int main(int argc, const char **argv)
                      poptGetInvocationName(popt_context));
 
        if (opt_skip && (strcmp(aname, "open") ||
-           (strcmp_or_null(opt_type, "plain") && strcmp(opt_type, "loopaes"))))
+           (strcmp_or_null(device_type, "plain") && strcmp(device_type, "loopaes"))))
                usage(popt_context, EXIT_FAILURE,
                _("Option --skip is supported only for open of plain and loopaes devices."),
                poptGetInvocationName(popt_context));
 
        if (opt_offset && ((strcmp(aname, "reencrypt") && strcmp(aname, "open") && strcmp(aname, "luksFormat")) ||
-           (!strcmp(aname, "open") && strcmp_or_null(opt_type, "plain") && strcmp(opt_type, "loopaes")) ||
-           (!strcmp(aname, "luksFormat") && opt_type && strncmp(opt_type, "luks", 4))))
+           (!strcmp(aname, "open") && strcmp_or_null(device_type, "plain") && strcmp(device_type, "loopaes")) ||
+           (!strcmp(aname, "luksFormat") && device_type && strncmp(device_type, "luks", 4))))
                usage(popt_context, EXIT_FAILURE,
                _("Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption."),
                poptGetInvocationName(popt_context));
 
        if ((opt_tcrypt_hidden || opt_tcrypt_system || opt_tcrypt_backup) && strcmp(aname, "tcryptDump") &&
-           (strcmp(aname, "open") || !opt_type || strcmp(opt_type, "tcrypt")))
+           (strcmp(aname, "open") || !device_type || strcmp(device_type, "tcrypt")))
                usage(popt_context, EXIT_FAILURE,
                _("Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device."),
                poptGetInvocationName(popt_context));
@@ -3862,7 +4026,7 @@ int main(int argc, const char **argv)
                _("Option --tcrypt-hidden cannot be combined with --allow-discards."),
                poptGetInvocationName(popt_context));
 
-       if (opt_veracrypt && (!opt_type || strcmp(opt_type, "tcrypt")))
+       if (opt_veracrypt && (!device_type || strcmp(device_type, "tcrypt")))
                usage(popt_context, EXIT_FAILURE,
                _("Option --veracrypt is supported only for TCRYPT device type."),
                poptGetInvocationName(popt_context));
@@ -3901,7 +4065,7 @@ int main(int argc, const char **argv)
                _("Keyslot specification is required."),
                poptGetInvocationName(popt_context));
 
-       if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &opt_pbkdf))
+       if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &set_pbkdf))
                usage(popt_context, EXIT_FAILURE,
                _("Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."),
                poptGetInvocationName(popt_context));
@@ -3912,7 +4076,7 @@ int main(int argc, const char **argv)
                poptGetInvocationName(popt_context));
 
        if (opt_sector_size && strcmp(aname, "reencrypt") && strcmp(aname, "luksFormat") &&
-           (strcmp(aname, "open") || strcmp_or_null(opt_type, "plain")))
+           (strcmp(aname, "open") || strcmp_or_null(device_type, "plain")))
                usage(popt_context, EXIT_FAILURE,
                      _("Sector size option is not supported for this command."),
                      poptGetInvocationName(popt_context));
@@ -3958,6 +4122,7 @@ int main(int argc, const char **argv)
 
        if (opt_disable_locks && crypt_metadata_locking(NULL, 0)) {
                log_std(_("Cannot disable metadata locking."));
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_FAILURE);
        }
@@ -4015,6 +4180,7 @@ int main(int argc, const char **argv)
                      poptGetInvocationName(popt_context));
 
        r = run_action(action);
+       tools_cleanup();
        poptFreeContext(popt_context);
        return r;
 }
index 1afcf43..ea5700d 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -24,6 +24,7 @@
 #ifndef CRYPTSETUP_H
 #define CRYPTSETUP_H
 
+#include <stdbool.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -97,7 +98,6 @@ int tools_get_key(const char *prompt,
 void tools_passphrase_msg(int r);
 int tools_is_stdin(const char *key_file);
 int tools_string_to_size(struct crypt_device *cd, const char *s, uint64_t *size);
-int tools_is_cipher_null(const char *cipher);
 
 void tools_clear_line(void);
 
@@ -116,6 +116,11 @@ int tools_wipe_all_signatures(const char *path);
 int tools_lookup_crypt_device(struct crypt_device *cd, const char *type,
                const char *data_device_path, char *name, size_t name_length);
 
+/* each utility is required to implement it */
+void tools_cleanup(void);
+
+#define FREE_AND_NULL(x) do { free(x); x = NULL; } while (0)
+
 /* Log */
 #define log_dbg(x...) clogger(NULL, CRYPT_LOG_DEBUG, __FILE__, __LINE__, x)
 #define log_std(x...) clogger(NULL, CRYPT_LOG_NORMAL, __FILE__, __LINE__, x)
index a536093..27a24d9 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * cryptsetup-reencrypt - crypt utility for offline re-encryption
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz All rights reserved.
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
 
 #define NO_UUID "cafecafe-cafe-cafe-cafe-cafecafeeeee"
 
-static const char *opt_cipher = NULL;
-static const char *opt_hash = NULL;
-static const char *opt_key_file = NULL;
-static const char *opt_master_key_file = NULL;
-static const char *opt_uuid = NULL;
-static const char *opt_type = "luks";
+static char *opt_cipher = NULL;
+static char *opt_hash = NULL;
+static char *opt_key_file = NULL;
+static char *opt_master_key_file = NULL;
+static char *opt_uuid = NULL;
+static char *opt_type = NULL;
+static char *opt_pbkdf = NULL;
+static char *opt_header_device = NULL;
+
+/* helper strings converted to uint64_t later */
+static char *opt_reduce_size_str = NULL;
+static char *opt_device_size_str = NULL;
+
+static uint64_t opt_reduce_size = 0;
+static uint64_t opt_device_size = 0;
+
 static long opt_keyfile_size = 0;
 static long opt_keyfile_offset = 0;
 static int opt_iteration_time = 0;
-static const char *opt_pbkdf = NULL;
 static long opt_pbkdf_memory = DEFAULT_LUKS2_MEMORY_KB;
 static long opt_pbkdf_parallel = DEFAULT_LUKS2_PARALLEL_THREADS;
 static long opt_pbkdf_iterations = 0;
@@ -54,16 +63,11 @@ static int opt_key_size = 0;
 static int opt_new = 0;
 static int opt_keep_key = 0;
 static int opt_decrypt = 0;
-static const char *opt_header_device = NULL;
-
-static const char *opt_reduce_size_str = NULL;
-static uint64_t opt_reduce_size = 0;
-
-static const char *opt_device_size_str = NULL;
-static uint64_t opt_device_size = 0;
 
 static const char **action_argv;
 
+static const char *set_pbkdf = NULL;
+
 #define MAX_SLOT 32
 #define MAX_TOKEN 32
 struct reenc_ctx {
@@ -113,6 +117,20 @@ typedef enum {
        CHECK_OPEN,
 } header_magic;
 
+void tools_cleanup(void)
+{
+       FREE_AND_NULL(opt_cipher);
+       FREE_AND_NULL(opt_hash);
+       FREE_AND_NULL(opt_key_file);
+       FREE_AND_NULL(opt_master_key_file);
+       FREE_AND_NULL(opt_uuid);
+       FREE_AND_NULL(opt_type);
+       FREE_AND_NULL(opt_pbkdf);
+       FREE_AND_NULL(opt_header_device);
+       FREE_AND_NULL(opt_reduce_size_str);
+       FREE_AND_NULL(opt_device_size_str);
+}
+
 static void _quiet_log(int level, const char *msg, void *usrptr)
 {
        if (!opt_debug)
@@ -482,7 +500,7 @@ static int set_pbkdf_params(struct crypt_device *cd, const char *dev_type)
        if (!pbkdf_default)
                return -EINVAL;
 
-       pbkdf.type = opt_pbkdf ?: pbkdf_default->type;
+       pbkdf.type = set_pbkdf ?: pbkdf_default->type;
        pbkdf.hash = opt_hash ?: pbkdf_default->hash;
        pbkdf.time_ms = (uint32_t)opt_iteration_time ?: pbkdf_default->time_ms;
        if (strcmp(pbkdf.type, CRYPT_KDF_PBKDF2)) {
@@ -1590,10 +1608,12 @@ static void help(poptContext popt_context,
        if (key->shortName == '?') {
                log_std("%s %s\n", PACKAGE_REENC, PACKAGE_VERSION);
                poptPrintHelp(popt_context, stdout, 0);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else if (key->shortName == 'V') {
                log_std("%s %s\n", PACKAGE_REENC, PACKAGE_VERSION);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else
@@ -1688,7 +1708,7 @@ int main(int argc, const char **argv)
                      poptGetInvocationName(popt_context));
        }
 
-       if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &opt_pbkdf))
+       if (opt_pbkdf && crypt_parse_pbkdf(opt_pbkdf, &set_pbkdf))
                usage(popt_context, EXIT_FAILURE,
                _("Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id."),
                poptGetInvocationName(popt_context));
@@ -1764,8 +1784,7 @@ int main(int argc, const char **argv)
        }
 
        r = run_reencrypt(action_argv[0]);
-
+       tools_cleanup();
        poptFreeContext(popt_context);
-
        return translate_errno(r);
 }
index 51778da..61b166a 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * integritysetup - setup integrity protected volumes for dm-integrity
  *
- * Copyright (C) 2017-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2017-2020 Milan Broz
+ * Copyright (C) 2017-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2017-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
 #define PACKAGE_INTEGRITY "integritysetup"
 
 #define DEFAULT_ALG_NAME "crc32c"
-#define MAX_KEY_SIZE 4096
 
-static const char *opt_journal_size_str = NULL;
+static char *opt_data_device = NULL;
+static char *opt_integrity = NULL; /* DEFAULT_ALG_NAME */
+static char *opt_integrity_key_file = NULL;
+static char *opt_journal_integrity = NULL; /* none */
+static char *opt_journal_integrity_key_file = NULL;
+static char *opt_journal_crypt = NULL; /* none */
+static char *opt_journal_crypt_key_file = NULL;
+
+/* helper strings converted to uint64_t later */
+static char *opt_journal_size_str = NULL;
+
 static uint64_t opt_journal_size = 0;
+
 static int opt_interleave_sectors = 0;
 static int opt_journal_watermark = 0;
 static int opt_bitmap_sectors_per_bit = 0;
@@ -37,41 +47,42 @@ static int opt_bitmap_flush_time = 0;
 static int opt_tag_size = 0;
 static int opt_sector_size = 0;
 static int opt_buffer_sectors = 0;
-
 static int opt_no_wipe = 0;
-
-static const char *opt_data_device = NULL;
-
-static const char *opt_integrity = DEFAULT_ALG_NAME;
-static const char *opt_integrity_key_file = NULL;
 static int opt_integrity_key_size = 0;
-
-static const char *opt_journal_integrity = NULL; /* none */
-static const char *opt_journal_integrity_key_file = NULL;
 static int opt_journal_integrity_key_size = 0;
-
-static const char *opt_journal_crypt = NULL; /* none */
-static const char *opt_journal_crypt_key_file = NULL;
 static int opt_journal_crypt_key_size = 0;
-
 static int opt_integrity_nojournal = 0;
 static int opt_integrity_recovery = 0;
 static int opt_integrity_bitmap = 0;
 static int opt_integrity_legacy_padding = 0;
-
+static int opt_integrity_legacy_hmac = 0;
+static int opt_integrity_legacy_recalculate = 0;
 static int opt_integrity_recalculate = 0;
 static int opt_allow_discards = 0;
 
+static const char *integrity_alg = DEFAULT_ALG_NAME;
 static const char **action_argv;
 static int action_argc;
 
+void tools_cleanup(void)
+{
+       FREE_AND_NULL(opt_data_device);
+       FREE_AND_NULL(opt_integrity);
+       FREE_AND_NULL(opt_integrity_key_file);
+       FREE_AND_NULL(opt_journal_integrity);
+       FREE_AND_NULL(opt_journal_integrity_key_file);
+       FREE_AND_NULL(opt_journal_crypt);
+       FREE_AND_NULL(opt_journal_crypt_key_file);
+       FREE_AND_NULL(opt_journal_size_str);
+}
+
 // FIXME: move this to tools and handle EINTR
 static int _read_mk(const char *file, char **key, int keysize)
 {
        int fd;
 
-       if (keysize <= 0 || keysize > MAX_KEY_SIZE) {
-               log_err(_("Invalid key size."));
+       if (keysize <= 0 || keysize > (DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB * 1024)) {
+               log_err(_("Invalid key size. Maximum is %u bytes."), DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB * 1024);
                return -EINVAL;
        }
 
@@ -189,14 +200,12 @@ static int action_format(int arg)
        int r;
        size_t signatures;
 
-       if (opt_integrity) {
-               r = crypt_parse_hash_integrity_mode(opt_integrity, integrity);
-               if (r < 0) {
-                       log_err(_("No known integrity specification pattern detected."));
-                       return r;
-               }
-               params.integrity = integrity;
+       r = crypt_parse_hash_integrity_mode(integrity_alg, integrity);
+       if (r < 0) {
+               log_err(_("No known integrity specification pattern detected."));
+               return r;
        }
+       params.integrity = integrity;
 
        if (opt_journal_integrity) {
                r = crypt_parse_hash_integrity_mode(opt_journal_integrity, journal_integrity);
@@ -246,6 +255,9 @@ static int action_format(int arg)
        if (opt_integrity_legacy_padding)
                crypt_set_compatibility(cd, CRYPT_COMPAT_LEGACY_INTEGRITY_PADDING);
 
+       if (opt_integrity_legacy_hmac)
+               crypt_set_compatibility(cd, CRYPT_COMPAT_LEGACY_INTEGRITY_HMAC);
+
        r = crypt_format(cd, CRYPT_INTEGRITY, NULL, NULL, NULL, NULL, 0, &params);
        if (r < 0) /* FIXME: call wipe signatures again */
                goto out;
@@ -278,14 +290,12 @@ static int action_open(int arg)
        char *integrity_key = NULL;
        int r;
 
-       if (opt_integrity) {
-               r = crypt_parse_hash_integrity_mode(opt_integrity, integrity);
-               if (r < 0) {
-                       log_err(_("No known integrity specification pattern detected."));
-                       return r;
-               }
-               params.integrity = integrity;
+       r = crypt_parse_hash_integrity_mode(integrity_alg, integrity);
+       if (r < 0) {
+               log_err(_("No known integrity specification pattern detected."));
+               return r;
        }
+       params.integrity = integrity;
 
        if (opt_journal_integrity) {
                r = crypt_parse_hash_integrity_mode(opt_journal_integrity, journal_integrity);
@@ -313,7 +323,7 @@ static int action_open(int arg)
        if (opt_integrity_bitmap)
                activate_flags |= CRYPT_ACTIVATE_NO_JOURNAL_BITMAP;
 
-       if (opt_integrity_recalculate)
+       if (opt_integrity_recalculate || opt_integrity_legacy_recalculate)
                activate_flags |= CRYPT_ACTIVATE_RECALCULATE;
        if (opt_allow_discards)
                activate_flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS;
@@ -329,6 +339,9 @@ static int action_open(int arg)
        if (r)
                goto out;
 
+       if (opt_integrity_legacy_recalculate)
+               crypt_set_compatibility(cd, CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC);
+
        r = crypt_activate_by_volume_key(cd, action_argv[1], integrity_key,
                                         opt_integrity_key_size, activate_flags);
 out:
@@ -505,11 +518,15 @@ static void help(poptContext popt_context,
                        crypt_get_dir());
 
                log_std(_("\nDefault compiled-in dm-integrity parameters:\n"
-                         "\tChecksum algorithm: %s\n"), DEFAULT_ALG_NAME);
+                         "\tChecksum algorithm: %s\n"
+                         "\tMaximum keyfile size: %dkB\n"),
+                         DEFAULT_ALG_NAME, DEFAULT_INTEGRITY_KEYFILE_SIZE_MAXKB);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else if (key->shortName == 'V') {
                log_std("%s %s\n", PACKAGE_INTEGRITY, PACKAGE_VERSION);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else
@@ -576,6 +593,9 @@ int main(int argc, const char **argv)
                { "integrity-recalculate",     '\0', POPT_ARG_NONE,  &opt_integrity_recalculate,  0, N_("Recalculate initial tags automatically."), NULL },
                { "integrity-legacy-padding",  '\0', POPT_ARG_NONE,  &opt_integrity_legacy_padding, 0, N_("Use inefficient legacy padding (old kernels)"), NULL },
 
+               { "integrity-legacy-hmac",     '\0', POPT_ARG_NONE,  &opt_integrity_legacy_hmac, 0, N_("Do not protect superblock with HMAC (old kernels)"), NULL },
+               { "integrity-legacy-recalculate",'\0',POPT_ARG_NONE, &opt_integrity_legacy_recalculate, 0, N_("Allow recalculating of volumes with HMAC keys (old kernels)"), NULL },
+
                { "allow-discards",            '\0', POPT_ARG_NONE,  &opt_allow_discards, 0, N_("Allow discards (aka TRIM) requests for device"), NULL },
                POPT_TABLEEND
        };
@@ -629,6 +649,9 @@ int main(int argc, const char **argv)
                aname = "close";
        }
 
+       if (opt_integrity)
+               integrity_alg = opt_integrity;
+
        for (action = action_types; action->type; action++)
                if (strcmp(action->type, aname) == 0)
                        break;
@@ -679,9 +702,6 @@ int main(int argc, const char **argv)
           (!opt_integrity_key_file && opt_integrity_key_size))
                usage(popt_context, EXIT_FAILURE, _("Both key file and key size options must be specified."),
                      poptGetInvocationName(popt_context));
-       if (!opt_integrity && opt_integrity_key_file)
-               usage(popt_context, EXIT_FAILURE, _("Integrity algorithm must be specified if integrity key is used."),
-                     poptGetInvocationName(popt_context));
 
        if ((opt_journal_integrity_key_file && !opt_journal_integrity_key_size) ||
           (!opt_journal_integrity_key_file && opt_journal_integrity_key_size))
@@ -718,6 +738,7 @@ int main(int argc, const char **argv)
        }
 
        r = run_action(action);
+       tools_cleanup();
        poptFreeContext(popt_context);
        return r;
 }
index 960b7a7..a96f309 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Linux block devices helpers
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2018-2020 Ondrej Kozina
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 535d85f..b8e0d6c 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * Helper utilities for LUKS2 features
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2018-2020 Milan Broz
- * Copyright (C) 2018-2020 Ondrej Kozina
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Milan Broz
+ * Copyright (C) 2018-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 55c1343..e4f7cf0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Password quality check wrapper
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -62,51 +62,86 @@ static int tools_check_pwquality(const char *password)
 #elif defined ENABLE_PASSWDQC
 #include <passwdqc.h>
 
-static int tools_check_pwquality(const char *password)
+static int tools_check_passwdqc(const char *password)
 {
        passwdqc_params_t params;
-       char *parse_reason;
+       char *parse_reason = NULL;
        const char *check_reason;
        const char *config = PASSWDQC_CONFIG_FILE;
+       int r = -EINVAL;
 
        passwdqc_params_reset(&params);
 
        if (*config && passwdqc_params_load(&params, &parse_reason, config)) {
                log_err(_("Cannot check password quality: %s"),
                        (parse_reason ? parse_reason : "Out of memory"));
-               free(parse_reason);
-               return -EINVAL;
+               goto out;
        }
 
        check_reason = passwdqc_check(&params.qc, password, NULL, NULL);
        if (check_reason) {
                log_err(_("Password quality check failed: Bad passphrase (%s)"),
                        check_reason);
-               return -EPERM;
-       }
-
-       return 0;
+               r = -EPERM;
+       } else
+               r = 0;
+out:
+#if HAVE_PASSWDQC_PARAMS_FREE
+       passwdqc_params_free(&params);
+#endif
+       free(parse_reason);
+       return r;
 }
-#else /* !(ENABLE_PWQUALITY || ENABLE_PASSWDQC) */
-static int tools_check_pwquality(const char *password)
+#endif /* ENABLE_PWQUALITY || ENABLE_PASSWDQC */
+
+/* coverity[ +tainted_string_sanitize_content : arg-0 ] */
+static int tools_check_password(const char *password)
 {
+#if defined ENABLE_PWQUALITY
+       return tools_check_pwquality(password);
+#elif defined ENABLE_PASSWDQC
+       return tools_check_passwdqc(password);
+#else
        return 0;
+#endif
 }
-#endif /* ENABLE_PWQUALITY || ENABLE_PASSWDQC */
 
 /* Password reading helpers */
+
+static ssize_t read_tty_eol(int fd, char *pass, size_t maxlen)
+{
+       bool eol = false;
+       size_t read_size = 0;
+       ssize_t r;
+
+       do {
+               r = read(fd, pass, maxlen - read_size);
+               if ((r == -1 && errno != EINTR) || quit)
+                       return -1;
+               if (r >= 0) {
+                       if (!r || pass[r-1] == '\n')
+                               eol = true;
+                       read_size += (size_t)r;
+                       pass = pass + r;
+               }
+       } while (!eol && read_size != maxlen);
+
+       return (ssize_t)read_size;
+}
+
+/* The pass buffer is zeroed and has trailing \0 already " */
 static int untimed_read(int fd, char *pass, size_t maxlen)
 {
        ssize_t i;
 
-       i = read(fd, pass, maxlen);
+       i = read_tty_eol(fd, pass, maxlen);
        if (i > 0) {
-               pass[i-1] = '\0';
+               if (pass[i-1] == '\n')
+                       pass[i-1] = '\0';
                i = 0;
-       } else if (i == 0) { /* EOF */
-               *pass = 0;
+       } else if (i == 0) /* empty input */
                i = -1;
-       }
+
        return i;
 }
 
@@ -193,10 +228,9 @@ static int crypt_get_key_tty(const char *prompt,
                log_err(_("Error reading passphrase from terminal."));
                goto out_err;
        }
-       pass[key_size_max] = '\0';
 
        if (verify) {
-               pass_verify = crypt_safe_alloc(key_size_max);
+               pass_verify = crypt_safe_alloc(key_size_max + 1);
                if (!pass_verify) {
                        log_err(_("Out of memory while reading passphrase."));
                        r = -ENOMEM;
@@ -276,7 +310,7 @@ int tools_get_key(const char *prompt,
 
        /* Check pwquality for password (not keyfile) */
        if (pwquality && !opt_force_password && !key_file && !r)
-               r = tools_check_pwquality(*key);
+               r = tools_check_password(*key);
 
        return r;
 }
@@ -293,7 +327,7 @@ int tools_read_mk(const char *file, char **key, int keysize)
 {
        int fd;
 
-       if (!keysize || !key)
+       if (keysize <= 0 || !key)
                return -EINVAL;
 
        *key = crypt_safe_alloc(keysize);
@@ -323,6 +357,9 @@ int tools_write_mk(const char *file, const char *key, int keysize)
 {
        int fd, r = -EINVAL;
 
+       if (keysize <= 0 || !key)
+               return -EINVAL;
+
        fd = open(file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR);
        if (fd < 0) {
                log_err(_("Cannot open keyfile %s for write."), file);
index 47bcfe1..390590a 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2004 Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007 Clemens Fruhwirth <clemens@endorphin.org>
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -238,6 +238,7 @@ __attribute__ ((noreturn)) void usage(poptContext popt_context,
        poptPrintUsage(popt_context, stderr, 0);
        if (error)
                log_err("%s: %s", more, error);
+       tools_cleanup();
        poptFreeContext(popt_context);
        exit(exitcode);
 }
@@ -596,14 +597,6 @@ out:
        return r;
 }
 
-int tools_is_cipher_null(const char *cipher)
-{
-       if (!cipher)
-               return 0;
-
-       return !strcmp(cipher, "cipher_null") ? 1 : 0;
-}
-
 /*
  * Keyfile - is standard input treated as a binary file (no EOL handling).
  */
index e29b75d..fc32cca 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * veritysetup - setup cryptographic volumes for dm-verity
  *
- * Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2012-2020 Milan Broz
+ * Copyright (C) 2012-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2012-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
 
 #define PACKAGE_VERITY "veritysetup"
 
-static int use_superblock = 1;
-
-static const char *fec_device = NULL;
-static int fec_roots = DEFAULT_VERITY_FEC_ROOTS;
-static const char *hash_algorithm = NULL;
-static int hash_type = 1;
-static int data_block_size = DEFAULT_VERITY_DATA_BLOCK;
-static int hash_block_size = DEFAULT_VERITY_HASH_BLOCK;
+static char *opt_fec_device = NULL;
+static char *opt_hash_algorithm = NULL;
+static char *opt_salt = NULL;
+static char *opt_uuid = NULL;
+static char *opt_root_hash_signature = NULL;
+
+static int opt_use_superblock = 1;
+static int opt_fec_roots = DEFAULT_VERITY_FEC_ROOTS;
+static int opt_hash_type = 1;
+static int opt_data_block_size = DEFAULT_VERITY_DATA_BLOCK;
+static int opt_hash_block_size = DEFAULT_VERITY_HASH_BLOCK;
 static uint64_t data_blocks = 0;
-static const char *salt_string = NULL;
 static uint64_t hash_offset = 0;
 static uint64_t fec_offset = 0;
-static const char *opt_uuid = NULL;
 static int opt_restart_on_corruption = 0;
+static int opt_panic_on_corruption = 0;
 static int opt_ignore_corruption = 0;
 static int opt_ignore_zero_blocks = 0;
 static int opt_check_at_most_once = 0;
-static const char *opt_root_hash_signature = NULL;
 
 static const char **action_argv;
 static int action_argc;
 
+void tools_cleanup(void)
+{
+       FREE_AND_NULL(opt_fec_device);
+       FREE_AND_NULL(opt_hash_algorithm);
+       FREE_AND_NULL(opt_salt);
+       FREE_AND_NULL(opt_uuid);
+       FREE_AND_NULL(opt_root_hash_signature);
+}
+
 static int _prepare_format(struct crypt_params_verity *params,
                           const char *data_device,
                           uint32_t flags)
@@ -52,16 +62,16 @@ static int _prepare_format(struct crypt_params_verity *params,
        char *salt = NULL;
        int len;
 
-       params->hash_name = hash_algorithm ?: DEFAULT_VERITY_HASH;
+       params->hash_name = opt_hash_algorithm ?: DEFAULT_VERITY_HASH;
        params->data_device = data_device;
-       params->fec_device = fec_device;
-       params->fec_roots = fec_roots;
+       params->fec_device = opt_fec_device;
+       params->fec_roots = opt_fec_roots;
 
-       if (salt_string && !strcmp(salt_string, "-")) {
+       if (opt_salt && !strcmp(opt_salt, "-")) {
                params->salt_size = 0;
                params->salt = NULL;
-       } else if (salt_string) {
-               len = crypt_hex_to_bytes(salt_string, &salt, 0);
+       } else if (opt_salt) {
+               len = crypt_hex_to_bytes(opt_salt, &salt, 0);
                if (len < 0) {
                        log_err(_("Invalid salt string specified."));
                        return -EINVAL;
@@ -73,12 +83,12 @@ static int _prepare_format(struct crypt_params_verity *params,
                params->salt = NULL;
        }
 
-       params->data_block_size = data_block_size;
-       params->hash_block_size = hash_block_size;
+       params->data_block_size = opt_data_block_size;
+       params->hash_block_size = opt_hash_block_size;
        params->data_size = data_blocks;
        params->hash_area_offset = hash_offset;
        params->fec_area_offset = fec_offset;
-       params->hash_type = hash_type;
+       params->hash_type = opt_hash_type;
        params->flags = flags;
 
        return 0;
@@ -101,13 +111,13 @@ static int action_format(int arg)
                close(r);
        }
        /* Try to create FEC image if doesn't exist */
-       if (fec_device) {
-               r = open(fec_device, O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR);
+       if (opt_fec_device) {
+               r = open(opt_fec_device, O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR);
                if (r < 0 && errno != EEXIST) {
-                       log_err(_("Cannot create FEC image %s for writing."), fec_device);
+                       log_err(_("Cannot create FEC image %s for writing."), opt_fec_device);
                        return -EINVAL;
                } else if (r >= 0) {
-                       log_dbg("Created FEC image %s.", fec_device);
+                       log_dbg("Created FEC image %s.", opt_fec_device);
                        close(r);
                }
        }
@@ -115,7 +125,7 @@ static int action_format(int arg)
        if ((r = crypt_init(&cd, action_argv[1])))
                goto out;
 
-       if (!use_superblock)
+       if (!opt_use_superblock)
                flags |= CRYPT_VERITY_NO_HEADER;
 
        r = _prepare_format(&params, action_argv[0], flags);
@@ -153,17 +163,19 @@ static int _activate(const char *dm_device,
                activate_flags |= CRYPT_ACTIVATE_IGNORE_CORRUPTION;
        if (opt_restart_on_corruption)
                activate_flags |= CRYPT_ACTIVATE_RESTART_ON_CORRUPTION;
+       if (opt_panic_on_corruption)
+               activate_flags |= CRYPT_ACTIVATE_PANIC_ON_CORRUPTION;
        if (opt_ignore_zero_blocks)
                activate_flags |= CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS;
        if (opt_check_at_most_once)
                activate_flags |= CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE;
 
-       if (use_superblock) {
+       if (opt_use_superblock) {
                params.flags = flags;
                params.hash_area_offset = hash_offset;
                params.fec_area_offset = fec_offset;
-               params.fec_device = fec_device;
-               params.fec_roots = fec_roots;
+               params.fec_device = opt_fec_device;
+               params.fec_roots = opt_fec_roots;
                r = crypt_load(cd, CRYPT_VERITY, &params);
        } else {
                r = _prepare_format(&params, data_device, flags | CRYPT_VERITY_NO_HEADER);
@@ -326,7 +338,7 @@ static int action_status(int arg)
 
                if (vp.fec_device) {
                        log_std("  FEC device:  %s\n", vp.fec_device);
-                       if ((backing_file = crypt_loop_backing_file(vp.fec_device))) {
+                       if ((backing_file = crypt_loop_backing_file(opt_fec_device))) {
                                log_std("  FEC loop:    %s\n", backing_file);
                                free(backing_file);
                        }
@@ -349,11 +361,13 @@ static int action_status(int arg)
 
                if (cad.flags & (CRYPT_ACTIVATE_IGNORE_CORRUPTION|
                                 CRYPT_ACTIVATE_RESTART_ON_CORRUPTION|
+                                CRYPT_ACTIVATE_PANIC_ON_CORRUPTION|
                                 CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS|
                                 CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE))
-                       log_std("  flags:       %s%s%s%s\n",
+                       log_std("  flags:       %s%s%s%s%s\n",
                                (cad.flags & CRYPT_ACTIVATE_IGNORE_CORRUPTION) ? "ignore_corruption " : "",
                                (cad.flags & CRYPT_ACTIVATE_RESTART_ON_CORRUPTION) ? "restart_on_corruption " : "",
+                               (cad.flags & CRYPT_ACTIVATE_PANIC_ON_CORRUPTION) ? "panic_on_corruption " : "",
                                (cad.flags & CRYPT_ACTIVATE_IGNORE_ZERO_BLOCKS) ? "ignore_zero_blocks " : "",
                                (cad.flags & CRYPT_ACTIVATE_CHECK_AT_MOST_ONCE) ? "check_at_most_once" : "");
        }
@@ -426,10 +440,12 @@ static void help(poptContext popt_context,
                        DEFAULT_VERITY_HASH, DEFAULT_VERITY_DATA_BLOCK,
                        DEFAULT_VERITY_HASH_BLOCK, DEFAULT_VERITY_SALT_SIZE,
                        1);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else if (key->shortName == 'V') {
                log_std("%s %s\n", PACKAGE_VERITY, PACKAGE_VERSION);
+               tools_cleanup();
                poptFreeContext(popt_context);
                exit(EXIT_SUCCESS);
        } else
@@ -450,7 +466,6 @@ static int run_action(struct action_type *action)
 
 int main(int argc, const char **argv)
 {
-       static char *popt_tmp;
        static const char *null_action_argv[] = {NULL};
        static struct poptOption popt_help_options[] = {
                { NULL,    '\0', POPT_ARG_CALLBACK, help, 0, NULL,                         NULL },
@@ -463,20 +478,21 @@ int main(int argc, const char **argv)
                { NULL,              '\0', POPT_ARG_INCLUDE_TABLE, popt_help_options, 0, N_("Help options:"), NULL },
                { "verbose",         'v',  POPT_ARG_NONE, &opt_verbose,      0, N_("Shows more detailed error messages"), NULL },
                { "debug",           '\0', POPT_ARG_NONE, &opt_debug,        0, N_("Show debug messages"), NULL },
-               { "no-superblock",   0,    POPT_ARG_VAL,  &use_superblock,   0, N_("Do not use verity superblock"), NULL },
-               { "format",          0,    POPT_ARG_INT,  &hash_type,        0, N_("Format type (1 - normal, 0 - original Chrome OS)"), N_("number") },
-               { "data-block-size", 0,    POPT_ARG_INT,  &data_block_size,  0, N_("Block size on the data device"), N_("bytes") },
-               { "hash-block-size", 0,    POPT_ARG_INT,  &hash_block_size,  0, N_("Block size on the hash device"), N_("bytes") },
-               { "fec-roots",       0,    POPT_ARG_INT,  &fec_roots,        0, N_("FEC parity bytes"), N_("bytes") },
-               { "data-blocks",     0,    POPT_ARG_STRING, &popt_tmp,       1, N_("The number of blocks in the data file"), N_("blocks") },
-               { "fec-device",      0,    POPT_ARG_STRING, &fec_device,     0, N_("Path to device with error correction data"), N_("path") },
-               { "hash-offset",     0,    POPT_ARG_STRING, &popt_tmp,       2, N_("Starting offset on the hash device"), N_("bytes") },
-               { "fec-offset",      0,    POPT_ARG_STRING, &popt_tmp,       3, N_("Starting offset on the FEC device"), N_("bytes") },
-               { "hash",            'h',  POPT_ARG_STRING, &hash_algorithm, 0, N_("Hash algorithm"), N_("string") },
-               { "salt",            's',  POPT_ARG_STRING, &salt_string,    0, N_("Salt"), N_("hex string") },
+               { "no-superblock",   0,    POPT_ARG_VAL,  &opt_use_superblock,   0, N_("Do not use verity superblock"), NULL },
+               { "format",          0,    POPT_ARG_INT,  &opt_hash_type,        0, N_("Format type (1 - normal, 0 - original Chrome OS)"), N_("number") },
+               { "data-block-size", 0,    POPT_ARG_INT,  &opt_data_block_size,  0, N_("Block size on the data device"), N_("bytes") },
+               { "hash-block-size", 0,    POPT_ARG_INT,  &opt_hash_block_size,  0, N_("Block size on the hash device"), N_("bytes") },
+               { "fec-roots",       0,    POPT_ARG_INT,  &opt_fec_roots,        0, N_("FEC parity bytes"), N_("bytes") },
+               { "data-blocks",     0,    POPT_ARG_STRING, NULL,       1, N_("The number of blocks in the data file"), N_("blocks") },
+               { "fec-device",      0,    POPT_ARG_STRING, &opt_fec_device,     0, N_("Path to device with error correction data"), N_("path") },
+               { "hash-offset",     0,    POPT_ARG_STRING, NULL,       2, N_("Starting offset on the hash device"), N_("bytes") },
+               { "fec-offset",      0,    POPT_ARG_STRING, NULL,       3, N_("Starting offset on the FEC device"), N_("bytes") },
+               { "hash",            'h',  POPT_ARG_STRING, &opt_hash_algorithm, 0, N_("Hash algorithm"), N_("string") },
+               { "salt",            's',  POPT_ARG_STRING, &opt_salt,    0, N_("Salt"), N_("hex string") },
                { "uuid",            '\0', POPT_ARG_STRING, &opt_uuid,       0, N_("UUID for device to use"), NULL },
                { "root-hash-signature",'\0', POPT_ARG_STRING, &opt_root_hash_signature,  0, N_("Path to root hash signature file"), NULL },
                { "restart-on-corruption", 0,POPT_ARG_NONE,&opt_restart_on_corruption, 0, N_("Restart kernel if corruption is detected"), NULL },
+               { "panic-on-corruption", 0,POPT_ARG_NONE, &opt_panic_on_corruption, 0, N_("Panic kernel if corruption is detected"), NULL },
                { "ignore-corruption", 0,  POPT_ARG_NONE, &opt_ignore_corruption,  0, N_("Ignore corruption, log it only"), NULL },
                { "ignore-zero-blocks", 0, POPT_ARG_NONE, &opt_ignore_zero_blocks, 0, N_("Do not verify zeroed blocks"), NULL },
                { "check-at-most-once", 0, POPT_ARG_NONE, &opt_check_at_most_once, 0, N_("Verify data block only the first time it is read"), NULL },
@@ -500,15 +516,17 @@ int main(int argc, const char **argv)
 
        while((r = poptGetNextOpt(popt_context)) > 0) {
                unsigned long long ull_value;
-               char *endp;
+               char *endp, *str = poptGetOptArg(popt_context);
 
                errno = 0;
-               ull_value = strtoull(popt_tmp, &endp, 10);
-               if (*endp || !*popt_tmp || !isdigit(*popt_tmp) ||
+               ull_value = strtoull(str, &endp, 10);
+               if (*endp || !*str || !isdigit(*str) ||
                    (errno == ERANGE && ull_value == ULLONG_MAX) ||
                    (errno != 0 && ull_value == 0))
                        r = POPT_ERROR_BADNUMBER;
 
+               free(str);
+
                switch(r) {
                        case 1:
                                data_blocks = ull_value;
@@ -571,7 +589,7 @@ int main(int argc, const char **argv)
                      poptGetInvocationName(popt_context));
        }
 
-       if (data_block_size < 0 || hash_block_size < 0 || hash_type < 0) {
+       if (opt_data_block_size < 0 || opt_hash_block_size < 0 || opt_hash_type < 0) {
                usage(popt_context, EXIT_FAILURE,
                      _("Negative number for option not permitted."),
                      poptGetInvocationName(popt_context));
@@ -592,6 +610,11 @@ int main(int argc, const char **argv)
                _("Option --ignore-corruption and --restart-on-corruption cannot be used together."),
                poptGetInvocationName(popt_context));
 
+       if (opt_panic_on_corruption && opt_restart_on_corruption)
+               usage(popt_context, EXIT_FAILURE,
+               _("Option --panic-on-corruption and --restart-on-corruption cannot be used together."),
+               poptGetInvocationName(popt_context));
+
        if (opt_debug) {
                opt_verbose = 1;
                crypt_set_debug_level(-1);
@@ -599,6 +622,7 @@ int main(int argc, const char **argv)
        }
 
        r = run_action(action);
+       tools_cleanup();
        poptFreeContext(popt_context);
        return r;
 }
index 5a7e21d..4688bff 100644 (file)
@@ -25,7 +25,7 @@ TESTS += verity-compat-test
 endif
 
 if REENCRYPT
-TESTS += reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test
+TESTS += reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test luks2-reencryption-mangle-test
 endif
 
 if INTEGRITYSETUP
@@ -57,6 +57,7 @@ EXTRA_DIST = compatimage.img.xz compatv10image.img.xz \
        reencryption-compat-test \
        reencryption-compat-test2 \
        luks2-reencryption-test \
+       luks2-reencryption-mangle-test \
        tcrypt-compat-test \
        luks1-compat-test \
        luks2-validation-test generators \
@@ -76,6 +77,8 @@ CLEANFILES = cryptsetup-tst* valglog* *-fail-*.log
 clean-local:
        -rm -rf tcrypt-images luks1-images luks2-images bitlk-images conversion_imgs luks2_valid_hdr.img blkid-luks2-pv-img blkid-luks2-pv-img.bcp
 
+LDADD = $(LTLIBINTL)
+
 differ_SOURCES = differ.c
 differ_CFLAGS = $(AM_CFLAGS) -Wall -O2
 
@@ -112,6 +115,7 @@ compatimage.img:
        @xz -k -d compatimage.img.xz
 
 valgrind-check: api-test api-test-2 differ
+       @VALG=1 ./compat-test
        @VALG=1 ./compat-test2
        @VALG=1 ./luks2-validation-test
        @VALG=1 ./verity-compat-test
@@ -119,6 +123,8 @@ valgrind-check: api-test api-test-2 differ
        @INFOSTRING="api-test-000" ./valg-api.sh ./api-test
        @INFOSTRING="api-test-002" ./valg-api.sh ./api-test-2
        @VALG=1 ./luks2-reencryption-test
-       @VALG=1 ./compat-test
+       @VALG=1 ./luks2-reencryption-mangle-test
+       @VALG=1 ./bitlk-compat-test
+       @grep -l "ERROR SUMMARY: [^0] errors" valglog* || echo "No leaks detected."
 
 .PHONY: valgrind-check
index 19c0000..c63cdc3 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -95,7 +95,7 @@ TESTS = 00modules-test api-test$(EXEEXT) api-test-2$(EXEEXT) \
        vectors-test$(EXEEXT) blockwise-compat bitlk-compat-test \
        $(am__append_1) $(am__append_2) $(am__append_3)
 @VERITYSETUP_TRUE@am__append_1 = verity-compat-test
-@REENCRYPT_TRUE@am__append_2 = reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test
+@REENCRYPT_TRUE@am__append_2 = reencryption-compat-test reencryption-compat-test2 luks2-reencryption-test luks2-reencryption-mangle-test
 @INTEGRITYSETUP_TRUE@am__append_3 = integrity-compat-test
 check_PROGRAMS = api-test$(EXEEXT) api-test-2$(EXEEXT) differ$(EXEEXT) \
        vectors-test$(EXEEXT) unit-utils-io$(EXEEXT)
@@ -119,7 +119,9 @@ CONFIG_CLEAN_VPATH_FILES =
 am_api_test_OBJECTS = api_test-api-test.$(OBJEXT) \
        api_test-test_utils.$(OBJEXT)
 api_test_OBJECTS = $(am_api_test_OBJECTS)
-api_test_DEPENDENCIES = ../libcryptsetup.la
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+api_test_DEPENDENCIES = $(am__DEPENDENCIES_2) ../libcryptsetup.la
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -130,13 +132,14 @@ api_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 am_api_test_2_OBJECTS = api_test_2-api-test-2.$(OBJEXT) \
        api_test_2-test_utils.$(OBJEXT)
 api_test_2_OBJECTS = $(am_api_test_2_OBJECTS)
-api_test_2_DEPENDENCIES = ../libcryptsetup.la
+api_test_2_DEPENDENCIES = $(am__DEPENDENCIES_2) ../libcryptsetup.la
 api_test_2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(api_test_2_CFLAGS) \
        $(CFLAGS) $(api_test_2_LDFLAGS) $(LDFLAGS) -o $@
 am_differ_OBJECTS = differ-differ.$(OBJEXT)
 differ_OBJECTS = $(am_differ_OBJECTS)
 differ_LDADD = $(LDADD)
+differ_DEPENDENCIES = $(am__DEPENDENCIES_1)
 differ_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(differ_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -220,8 +223,6 @@ am__define_uniq_tagged_files = \
   unique=`for i in $$list; do \
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
 am__tty_colors_dummy = \
   mgn= red= grn= lgn= blu= brg= std=; \
   am__color_tests=no
@@ -264,6 +265,8 @@ CPPFLAGS = @CPPFLAGS@
 CRYPTO_CFLAGS = @CRYPTO_CFLAGS@
 CRYPTO_LIBS = @CRYPTO_LIBS@
 CRYPTO_STATIC_LIBS = @CRYPTO_STATIC_LIBS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFAULT_LUKS2_LOCK_DIR_PERMS = @DEFAULT_LUKS2_LOCK_DIR_PERMS@
 DEFAULT_LUKS2_LOCK_PATH = @DEFAULT_LUKS2_LOCK_PATH@
@@ -281,6 +284,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
@@ -441,6 +445,7 @@ EXTRA_DIST = compatimage.img.xz compatv10image.img.xz \
        reencryption-compat-test \
        reencryption-compat-test2 \
        luks2-reencryption-test \
+       luks2-reencryption-mangle-test \
        tcrypt-compat-test \
        luks1-compat-test \
        luks2-validation-test generators \
@@ -457,6 +462,7 @@ EXTRA_DIST = compatimage.img.xz compatv10image.img.xz \
        bitlk-images.tar.xz
 
 CLEANFILES = cryptsetup-tst* valglog* *-fail-*.log
+LDADD = $(LTLIBINTL)
 differ_SOURCES = differ.c
 differ_CFLAGS = $(AM_CFLAGS) -Wall -O2
 api_test_SOURCES = api-test.c api_test.h test_utils.c
@@ -834,7 +840,6 @@ check-TESTS: $(TESTS)
          echo "$${col}$$dashes$${std}"; \
          test "$$failed" -eq 0; \
        else :; fi
-
 distdir: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) distdir-am
 
@@ -1016,6 +1021,7 @@ compatimage.img:
        @xz -k -d compatimage.img.xz
 
 valgrind-check: api-test api-test-2 differ
+       @VALG=1 ./compat-test
        @VALG=1 ./compat-test2
        @VALG=1 ./luks2-validation-test
        @VALG=1 ./verity-compat-test
@@ -1023,7 +1029,9 @@ valgrind-check: api-test api-test-2 differ
        @INFOSTRING="api-test-000" ./valg-api.sh ./api-test
        @INFOSTRING="api-test-002" ./valg-api.sh ./api-test-2
        @VALG=1 ./luks2-reencryption-test
-       @VALG=1 ./compat-test
+       @VALG=1 ./luks2-reencryption-mangle-test
+       @VALG=1 ./bitlk-compat-test
+       @grep -l "ERROR SUMMARY: [^0] errors" valglog* || echo "No leaks detected."
 
 .PHONY: valgrind-check
 
index f1b387e..75d9cf4 100755 (executable)
@@ -100,7 +100,7 @@ format() # expected [forced] [encryption_sector_size]
 
        if [ -z "$2" ] ; then
                echo -n "Formatting using topology info$_smsg..."
-               echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $DEV -q -c aes-cbc-essiv:sha256 --sector-size $_sec_size >/dev/null || fail
+               echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $DEV -q -c aes-cbc-essiv:sha256 --sector-size $_sec_size >/dev/null 2>&1 || fail
        else
                echo -n "Formatting using forced sector alignment $2$_smsg..."
                echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF --type luks2 $DEV -q -c aes-cbc-essiv:sha256 --align-payload=$2 --sector-size $_sec_size >/dev/null || fail
@@ -222,6 +222,31 @@ format $EXPCT $EXPCT s2048
 format $EXPCT $EXPCT s4096
 cleanup
 
+echo "# Create drive with misaligned opt-io to page-size (some bad USB enclosures)"
+echo "# (logical_block_size=512, physical_block_size=512, alignment_offset=0, opt-io=33553920)"
+add_device dev_size_mb=32 sector_size=512 num_tgts=1 opt_blks=65535
+format $EXPCT
+format $EXPCT s1024
+format $EXPCT s2048
+format $EXPCT s4096
+format $EXPCT 1
+format $EXPCT 1 s1024
+format $EXPCT 1 s2048
+format $EXPCT 1 s4096
+format $EXPCT 8
+format $EXPCT 8 s1024
+format $EXPCT 8 s2048
+format $EXPCT 8 s4096
+format $((EXPCT+1)) $((EXPCT+1))
+format_fail $((EXPCT+1)) $((EXPCT+1)) s1024
+format_fail $((EXPCT+1)) $((EXPCT+1)) s2048
+format_fail $((EXPCT+1)) $((EXPCT+1)) s4096
+format $EXPCT $EXPCT
+format $EXPCT $EXPCT s1024
+format $EXPCT $EXPCT s2048
+format $EXPCT $EXPCT s4096
+cleanup
+
 echo "# Create desktop-class 4K drive w/ 1-sector shift (original bug report)"
 echo "# (logical_block_size=512, physical_block_size=4096, alignment_offset=512)"
 add_device dev_size_mb=32 sector_size=512 physblk_exp=3 lowest_aligned=1 num_tgts=1
index 8386c08..c0bfc9a 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * cryptsetup library LUKS2 API check functions
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -212,9 +212,9 @@ static int get_luks2_offsets(int metadata_device,
 
        if (r_payload_offset) {
                if (metadata_device)
-                       *r_payload_offset = DIV_ROUND_UP_MODULO(default_header_size * 512, (alignpayload_sec ?: 1) * sector_size);
-               else
                        *r_payload_offset = alignpayload_sec * sector_size;
+               else
+                       *r_payload_offset = DIV_ROUND_UP_MODULO(default_header_size * 512, (alignpayload_sec ?: 1) * sector_size);
 
                *r_payload_offset /= sector_size;
        }
@@ -493,7 +493,7 @@ static void UseLuks2Device(void)
        OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0));
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0));
        FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0), "already open");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        FAIL_(crypt_deactivate(cd, CDEVICE_1), "no such device");
 
@@ -525,7 +525,7 @@ static void UseLuks2Device(void)
        OK_(crypt_volume_key_verify(cd, key, key_size));
        OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
 
        key[1] = ~key[1];
@@ -541,6 +541,13 @@ static void SuspendDevice(void)
        char key[128];
        size_t key_size;
        int suspend_status;
+       uint64_t r_payload_offset;
+       const struct crypt_pbkdf_type fast_pbkdf = {
+               .type = "pbkdf2",
+               .hash = "sha256",
+               .iterations = 1000,
+               .flags = CRYPT_PBKDF_NO_BENCHMARK
+       };
 
        OK_(crypt_init(&cd, DEVICE_1));
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
@@ -602,11 +609,31 @@ static void SuspendDevice(void)
        FAIL_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size), "wrong key");
        OK_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, KEY1, strlen(KEY1)));
        OK_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size));
+       OK_(crypt_deactivate(cd, CDEVICE_1));
+       CRYPT_FREE(cd);
 
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
+       OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
+
+       /* Resume device with cipher_null */
+       OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
+       OK_(crypt_format(cd, CRYPT_LUKS2, "cipher_null", "ecb", NULL, key, key_size, NULL));
+       EQ_(0, crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE)));
+       OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
+       OK_(crypt_suspend(cd, CDEVICE_1));
+       OK_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size));
+       OK_(crypt_get_active_device(cd, CDEVICE_1, &cad));
+       EQ_(0, cad.flags & CRYPT_ACTIVATE_SUSPENDED);
+       OK_(crypt_suspend(cd, CDEVICE_1));
+       OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, 0, PASSPHRASE, strlen(PASSPHRASE)));
+       OK_(crypt_get_active_device(cd, CDEVICE_1, &cad));
+       EQ_(0, cad.flags & CRYPT_ACTIVATE_SUSPENDED);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
        _remove_keyfiles();
+       _cleanup_dmdevices();
 }
 
 static void AddDeviceLuks2(void)
@@ -645,7 +672,7 @@ static void AddDeviceLuks2(void)
        crypt_decode_key(key3, mk_hex2, key_size);
 
        // init test devices
-       OK_(get_luks2_offsets(1, 0, 0, &r_header_size, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, &r_header_size, &r_payload_offset));
        OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
        OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size - 1));
 
@@ -700,7 +727,7 @@ static void AddDeviceLuks2(void)
         * test limit values for backing device size
         */
        params.data_alignment = OFFSET_4M;
-       OK_(get_luks2_offsets(1, params.data_alignment, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, params.data_alignment, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_0S, r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
        OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_payload_offset - 1));
@@ -721,7 +748,7 @@ static void AddDeviceLuks2(void)
        OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, &params));
        EQ_(crypt_get_data_offset(cd), r_payload_offset);
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(t_device_size(DMDIR CDEVICE_1, &r_size_1));
        EQ_(r_size_1, SECTOR_SIZE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -761,11 +788,11 @@ static void AddDeviceLuks2(void)
        CRYPT_FREE(cd);
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE));
        FAIL_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, &params), "Context is already formatted");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
        // check active status without header
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        NULL_(crypt_get_type(cd));
        OK_(strcmp(cipher, crypt_get_cipher(cd)));
        OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd)));
@@ -788,7 +815,7 @@ static void AddDeviceLuks2(void)
        CRYPT_FREE(cd);
        // there we've got uuid mismatch
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        NULL_(crypt_get_type(cd));
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device is active");
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0), "Device is active");
@@ -804,14 +831,14 @@ static void AddDeviceLuks2(void)
        // even with no keyslots defined it can be activated by volume key
        OK_(crypt_volume_key_verify(cd, key, key_size));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_2));
 
        // now with keyslot
        EQ_(7, crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)));
        EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7));
        EQ_(7, crypt_activate_by_passphrase(cd, CDEVICE_2, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_2));
 
        crypt_set_iteration_time(cd, 1);
@@ -969,7 +996,7 @@ static void Luks2MetadataSize(void)
        crypt_decode_key(key, mk_hex, key_size);
 
        // init test devices
-       OK_(get_luks2_offsets(1, 0, 0, &r_header_size, NULL));
+       OK_(get_luks2_offsets(0, 0, 0, &r_header_size, NULL));
        OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
        OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_wrong_size)); /* 7 MiBs only */
        //default metadata sizes
@@ -1083,7 +1110,7 @@ static void UseTempVolumes(void)
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "not yet formatted");
        OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 16, NULL));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
 
        OK_(crypt_init_by_name(&cd, CDEVICE_2));
@@ -1160,7 +1187,7 @@ static void Luks2HeaderRestore(void)
 
        crypt_decode_key(key, mk_hex, key_size);
 
-       OK_(get_luks2_offsets(1, params.data_alignment, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, params.data_alignment, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 5000));
 
        // do not restore header over plain device
@@ -1169,7 +1196,7 @@ static void Luks2HeaderRestore(void)
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
        FAIL_(crypt_header_restore(cd, CRYPT_PLAIN, NO_REQS_LUKS2_HEADER), "Cannot restore header to PLAIN type device");
        FAIL_(crypt_header_restore(cd, CRYPT_LUKS2, NO_REQS_LUKS2_HEADER), "Cannot restore header over PLAIN type device");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1265,7 +1292,7 @@ static void Luks2HeaderLoad(void)
        // hardcoded values for existing image IMAGE1
        img_size = 8192;
        // prepare test env
-       OK_(get_luks2_offsets(1, 0, 0, &r_header_size, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, &r_header_size, &r_payload_offset));
        // external header device
        OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
        // prepared header on a device too small to contain header and payload
@@ -1290,7 +1317,7 @@ static void Luks2HeaderLoad(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(!crypt_get_metadata_device_name(cd));
        EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0);
        OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1394,7 +1421,7 @@ static void Luks2HeaderBackup(void)
 
        crypt_decode_key(key, mk_hex, key_size);
 
-       OK_(get_luks2_offsets(0, params.data_alignment, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(1, params.data_alignment, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
 
        // create LUKS device and backup the header
@@ -1412,7 +1439,7 @@ static void Luks2HeaderBackup(void)
        OK_(crypt_header_restore(cd, CRYPT_LUKS2, BACKUP_FILE));
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1421,7 +1448,7 @@ static void Luks2HeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1429,7 +1456,7 @@ static void Luks2HeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1441,7 +1468,7 @@ static void Luks2HeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1449,7 +1476,7 @@ static void Luks2HeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1488,8 +1515,8 @@ static void ResizeDeviceLuks2(void)
        crypt_decode_key(key, mk_hex, key_size);
 
        // prepare env
-       OK_(get_luks2_offsets(1, params.data_alignment, 0, NULL, &r_payload_offset));
-       OK_(get_luks2_offsets(1, 0, 0, &r_header_size, NULL));
+       OK_(get_luks2_offsets(0, params.data_alignment, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, &r_header_size, NULL));
        OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000));
        OK_(create_dmdevice_over_loop(L_DEVICE_0S, 1000));
@@ -1513,7 +1540,7 @@ static void ResizeDeviceLuks2(void)
        FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small");
        if (!t_device_size(DMDIR CDEVICE_1, &r_size))
                EQ_(1000, r_size >> SECTOR_SHIFT);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1533,7 +1560,7 @@ static void ResizeDeviceLuks2(void)
        FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small");
        if (!t_device_size(DMDIR CDEVICE_1, &r_size))
                EQ_(1000, r_size >> SECTOR_SHIFT);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1644,7 +1671,7 @@ static void TokenActivationByKeyring(void)
        kid = add_key("user", KEY_DESC_TEST0, PASSPHRASE, strlen(PASSPHRASE), KEY_SPEC_THREAD_KEYRING);
        NOTFAIL_(kid, "Test or kernel keyring are broken.");
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
 
        // prepare the device
@@ -1803,6 +1830,7 @@ static void Tokens(void)
                        "\"key_description\":" y ", \"some_field\":\"some_value\"}"
 
 
+       int ks;
        const char *dummy;
        const char *cipher = "aes";
        const char *cipher_mode = "xts-plain64";
@@ -1835,7 +1863,7 @@ static void Tokens(void)
 
        FAIL_(crypt_token_register(&th_reserved), "luks2- is reserved prefix");
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
 
        // basic token API tests
@@ -1947,6 +1975,13 @@ static void Tokens(void)
        EQ_(crypt_token_is_assigned(cd, -1, -1), -EINVAL);
        EQ_(crypt_token_is_assigned(cd, 32, 32), -EINVAL);
 
+       // test crypt_keyslot_change_by_passphrase does not erase token references
+       EQ_(crypt_keyslot_change_by_passphrase(cd, 1, 5, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE1, strlen(PASSPHRASE1)), 5);
+       OK_(crypt_token_is_assigned(cd, 10, 5));
+       ks = crypt_keyslot_change_by_passphrase(cd, 5, CRYPT_ANY_SLOT, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE1, strlen(PASSPHRASE1));
+       NOTFAIL_(ks, "Failed to change keyslot passphrase.");
+       OK_(crypt_token_is_assigned(cd, 10, ks));
+
        CRYPT_FREE(cd);
 
        _cleanup_dmdevices();
@@ -2104,7 +2139,7 @@ static void LuksConvert(void)
        CRYPT_FREE(cd);
 
        // should be enough for both luks1 and luks2 devices with all vk lengths
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
 
        // do not allow conversion for legacy luks1 device (non-aligned keyslot offset)
@@ -2506,7 +2541,7 @@ static void Pbkdf(void)
                .size = 0
        };
        struct crypt_params_luks1 luks1 = {
-               .hash = "whirlpool", // test non-standard hash
+               .hash = "sha512", // test non-standard hash
                .data_alignment = 2048,
        };
 
@@ -2516,7 +2551,7 @@ static void Pbkdf(void)
        if (_fips_mode)
                return;
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
 
        NULL_(crypt_get_pbkdf_type_params(NULL));
@@ -2761,7 +2796,7 @@ static void Luks2KeyslotAdd(void)
                pbkdf.iterations = 1000;
        }
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
 
        /* test crypt_keyslot_add_by_key */
@@ -2876,6 +2911,12 @@ static void Luks2KeyslotParams(void)
        const char *mk_hex2 = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1e";
        size_t key_size_ret, key_size = strlen(mk_hex) / 2, keyslot_key_size = 16;
        uint64_t r_payload_offset;
+       const struct crypt_pbkdf_type fast_pbkdf = {
+               .type = "pbkdf2",
+               .hash = "sha256",
+               .iterations = 1000,
+               .flags = CRYPT_PBKDF_NO_BENCHMARK
+       };
 
        crypt_decode_key(key, mk_hex, key_size);
        crypt_decode_key(key2, mk_hex2, key_size);
@@ -2883,13 +2924,13 @@ static void Luks2KeyslotParams(void)
        OK_(prepare_keyfile(KEYFILE1, PASSPHRASE, strlen(PASSPHRASE)));
        OK_(prepare_keyfile(KEYFILE2, PASSPHRASE1, strlen(PASSPHRASE1)));
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
 
        EQ_(key_size, 2 * keyslot_key_size);
        /* test crypt_keyslot_add_by_key */
        OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
-       crypt_set_iteration_time(cd, 1);
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
        OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL));
        NULL_(crypt_keyslot_get_encryption(cd, 0, &key_size_ret));
        OK_(strcmp(crypt_keyslot_get_encryption(cd, CRYPT_ANY_SLOT, &key_size_ret), cipher_spec));
@@ -2948,7 +2989,7 @@ static void Luks2KeyslotParams(void)
        OK_(strcmp(crypt_keyslot_get_encryption(cd, 7, &key_size_ret), cipher_keyslot));
        EQ_(key_size_ret, keyslot_key_size);
 
-       crypt_set_iteration_time(cd, 1);
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
        EQ_(8, crypt_keyslot_change_by_passphrase(cd, 1, 8, PASSPHRASE1, strlen(PASSPHRASE1), PASSPHRASE, strlen(PASSPHRASE)));
        OK_(strcmp(crypt_keyslot_get_encryption(cd, 8, &key_size_ret), cipher_spec));
        EQ_(key_size_ret, key_size);
@@ -2977,7 +3018,7 @@ static void Luks2KeyslotParams(void)
 
        /* LUKS1 compatible calls */
        OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
-       crypt_set_iteration_time(cd, 1);
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
        OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, NULL));
        NULL_(crypt_keyslot_get_encryption(cd, 0, &key_size_ret));
        OK_(strcmp(crypt_keyslot_get_encryption(cd, CRYPT_ANY_SLOT, &key_size_ret), cipher_spec));
@@ -2987,6 +3028,18 @@ static void Luks2KeyslotParams(void)
        EQ_(key_size_ret, key_size);
        CRYPT_FREE(cd);
 
+       /* LUKS2 cipher null checks */
+       OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
+       OK_(crypt_format(cd, CRYPT_LUKS2, "cipher_null", "ecb", NULL, key, key_size, NULL));
+       FAIL_(crypt_keyslot_set_encryption(cd, "null", 32), "cipher null is not allowed");
+       FAIL_(crypt_keyslot_set_encryption(cd, "cipher_null", 32), "cipher null is not allowed");
+       FAIL_(crypt_keyslot_set_encryption(cd, "cipher_null-ecb", 32), "cipher null is not allowed");
+       EQ_(0, crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, PASSPHRASE, strlen(PASSPHRASE)));
+       NOTNULL_(crypt_keyslot_get_encryption(cd, 0, &key_size_ret));
+       NULL_(strstr(crypt_keyslot_get_encryption(cd, 0, &key_size_ret), "null"));
+       CRYPT_FREE(cd);
+
        _cleanup_dmdevices();
        _remove_keyfiles();
 }
@@ -3011,7 +3064,7 @@ static void Luks2ActivateByKeyring(void)
        kid1 = add_key("user", KEY_DESC_TEST1, PASSPHRASE1, strlen(PASSPHRASE1), KEY_SPEC_THREAD_KEYRING);
        NOTFAIL_(kid1, "Test or kernel keyring are broken.");
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
 
        // prepare the device
@@ -3029,7 +3082,7 @@ static void Luks2ActivateByKeyring(void)
        OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
        EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 0, 0), 0);
        EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0), 0);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0), "already open");
        OK_(crypt_deactivate(cd, CDEVICE_1));
        EQ_(crypt_status(cd, CDEVICE_1), CRYPT_INACTIVE);
@@ -3037,7 +3090,7 @@ static void Luks2ActivateByKeyring(void)
        EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST1, 2, 0), 2);
        FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, 1, 0), "Keyslot not assigned to volume");
        EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, 2, 0), 2);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST1, CRYPT_ANY_SLOT, 0), 2);
        OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -3296,7 +3349,7 @@ static void Luks2Requirements(void)
                OK_(crypt_activate_by_token(cd, NULL, 1, NULL, CRYPT_ACTIVATE_KEYRING_KEY));
        }
 #endif
-       OK_(get_luks2_offsets(1, 8192, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 8192, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 2));
        //OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" NO_REQS_LUKS2_HEADER " bs=4096 2>/dev/null", 1));
        OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1));
@@ -3367,7 +3420,7 @@ static void Luks2Requirements(void)
        /* crypt_resize (restricted) */
        FAIL_((r = crypt_resize(cd, CDEVICE_1, 1)), "Unmet requirements detected");
        EQ_(r, -ETXTBSY);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
 
        /* crypt_get_active_device (unrestricted) */
        OK_(crypt_get_active_device(cd, CDEVICE_1, &cad));
@@ -3415,7 +3468,7 @@ static void Luks2Integrity(void)
 
        EQ_(crypt_keyslot_add_by_volume_key(cd, 7, NULL, key_size, passphrase, strlen(passphrase)), 7);
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_2, 7, passphrase, strlen(passphrase) ,0), 7);
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
 
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_2, NULL));
@@ -3477,7 +3530,7 @@ static void Luks2Refresh(void)
        crypt_decode_key(key, mk_hex, key_size);
        crypt_decode_key(key1, mk_hex2, key_size);
 
-       OK_(get_luks2_offsets(1, 0, 0, NULL, &r_payload_offset));
+       OK_(get_luks2_offsets(0, 0, 0, NULL, &r_payload_offset));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000));
        OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_payload_offset + 5000));
        OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
@@ -3639,6 +3692,7 @@ static void Luks2Flags(void)
        CRYPT_FREE(cd);
 }
 
+#if KERNEL_KEYRING && USE_LUKS2_REENCRYPTION
 static int test_progress(uint64_t size, uint64_t offset, void *usrptr)
 {
        while (--test_progress_steps)
@@ -3649,7 +3703,6 @@ static int test_progress(uint64_t size, uint64_t offset, void *usrptr)
 static void Luks2Reencryption(void)
 {
 /* reencryption currently depends on kernel keyring support */
-#if KERNEL_KEYRING
        /* NOTES:
         *  - reencryption requires luks2 parameters. can we avoid it?
         */
@@ -3675,6 +3728,12 @@ static void Luks2Reencryption(void)
                .luks2 = &params2,
        };
 
+       const char *mk_hex = "bb21babe733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a";
+       size_t key_size = strlen(mk_hex) / 2;
+       char key[128];
+
+       crypt_decode_key(key, mk_hex, key_size);
+
        /* reencryption currently depends on kernel keyring support in dm-crypt */
        if (!t_dm_crypt_keyring_support())
                return;
@@ -3687,7 +3746,7 @@ static void Luks2Reencryption(void)
                pbkdf.iterations = 1000;
        }
 
-       OK_(get_luks2_offsets(0, 0, 0, &r_header_size, NULL));
+       OK_(get_luks2_offsets(1, 0, 0, &r_header_size, NULL));
        OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
        OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_header_size + 16));
 
@@ -4318,8 +4377,35 @@ static void Luks2Reencryption(void)
        CRYPT_FREE(cd);
 
        _cleanup_dmdevices();
-#endif
+       OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_header_size + 16));
+
+       rparams.mode = CRYPT_REENCRYPT_REENCRYPT;
+       rparams.direction = CRYPT_REENCRYPT_FORWARD;
+       rparams.resilience = "none";
+       rparams.hash = NULL;
+       rparams.data_shift = 0;
+       rparams.max_hotzone_size = 0;
+       rparams.device_size = 0;
+       rparams.luks2 = &params2;
+       rparams.flags = 0;
+
+       /* Test support for specific key reencryption */
+       OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
+       OK_(crypt_set_pbkdf_type(cd, &pbkdf));
+       OK_(crypt_format(cd, CRYPT_LUKS2, "aes", "cbc-essiv:sha256", NULL, NULL, 32, &params2));
+       EQ_(crypt_keyslot_add_by_volume_key(cd, 3, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 3);
+       EQ_(crypt_keyslot_add_by_key(cd, 9, key, key_size, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT), 9);
+       EQ_(crypt_keyslot_add_by_key(cd, 10, key, key_size, PASSPHRASE, strlen(PASSPHRASE), CRYPT_VOLUME_KEY_NO_SEGMENT | CRYPT_VOLUME_KEY_DIGEST_REUSE ), 10);
+       OK_(crypt_reencrypt_init_by_passphrase(cd, NULL, PASSPHRASE, strlen(PASSPHRASE), 3, 9, "aes", "xts-plain64", &rparams));
+       OK_(crypt_reencrypt(cd, NULL));
+       OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0));
+       OK_(crypt_keyslot_destroy(cd, 9));
+       OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0));
+       crypt_free(cd);
+
+       _cleanup_dmdevices();
 }
+#endif
 
 static void Luks2Repair(void)
 {
@@ -4435,7 +4521,9 @@ int main(int argc, char *argv[])
        RUN_(Luks2Integrity, "LUKS2 with data integrity");
        RUN_(Luks2Refresh, "Active device table refresh");
        RUN_(Luks2Flags, "LUKS2 persistent flags");
+#if KERNEL_KEYRING && USE_LUKS2_REENCRYPTION
        RUN_(Luks2Reencryption, "LUKS2 reencryption");
+#endif
        RUN_(Luks2Repair, "LUKS2 repair"); // test disables metadata locking. Run always last!
 
        _cleanup();
index 81501eb..85f7a93 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * cryptsetup library API check functions
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -357,7 +357,7 @@ static void AddDevicePlain(void)
        OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, NULL));
        FAIL_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0), "cannot verify key with plain");
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -379,7 +379,7 @@ static void AddDevicePlain(void)
        OK_(crypt_init(&cd, DEVICE_1));
        OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, &params));
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        snprintf(path, sizeof(path), "%s/%s", crypt_get_dir(), CDEVICE_1);
        if (t_device_size(path, &r_size) >= 0)
                EQ_(r_size>>SECTOR_SHIFT, 1);
@@ -428,7 +428,7 @@ static void AddDevicePlain(void)
        crypt_init(&cd, DEVICE_1);
        OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, &params));
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        if (!t_device_size(path, &r_size))
                EQ_((r_size >> SECTOR_SHIFT),params.size);
        OK_(crypt_deactivate(cd,CDEVICE_1));
@@ -447,7 +447,7 @@ static void AddDevicePlain(void)
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
 
        // device status check
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        snprintf(path, sizeof(path), "%s/%s", crypt_get_dir(), CDEVICE_1);
        fd = open(path, O_RDONLY);
        EQ_(crypt_status(cd, CDEVICE_1), CRYPT_BUSY);
@@ -492,7 +492,7 @@ static void AddDevicePlain(void)
        OK_(strcmp(crypt_get_type(cd),CRYPT_PLAIN));
 
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
 
        // crypt_resize()
        OK_(crypt_resize(cd,CDEVICE_1,size>>SECTOR_SHIFT)); // same size
@@ -531,7 +531,7 @@ static void AddDevicePlain(void)
        FAIL_(crypt_resize(cd,CDEVICE_1,params.size + 11), "new device size overlaps backing device"); // with respect to offset
        if (!t_device_size(path,&r_size))
                EQ_(r_size>>SECTOR_SHIFT, params.size + 10);
-       EQ_(crypt_status(cd,CDEVICE_1),CRYPT_ACTIVE);
+       GE_(crypt_status(cd,CDEVICE_1),CRYPT_ACTIVE);
        fd = open(path, O_RDONLY);
        NOTFAIL_(fd, "Bad loop device.");
        close(fd);
@@ -555,9 +555,9 @@ static void AddDevicePlain(void)
 
        // suspend/resume tests
        FAIL_(crypt_suspend(cd,CDEVICE_1),"cannot suspend plain device");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        FAIL_(crypt_resume_by_passphrase(cd,CDEVICE_1,CRYPT_ANY_SLOT,passphrase, strlen(passphrase)),"cannot resume plain device");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
 
        // retrieve volume key check
        memset(key2, 0, key_size);
@@ -579,7 +579,7 @@ static void AddDevicePlain(void)
        OK_(prepare_keyfile(KEYFILE2, KEY2, strlen(KEY2)));
        FAIL_(crypt_activate_by_keyfile(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, 0), "cannot verify key with plain");
        EQ_(0, crypt_activate_by_keyfile(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEYFILE1, 0, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        FAIL_(crypt_activate_by_keyfile_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, strlen(KEY1) + 1, 0), "cannot seek");
        FAIL_(crypt_activate_by_keyfile_device_offset(cd, NULL, CRYPT_ANY_SLOT, KEYFILE1, 0, strlen(KEY1) + 1, 0), "cannot seek");
@@ -631,7 +631,7 @@ static void CallbacksTest(void)
        EQ_(new_messages, 0);
        OK_(crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, key_size, &params));
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        EQ_(new_messages, 0);
        FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0), "already exists");
        EQ_(new_messages, 1);
@@ -651,7 +651,7 @@ static void UseLuksDevice(void)
        OK_(crypt_activate_by_passphrase(cd, NULL, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0));
        OK_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0));
        FAIL_(crypt_activate_by_passphrase(cd, CDEVICE_1, CRYPT_ANY_SLOT, KEY1, strlen(KEY1), 0), "already open");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        FAIL_(crypt_deactivate(cd, CDEVICE_1), "no such device");
 
@@ -666,7 +666,7 @@ static void UseLuksDevice(void)
        OK_(crypt_volume_key_verify(cd, key, key_size));
        OK_(crypt_activate_by_volume_key(cd, NULL, key, key_size, 0));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
 
        key[1] = ~key[1];
@@ -682,6 +682,13 @@ static void SuspendDevice(void)
        char key[128];
        size_t key_size;
        int suspend_status;
+       uint64_t r_payload_offset;
+       const struct crypt_pbkdf_type fast_pbkdf = {
+               .type = "pbkdf2",
+               .hash = "sha256",
+               .iterations = 1000,
+               .flags = CRYPT_PBKDF_NO_BENCHMARK
+       };
 
        OK_(crypt_init(&cd, DEVICE_1));
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
@@ -742,11 +749,31 @@ static void SuspendDevice(void)
        FAIL_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size), "wrong key");
        OK_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, KEY1, strlen(KEY1)));
        OK_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size));
+       OK_(crypt_deactivate(cd, CDEVICE_1));
+       CRYPT_FREE(cd);
 
+       OK_(get_luks_offsets(0, key_size, 1024*2, 0, NULL, &r_payload_offset));
+       OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
+
+       /* Resume device with cipher_null */
+       OK_(crypt_init(&cd, DMDIR L_DEVICE_OK));
+       OK_(crypt_set_pbkdf_type(cd, &fast_pbkdf));
+       OK_(crypt_format(cd, CRYPT_LUKS1, "cipher_null", "ecb", NULL, key, key_size, NULL));
+       EQ_(0, crypt_keyslot_add_by_volume_key(cd, 0, key, key_size, "", 0));
+       OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
+       OK_(crypt_suspend(cd, CDEVICE_1));
+       OK_(crypt_resume_by_volume_key(cd, CDEVICE_1, key, key_size));
+       OK_(crypt_get_active_device(cd, CDEVICE_1, &cad));
+       EQ_(0, cad.flags & CRYPT_ACTIVATE_SUSPENDED);
+       OK_(crypt_suspend(cd, CDEVICE_1));
+       OK_(crypt_resume_by_passphrase(cd, CDEVICE_1, 0, "", 0));
+       OK_(crypt_get_active_device(cd, CDEVICE_1, &cad));
+       EQ_(0, cad.flags & CRYPT_ACTIVATE_SUSPENDED);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
        _remove_keyfiles();
+       _cleanup_dmdevices();
 }
 
 static void AddDeviceLuks(void)
@@ -848,7 +875,7 @@ static void AddDeviceLuks(void)
        OK_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, &params));
        EQ_(crypt_get_data_offset(cd), params.data_alignment);
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(t_device_size(DMDIR CDEVICE_1, &r_size_1));
        EQ_(r_size_1, SECTOR_SIZE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -875,11 +902,11 @@ static void AddDeviceLuks(void)
        CRYPT_FREE(cd);
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE));
        FAIL_(crypt_format(cd, CRYPT_LUKS1, cipher, cipher_mode, NULL, key, key_size, &params), "Context is already formatted");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
        // check active status without header
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        NULL_(crypt_get_type(cd));
        OK_(strcmp(cipher, crypt_get_cipher(cd)));
        OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd)));
@@ -902,7 +929,7 @@ static void AddDeviceLuks(void)
        CRYPT_FREE(cd);
        // there we've got uuid mismatch
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, DMDIR H_DEVICE));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        NULL_(crypt_get_type(cd));
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0), "Device is active");
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0), "Device is active");
@@ -918,14 +945,14 @@ static void AddDeviceLuks(void)
        // even with no keyslots defined it can be activated by volume key
        OK_(crypt_volume_key_verify(cd, key, key_size));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_2));
 
        // now with keyslot
        EQ_(7, crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)));
        EQ_(CRYPT_SLOT_ACTIVE_LAST, crypt_keyslot_status(cd, 7));
        EQ_(7, crypt_activate_by_passphrase(cd, CDEVICE_2, CRYPT_ANY_SLOT, passphrase, strlen(passphrase), 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_2));
 
        crypt_set_iteration_time(cd, 1);
@@ -1027,7 +1054,7 @@ static void UseTempVolumes(void)
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0), "not yet formatted");
        OK_(crypt_format(cd, CRYPT_LUKS1, "aes", "cbc-essiv:sha256", NULL, NULL, 16, NULL));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, NULL, 0, 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
 
        OK_(crypt_init_by_name(&cd, CDEVICE_2));
@@ -1069,7 +1096,7 @@ static void UseTempVolumes(void)
        FAIL_(crypt_volume_key_verify(cd, "xxx", 3), "cannot verify key with plain");
        FAIL_(crypt_activate_by_volume_key(cd, CDEVICE_2, "xxx", 3, 0), "wrong key length");
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_2, "volumekeyvolumek", 16, 0));
-       EQ_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_2), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_2));
        CRYPT_FREE(cd);
 }
@@ -1105,7 +1132,7 @@ static void LuksHeaderRestore(void)
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
        FAIL_(crypt_header_restore(cd, CRYPT_PLAIN, VALID_HEADER), "Cannot restore header to PLAIN type device");
        FAIL_(crypt_header_restore(cd, CRYPT_LUKS1, VALID_HEADER), "Cannot restore header over PLAIN type device");
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1211,7 +1238,7 @@ static void LuksHeaderLoad(void)
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(!crypt_get_metadata_device_name(cd));
        EQ_(strcmp(DMDIR H_DEVICE, crypt_get_metadata_device_name(cd)), 0);
        OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1313,7 +1340,7 @@ static void LuksHeaderBackup(void)
        OK_(crypt_header_restore(cd, CRYPT_LUKS1, BACKUP_FILE));
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, key, key_size, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1322,7 +1349,7 @@ static void LuksHeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1330,7 +1357,7 @@ static void LuksHeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1342,7 +1369,7 @@ static void LuksHeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 0, passphrase, strlen(passphrase), 0), 0);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1350,7 +1377,7 @@ static void LuksHeaderBackup(void)
        OK_(crypt_load(cd, CRYPT_LUKS1, NULL));
        OK_(crypt_set_data_device(cd, DMDIR L_DEVICE_OK));
        EQ_(crypt_activate_by_passphrase(cd, CDEVICE_1, 7, passphrase, strlen(passphrase), 0), 7);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1395,7 +1422,7 @@ static void ResizeDeviceLuks(void)
        FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small");
        if (!t_device_size(DMDIR CDEVICE_1, &r_size))
                EQ_(1000, r_size >> SECTOR_SHIFT);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1415,7 +1442,7 @@ static void ResizeDeviceLuks(void)
        FAIL_(crypt_resize(cd, CDEVICE_1, 1001), "Device too small");
        if (!t_device_size(DMDIR CDEVICE_1, &r_size))
                EQ_(1000, r_size >> SECTOR_SHIFT);
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        OK_(crypt_deactivate(cd, CDEVICE_1));
        CRYPT_FREE(cd);
 
@@ -1750,7 +1777,7 @@ static void TcryptTest(void)
        CRYPT_FREE(cd);
 
        OK_(crypt_init_by_name_and_header(&cd, CDEVICE_1, NULL));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
 
        FAIL_(crypt_volume_key_get(cd, CRYPT_ANY_SLOT, key, &key_size, NULL, 0), "Need crypt_load");
 
@@ -1837,7 +1864,7 @@ static void IntegrityTest(void)
        params.tag_size = 4;
        OK_(crypt_load(cd, CRYPT_INTEGRITY, &params));
        OK_(crypt_activate_by_volume_key(cd, CDEVICE_1, NULL, 0, 0));
-       EQ_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
+       GE_(crypt_status(cd, CDEVICE_1), CRYPT_ACTIVE);
        CRYPT_FREE(cd);
 
        memset(&ip, 0, sizeof(ip));
index d1d9b00..91b47b7 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * cryptsetup library API check functions
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
- * Copyright (C) 2016-2020 Ondrej Kozina
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
+ * Copyright (C) 2016-2021 Ondrej Kozina
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -61,6 +61,7 @@ void check_ok(int status, int line, const char *func);
 void check_ok_return(int status, int line, const char *func);
 void check_ko(int status, int line, const char *func);
 void check_equal(int line, const char *func, int64_t x, int64_t y);
+void check_ge_equal(int line, const char *func, int64_t x, int64_t y);
 void check_null(int line, const char *func, const void *x);
 void check_notnull(int line, const char *func, const void *x);
 void xlog(const char *msg, const char *tst, const char *func, int line, const char *txt);
@@ -79,6 +80,10 @@ void xlog(const char *msg, const char *tst, const char *func, int line, const ch
                             xlog("(equal)  ", #x " == " #y, __FUNCTION__, __LINE__, NULL); \
                             if (_x != _y) check_equal(__LINE__, __FUNCTION__, _x, _y); \
                        } while(0)
+#define GE_(x, y)      do { int64_t _x = (x), _y = (y); \
+                            xlog("(g_equal)", #x " == " #y, __FUNCTION__, __LINE__, NULL); \
+                            if (_x < _y) check_ge_equal(__LINE__, __FUNCTION__, _x, _y); \
+                       } while(0)
 #define NULL_(x)       do { xlog("(null)   ", #x, __FUNCTION__, __LINE__, NULL); \
                             check_null(__LINE__, __FUNCTION__, (x)); \
                        } while(0)
index 38efd0b..c8210b5 100755 (executable)
@@ -7,6 +7,9 @@ CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
 TST_DIR=bitlk-images
 MAP=bitlktst
 
+CRYPTSETUP_VALGRIND=../.libs/cryptsetup
+CRYPTSETUP_LIB_VALGRIND=../.libs
+
 [ -z "$srcdir" ] && srcdir="."
 
 function remove_mapping()
@@ -59,6 +62,10 @@ function check_dump()
                 # smart card protected VMK GUID
                 dump_sc_vmk=$(echo "$dump" | grep "VMK protected with smart card" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
                 [ ! -z "$SC_VMK_GUID" -a "$dump_sc_vmk" = "$SC_VMK_GUID" ] || fail " smart card protected VMK GUID check from dump failed."
+       elif echo "$file" | grep -q -e "startup-key"; then
+                # startup key protected VMK GUID
+                dump_sk_vmk=$(echo "$dump" | grep "VMK protected with startup key" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
+                [ ! -z "$SK_VMK_GUID" -a "$dump_sk_vmk" = "$SK_VMK_GUID" ] || fail " startup key protected VMK GUID check from dump failed."
         else
                 # password protected VMK GUID
                 dump_pw_vmk=$(echo "$dump" | grep "VMK protected with passphrase" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
@@ -71,9 +78,23 @@ function check_dump()
 
 }
 
+function valgrind_setup()
+{
+       which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind."
+       [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
+       export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
+}
+
+function valgrind_run()
+{
+       INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
+}
+
 export LANG=C
 [ ! -d $TST_DIR ] && tar xJSf $srcdir/bitlk-images.tar.xz --no-same-owner
 
+[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
+
 echo "HEADER CHECK"
 for file in $(ls $TST_DIR/bitlk-*) ; do
        echo -n " $file"
@@ -117,4 +138,25 @@ for file in $(ls $TST_DIR/bitlk-*) ; do
                [ "$sha256sum" = "$SHA256SUM" ] || fail " SHA256 sum check failed."
                echo " [OK]"
        done
+
+       # startup key test -- we need to use BEK file from the archive
+       if echo "$file" | grep -q -e "startup-key"; then
+               echo -n " $file"
+               bek_file=$(echo $SK_VMK_GUID.BEK | tr /a-z/ /A-Z/)
+               $CRYPTSETUP bitlkOpen -r $file --test-passphrase --key-file $TST_DIR/$bek_file
+               ret=$?
+               [ $ret -eq 1 ] && echo " [N/A]" && continue
+               $CRYPTSETUP bitlkOpen -r $file $MAP --key-file $TST_DIR/$bek_file >/dev/null 2>&1
+               ret=$?
+               [ $ret -eq 0 ] || fail " failed to open $file ($ret)"
+               $CRYPTSETUP status $MAP >/dev/null || fail
+               $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
+               uuid=$(lsblk -n -o UUID /dev/mapper/$MAP)
+               sha256sum=$(sha256sum /dev/mapper/$MAP | cut -d" " -f1)
+               $CRYPTSETUP remove $MAP || fail
+               [ "$uuid" = "$UUID" ] || fail " UUID check failed."
+               [ "$sha256sum" = "$SHA256SUM" ] || fail " SHA256 sum check failed."
+               echo " [OK]"
+
+       fi
 done
index e3f07d7..eea33ed 100644 (file)
Binary files a/tests/bitlk-images.tar.xz and b/tests/bitlk-images.tar.xz differ
index a61453e..6059880 100755 (executable)
@@ -3,6 +3,7 @@
 PS4='$LINENO:'
 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
+CRYPTSETUP_RAW=$CRYPTSETUP
 
 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
 CRYPTSETUP_LIB_VALGRIND=../.libs
@@ -189,19 +190,28 @@ function add_scsi_device() {
 
 function valgrind_setup()
 {
+       [ -n "$VALG" ] || return
        which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind."
        [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
        export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
+       CRYPTSETUP=valgrind_run
+       CRYPTSETUP_RAW="./valg.sh ${CRYPTSETUP_VALGRIND}"
 }
 
 function valgrind_run()
 {
-       INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
+       export INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}"
+       $CRYPTSETUP_RAW "$@"
 }
 
-export LANG=C
+function expect_run()
+{
+       export INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}"
+       expect "$@"
+}
 
-[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
+export LANG=C
+valgrind_setup
 
 # LUKS non-root-tests
 if [ $(id -u) != 0 ]; then
@@ -702,6 +712,12 @@ echo $PWDW | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
 [ $? -ne 2 ] && fail "luksResume should return EPERM exit code"
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME  || fail
 $CRYPTSETUP -q luksClose $DEV_NAME || fail
+echo | $CRYPTSETUP -q luksFormat -c null $FAST_PBKDF_OPT --type luks1 $LOOPDEV || fail
+echo | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
+$CRYPTSETUP luksSuspend $DEV_NAME || fail
+$CRYPTSETUP -q status  $DEV_NAME | grep -q "(suspended)" || fail
+echo | $CRYPTSETUP luksResume $DEV_NAME || fail
+$CRYPTSETUP -q luksClose $DEV_NAME || fail
 
 prepare "[27] luksOpen with specified key slot number" wipe
 # first, let's try passphrase option
@@ -751,7 +767,7 @@ $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
 $CRYPTSETUP luksSuspend $DEV_NAME --header $HEADER_IMG || fail
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
 $CRYPTSETUP luksSuspend $DEV_NAME || fail
-echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME && fail
+echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
 $CRYPTSETUP luksClose $DEV_NAME || fail
 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 5 _fakedev_ --header $HEADER_IMG $KEY5 || fail
@@ -800,11 +816,13 @@ which expect >/dev/null 2>&1 || skip "WARNING: expect tool missing, interactive
 
 prepare "[32] Interactive password retry from terminal." new
 EXPECT_DEV=$(losetup $LOOPDEV | sed -e "s/.*(\(.*\))/\1/")
+EXPECT_TIMEOUT=10
+[ -n "$VALG" ] && EXPECT_TIMEOUT=60
 
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksOpen -v -T 2 $LOOPDEV $DEV_NAME
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksOpen -v -T 2 $LOOPDEV $DEV_NAME
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0 x\n"
@@ -822,10 +840,10 @@ check_exists
 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
 
 prepare "[33] Interactive unsuccessful password retry from terminal." new
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksOpen -v -T 2 $LOOPDEV $DEV_NAME
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksOpen -v -T 2 $LOOPDEV $DEV_NAME
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0 x\n"
@@ -840,10 +858,10 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 
 prepare "[34] Interactive kill of last key slot." new
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksKillSlot -v $LOOPDEV 0
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksKillSlot -v $LOOPDEV 0
 expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
 send "YES\n"
 expect timeout abort "Enter any remaining passphrase:"
@@ -851,7 +869,7 @@ sleep 0.1
 send "$PWD0\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksKillSlot -v $LOOPDEV 0
+eval spawn $CRYPTSETUP_RAW luksKillSlot -v $LOOPDEV 0
 expect timeout abort "Keyslot 0 is not active."
 expect timeout abort eof
 exit
@@ -859,10 +877,10 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 
 prepare "[35] Interactive format of device." wipe
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksFormat --type luks1 $FAST_PBKDF_OPT -v $LOOPDEV
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksFormat --type luks1 $FAST_PBKDF_OPT -v $LOOPDEV
 expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
 send "YES\n"
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
@@ -873,7 +891,7 @@ sleep 0.1
 send "$PWD0\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksOpen -v $LOOPDEV --test-passphrase
+eval spawn $CRYPTSETUP_RAW luksOpen -v $LOOPDEV --test-passphrase
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0\n"
@@ -884,15 +902,15 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 
 prepare "[36] Interactive unsuccessful format of device." new
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP erase -v $LOOPDEV
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW erase -v $LOOPDEV
 expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
 send "YES\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksFormat --type luks1 $FAST_PBKDF_OPT -v $LOOPDEV
+eval spawn $CRYPTSETUP_RAW luksFormat --type luks1 $FAST_PBKDF_OPT -v $LOOPDEV
 expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
 send "YES\n"
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
@@ -903,7 +921,7 @@ sleep 0.1
 send "$PWD0 x\n"
 expect timeout abort "Passphrases do not match."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksOpen -v $LOOPDEV -T 1 --test-passphrase
+eval spawn $CRYPTSETUP_RAW luksOpen -v $LOOPDEV -T 1 --test-passphrase
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0\n"
@@ -914,10 +932,10 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 
 prepare "[37] Interactive add key." new
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksAddKey -S 2 $FAST_PBKDF_OPT -v $LOOPDEV
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksAddKey -S 2 $FAST_PBKDF_OPT -v $LOOPDEV
 expect timeout abort "Enter any existing passphrase:"
 sleep 0.1
 send "$PWD0\n"
@@ -929,16 +947,16 @@ sleep 0.1
 send "$PWD1\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksOpen $FAST_PBKDF_OPT -v $LOOPDEV --test-passphrase
+eval spawn $CRYPTSETUP_RAW luksOpen $FAST_PBKDF_OPT -v $LOOPDEV --test-passphrase
 expect timeout abort "Enter passphrase"
 sleep 0.1
 send "$PWD1\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksKillSlot -v $LOOPDEV 1
+eval spawn $CRYPTSETUP_RAW luksKillSlot -v $LOOPDEV 1
 expect timeout abort "Keyslot 1 is not active."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksKillSlot -v $LOOPDEV 2
+eval spawn $CRYPTSETUP_RAW luksKillSlot -v $LOOPDEV 2
 expect timeout abort "Enter any remaining passphrase:"
 sleep 0.1
 send "$PWD0\n"
@@ -949,10 +967,10 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 
 prepare "[38] Interactive change key." new
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT -v $LOOPDEV
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksChangeKey $FAST_PBKDF_OPT -v $LOOPDEV
 expect timeout abort "Enter passphrase to be changed:"
 sleep 0.1
 send "$PWD0\n"
@@ -964,7 +982,7 @@ sleep 0.1
 send "$PWD1\n"
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksOpen -v $LOOPDEV --test-passphrase
+eval spawn $CRYPTSETUP_RAW luksOpen -v $LOOPDEV --test-passphrase
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD1\n"
@@ -976,13 +994,13 @@ EOF
 
 prepare "[39] Interactive suspend and resume." new
 echo $PWD0 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
-expect - >/dev/null <<EOF
+expect_run - >/dev/null <<EOF
 proc abort {} { send_error "Timeout. "; exit 2 }
-set timeout 10
-eval spawn $CRYPTSETUP luksSuspend -v $DEV_NAME
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksSuspend -v $DEV_NAME
 expect timeout abort "Command successful."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksResume -v -T 3  $DEV_NAME
+eval spawn $CRYPTSETUP_RAW luksResume -v -T 3  $DEV_NAME
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0 x\n"
@@ -996,7 +1014,7 @@ sleep 0.1
 send "$PWD0 y\n"
 expect timeout abort "No key available with this passphrase."
 expect timeout abort eof
-eval spawn $CRYPTSETUP luksResume -v $DEV_NAME
+eval spawn $CRYPTSETUP_RAW luksResume -v $DEV_NAME
 expect timeout abort "Enter passphrase for $EXPECT_DEV:"
 sleep 0.1
 send "$PWD0\n"
@@ -1007,5 +1025,41 @@ EOF
 [ $? -eq 0 ] || fail "Expect script failed."
 $CRYPTSETUP remove $DEV_NAME || fail
 
+prepare "[40] Long passphrase from TTY." wipe
+EXPECT_DEV=$(losetup $LOOPDEV | sed -e "s/.*(\(.*\))/\1/")
+
+# Password of maximal length 512 characters
+LONG_PWD=\
+"0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF"\
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do "\
+"eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut e"\
+"nim ad minim veniam, quis nostrud exercitation ullamco laboris n"\
+"isi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"\
+" reprehenderit in voluptate velit esse cillum dolore eu fugiat n"\
+"ulla pariatur. Excepteur sint occaecat cupidatat non proident, s"\
+"unt in culpa qui officia deserunt mollit anim id est laborum.DEF"
+
+echo -n "$LONG_PWD" >$KEYE
+
+expect_run - >/dev/null <<EOF
+proc abort {} { send_error "Timeout. "; exit 2 }
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW luksFormat --type luks1 $FAST_PBKDF_OPT -v $LOOPDEV
+expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
+send "YES\n"
+expect timeout abort "Enter passphrase for $EXPECT_DEV:"
+sleep 0.1
+send "$LONG_PWD\n"
+expect timeout abort "Verify passphrase:"
+sleep 0.1
+send "$LONG_PWD\n"
+expect timeout abort "Command successful."
+expect timeout abort eof
+eval spawn $CRYPTSETUP_RAW luksOpen -v $LOOPDEV --test-passphrase --key-file $KEYE
+expect timeout abort "Command successful."
+expect timeout abort eof
+EOF
+[ $? -eq 0 ] || fail "Expect script failed."
+
 remove_mapping
 exit 0
index fd8d6f0..1612569 100755 (executable)
@@ -29,6 +29,7 @@ PWDW="rUkL4RUryBom"
 TEST_KEYRING_NAME="compattest2_keyring"
 TEST_TOKEN0="compattest2_desc0"
 TEST_TOKEN1="compattest2_desc1"
+TEST_TOKEN2="compattest2_desc2"
 VK_FILE="compattest2_vkfile"
 IMPORT_TOKEN="{\"type\":\"some_type\",\"keyslots\":[],\"base64_data\":\"zxI7vKB1Qwl4VPB4D-N-OgcC14hPCG0IDu8O7eCqaQ\"}"
 TOKEN_FILE0=test-token-file0
@@ -496,6 +497,18 @@ echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fai
 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
 if dm_crypt_keyring_support; then
        echo | $CRYPTSETUP -q resize --size 100 $DEV_NAME 2>/dev/null && fail
+       if [ $HAVE_KEYRING -gt 0 -a -d /proc/sys/kernel/keys ]; then
+               test_and_prepare_keyring
+               load_key user $TEST_TOKEN2 $PWD1 "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped."
+               $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN2 --token-id 1 || fail
+               $CRYPTSETUP -q resize --size 99 $DEV_NAME <&- || fail
+               $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "99 sectors" || fail
+               #replace kernel key with wrong pass
+               load_key user $TEST_TOKEN2 $PWD2 "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped."
+               # must fail due to --token-only
+               echo $PWD1 | $CRYPTSETUP -q resize --token-only --size 100 $DEV_NAME && fail
+               $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" && fail
+       fi
 fi
 echo $PWD1 | $CRYPTSETUP -q resize --size 100 $DEV_NAME || fail
 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
@@ -649,6 +662,12 @@ echo $PWDW | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
 [ $? -ne 2 ] && fail "luksResume should return EPERM exit code"
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME  || fail
 $CRYPTSETUP -q luksClose $DEV_NAME || fail
+echo $PWD1 | $CRYPTSETUP -q luksFormat -c null $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
+echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
+$CRYPTSETUP luksSuspend $DEV_NAME || fail
+$CRYPTSETUP -q status  $DEV_NAME | grep -q "(suspended)" || fail
+echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME  || fail
+$CRYPTSETUP -q luksClose $DEV_NAME || fail
 
 prepare "[27] luksOpen with specified key slot number" wipe
 # first, let's try passphrase option
@@ -705,7 +724,7 @@ $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
 $CRYPTSETUP luksSuspend $DEV_NAME --header $HEADER_IMG || fail
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
 $CRYPTSETUP luksSuspend $DEV_NAME || fail
-echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME && fail
+echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
 $CRYPTSETUP luksClose $DEV_NAME || fail
 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT -S 5 _fakedev_ --header $HEADER_IMG $KEY5 || fail
@@ -713,6 +732,12 @@ $CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "5: luks2" || fail
 $CRYPTSETUP luksKillSlot -q _fakedev_ --header $HEADER_IMG 5 || fail
 $CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "5: luks2" && fail
 echo $PWD1 | $CRYPTSETUP open --test-passphrase $HEADER_IMG || fail
+rm $HEADER_IMG || fail
+# create exactly 16 MiBs LUKS2 header
+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
+SIZE=$(stat --printf=%s $HEADER_IMG)
+test $SIZE -eq 16777216 || fail
+$CRYPTSETUP -q luksDump  $HEADER_IMG | grep -q "offset: $((512 * 131072)) \[bytes\]" || fail
 
 prepare "[29] Repair metadata" wipe
 xz -dk $HEADER_LUKS2_PV.xz
@@ -1017,5 +1042,14 @@ echo $PWD3 | $CRYPTSETUP luksConvertKey --key-slot 22 $LOOPDEV --keyslot-cipher
 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "22: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "22: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
 
+prepare "[42] Some encryption compatibility mode tests" wipe
+CIPHERS="aes-ecb aes-cbc-null aes-cbc-plain64 aes-cbc-essiv:sha256 aes-xts-plain64"
+key_size=256
+for cipher in $CIPHERS ; do
+       echo -n "[$cipher/$key_size]"
+       $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --cipher $cipher --key-size $key_size || fail
+done
+echo
+
 remove_mapping
 exit 0
index a8f3797..004e426 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * cryptsetup crypto backend test vectors
  *
- * Copyright (C) 2018-2020 Milan Broz
+ * Copyright (C) 2018-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -251,7 +251,7 @@ struct hash_test_vector {
                const char *name;
                unsigned int length;
                const char *out;
-       } out[6];
+       } out[8];
 };
 
 static struct hash_test_vector hash_test_vectors[] = {
@@ -270,6 +270,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\xc5\x30\x23\x21\x30\xd4\x07\xf8\x9a\xfe\xe0\x96\x49\x97\xf7\xa7"
                           "\x3e\x83\xbe\x69\x8b\x28\x8f\xeb\xcf\x88\xe3\xe0\x3c\x4f\x07\x57"
                           "\xea\x89\x64\xe5\x9b\x63\xd9\x37\x08\xb1\x38\xcc\x42\xa6\x6e\xb3" },
+       { "blake2b-512",64,"\x78\x6a\x02\xf7\x42\x01\x59\x03\xc6\xc6\xfd\x85\x25\x52\xd2\x72"
+                          "\x91\x2f\x47\x40\xe1\x58\x47\x61\x8a\x86\xe2\x17\xf7\x1f\x54\x19"
+                          "\xd2\x5e\x10\x31\xaf\xee\x58\x53\x13\x89\x64\x44\x93\x4e\xb0\x4b"
+                          "\x90\x3a\x68\x5b\x14\x48\xb7\x55\xd5\x6f\x70\x1a\xfe\x9b\xe2\xce" },
+       { "blake2s-256",32,"\x69\x21\x7a\x30\x79\x90\x80\x94\xe1\x11\x21\xd0\x42\x35\x4a\x7c"
+                          "\x1f\x55\xb6\x48\x2c\xa1\xa5\x1e\x1b\x25\x0d\xfd\x1e\xd0\xee\xf9" },
 }},{
        "a", 1, {
        { "crc32",      4, "\xe8\xb7\xbe\x43" },
@@ -285,6 +291,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\xf0\xdf\xf5\x94\x13\x14\x5e\x69\x73\xc4\x50\x01\xd0\x08\x7b\x42"
                           "\xd1\x1b\xc6\x45\x41\x3a\xef\xf6\x3a\x42\x39\x1a\x39\x14\x5a\x59"
                           "\x1a\x92\x20\x0d\x56\x01\x95\xe5\x3b\x47\x85\x84\xfd\xae\x23\x1a" },
+       { "blake2b-512",64,"\x33\x3f\xcb\x4e\xe1\xaa\x7c\x11\x53\x55\xec\x66\xce\xac\x91\x7c"
+                          "\x8b\xfd\x81\x5b\xf7\x58\x7d\x32\x5a\xec\x18\x64\xed\xd2\x4e\x34"
+                          "\xd5\xab\xe2\xc6\xb1\xb5\xee\x3f\xac\xe6\x2f\xed\x78\xdb\xef\x80"
+                          "\x2f\x2a\x85\xcb\x91\xd4\x55\xa8\xf5\x24\x9d\x33\x08\x53\xcb\x3c" },
+       { "blake2s-256",32,"\x4a\x0d\x12\x98\x73\x40\x30\x37\xc2\xcd\x9b\x90\x48\x20\x36\x87"
+                          "\xf6\x23\x3f\xb6\x73\x89\x56\xe0\x34\x9b\xd4\x32\x0f\xec\x3e\x90" },
 }},{
        "abc", 3, {
        { "crc32",      4, "\x35\x24\x41\xc2" },
@@ -300,6 +312,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\xf3\x04\x3e\x3a\x73\x1b\xce\x72\x1a\xe1\xb3\x03\xd9\x7e\x6d\x4c"
                           "\x71\x81\xee\xbd\xb6\xc5\x7e\x27\x7d\x0e\x34\x95\x71\x14\xcb\xd6"
                           "\xc7\x97\xfc\x9d\x95\xd8\xb5\x82\xd2\x25\x29\x20\x76\xd4\xee\xf5" },
+       { "blake2b-512",64,"\xba\x80\xa5\x3f\x98\x1c\x4d\x0d\x6a\x27\x97\xb6\x9f\x12\xf6\xe9"
+                          "\x4c\x21\x2f\x14\x68\x5a\xc4\xb7\x4b\x12\xbb\x6f\xdb\xff\xa2\xd1"
+                          "\x7d\x87\xc5\x39\x2a\xab\x79\x2d\xc2\x52\xd5\xde\x45\x33\xcc\x95"
+                          "\x18\xd3\x8a\xa8\xdb\xf1\x92\x5a\xb9\x23\x86\xed\xd4\x00\x99\x23" },
+       { "blake2s-256",32,"\x50\x8c\x5e\x8c\x32\x7c\x14\xe2\xe1\xa7\x2b\xa3\x4e\xeb\x45\x2f"
+                          "\x37\x45\x8b\x20\x9e\xd6\x3a\x29\x4d\x99\x9b\x4c\x86\x67\x59\x82" },
 }},{
        "abcdefghijklmnopqrstuvwxyz", 26, {
        { "crc32",      4, "\x4c\x27\x50\xbd" },
@@ -315,6 +333,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\x8d\x38\x63\x1e\xad\x42\x38\xf5\x44\x2e\xe1\x3b\x80\x54\xe4\x1b"
                           "\x08\xbf\x2a\x92\x51\xc3\x0b\x6a\x0b\x8a\xae\x86\x17\x7a\xb4\xa6"
                           "\xf6\x8f\x67\x3e\x72\x07\x86\x5d\x5d\x98\x19\xa3\xdb\xa4\xeb\x3b" },
+       { "blake2b-512",64,"\xc6\x8e\xde\x14\x3e\x41\x6e\xb7\xb4\xaa\xae\x0d\x8e\x48\xe5\x5d"
+                          "\xd5\x29\xea\xfe\xd1\x0b\x1d\xf1\xa6\x14\x16\x95\x3a\x2b\x0a\x56"
+                          "\x66\xc7\x61\xe7\xd4\x12\xe6\x70\x9e\x31\xff\xe2\x21\xb7\xa7\xa7"
+                          "\x39\x08\xcb\x95\xa4\xd1\x20\xb8\xb0\x90\xa8\x7d\x1f\xbe\xdb\x4c" },
+       { "blake2s-256",32,"\xbd\xf8\x8e\xb1\xf8\x6a\x0c\xdf\x0e\x84\x0b\xa8\x8f\xa1\x18\x50"
+                          "\x83\x69\xdf\x18\x6c\x73\x55\xb4\xb1\x6c\xf7\x9f\xa2\x71\x0a\x12" },
 }},{
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62, {
        { "crc32",      4, "\x1f\xc2\xe6\xd2" },
@@ -330,6 +354,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\x1d\xd7\xc2\x8c\xde\xc0\x66\xcc\x6a\xf4\x2e\x40\xf8\x2f\x3a\x1e"
                           "\x08\xeb\xa2\x66\x29\x12\x9d\x8f\xb7\xcb\x57\x21\x1b\x92\x81\xa6"
                           "\x55\x17\xcc\x87\x9d\x7b\x96\x21\x42\xc6\x5f\x5a\x7a\xf0\x14\x67" },
+       { "blake2b-512",64,"\x99\x96\x48\x02\xe5\xc2\x5e\x70\x37\x22\x90\x5d\x3f\xb8\x00\x46"
+                          "\xb6\xbc\xa6\x98\xca\x9e\x2c\xc7\xe4\x9b\x4f\xe1\xfa\x08\x7c\x2e"
+                          "\xdf\x03\x12\xdf\xbb\x27\x5c\xf2\x50\xa1\xe5\x42\xfd\x5d\xc2\xed"
+                          "\xd3\x13\xf9\xc4\x91\x12\x7c\x2e\x8c\x0c\x9b\x24\x16\x8e\x2d\x50" },
+       { "blake2s-256",32,"\xc7\x54\x39\xea\x17\xe1\xde\x6f\xa4\x51\x0c\x33\x5d\xc3\xd3\xf3"
+                          "\x43\xe6\xf9\xe1\xce\x27\x73\xe2\x5b\x41\x74\xf1\xdf\x8b\x11\x9b" },
 }},{
        "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56, {
        { "crc32",      4, "\x17\x1a\x3f\x5f" },
@@ -345,6 +375,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\x02\x7f\x61\x36\x6a\x14\x07\x26\x2d\xc2\xa6\xa3\x45\xd9\xe2\x40"
                           "\xc0\x17\xc1\x83\x3d\xb1\xe6\xdb\x6a\x46\xbd\x44\x4b\x0c\x69\x52"
                           "\x0c\x85\x6e\x7c\x6e\x9c\x36\x6d\x15\x0a\x7d\xa3\xae\xb1\x60\xd1" },
+       { "blake2b-512",64,"\x72\x85\xff\x3e\x8b\xd7\x68\xd6\x9b\xe6\x2b\x3b\xf1\x87\x65\xa3"
+                          "\x25\x91\x7f\xa9\x74\x4a\xc2\xf5\x82\xa2\x08\x50\xbc\x2b\x11\x41"
+                          "\xed\x1b\x3e\x45\x28\x59\x5a\xcc\x90\x77\x2b\xdf\x2d\x37\xdc\x8a"
+                          "\x47\x13\x0b\x44\xf3\x3a\x02\xe8\x73\x0e\x5a\xd8\xe1\x66\xe8\x88" },
+       { "blake2s-256",32,"\x6f\x4d\xf5\x11\x6a\x6f\x33\x2e\xda\xb1\xd9\xe1\x0e\xe8\x7d\xf6"
+                          "\x55\x7b\xea\xb6\x25\x9d\x76\x63\xf3\xbc\xd5\x72\x2c\x13\xf1\x89" },
 }},{
        "message digest", 14, {
        { "crc32",      4, "\x20\x15\x9d\x7f" },
@@ -360,6 +396,12 @@ static struct hash_test_vector hash_test_vectors[] = {
                           "\x83\x8d\x00\x03\x22\x30\xf5\x3c\xe1\xf5\x70\x0c\x0f\xfb\x4d\x3b"
                           "\x84\x21\x55\x76\x59\xef\x55\xc1\x06\xb4\xb5\x2a\xc5\xa4\xaa\xa6"
                           "\x92\xed\x92\x00\x52\x83\x8f\x33\x62\xe8\x6d\xbd\x37\xa8\x90\x3e" },
+       { "blake2b-512",64,"\x3c\x26\xce\x48\x7b\x1c\x0f\x06\x23\x63\xaf\xa3\xc6\x75\xeb\xdb"
+                          "\xf5\xf4\xef\x9b\xdc\x02\x2c\xfb\xef\x91\xe3\x11\x1c\xdc\x28\x38"
+                          "\x40\xd8\x33\x1f\xc3\x0a\x8a\x09\x06\xcf\xf4\xbc\xdb\xcd\x23\x0c"
+                          "\x61\xaa\xec\x60\xfd\xfa\xd4\x57\xed\x96\xb7\x09\xa3\x82\x35\x9a" },
+       { "blake2s-256",32,"\xfa\x10\xab\x77\x5a\xcf\x89\xb7\xd3\xc8\xa6\xe8\x23\xd5\x86\xf6"
+                          "\xb6\x7b\xdb\xac\x4c\xe2\x07\xfe\x14\x5b\x7d\x3a\xc2\x5c\xd2\x8c" },
 }}};
 
 /*
@@ -660,31 +702,37 @@ struct cipher_iv_test_vector {
        const char in_sha256[32];
        struct {
                size_t sector_size;
+               bool large_iv;
                const char out_sha256[32];
-       } out[4];
+       } out[7];
 };
 
 static struct cipher_iv_test_vector cipher_iv_test_vectors[] = {
 {
        "aes", "cbc",
        "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
-       "null", 0, 8192,
+       "null", UINT32_MAX-7, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
+       {       512, false,
                "\xfd\x05\xd0\x4d\x51\xb9\xd4\x87\xa4\x57\x9a\x62\x07\x39\xc9\x4a"
                "\x00\x90\x3e\xaf\xe8\xb2\xac\x12\xca\xeb\x58\xf9\x48\xf6\xef\x08"
-       },{
-               1024,
+       },{     1024, false,
                "\x55\x87\x5c\xde\x86\x6a\x8b\xab\x08\xbe\x5b\x38\x17\x53\xdf\xe5"
                "\x7e\xb9\x5f\x59\xaf\x07\xa4\xca\x6a\x24\xd1\x12\xa9\x15\x25\xf4"
-       },{
-               2048,
+       },{     1024, true,
+               "\x55\x87\x5c\xde\x86\x6a\x8b\xab\x08\xbe\x5b\x38\x17\x53\xdf\xe5"
+               "\x7e\xb9\x5f\x59\xaf\x07\xa4\xca\x6a\x24\xd1\x12\xa9\x15\x25\xf4"
+       },{     2048, false,
                "\x55\x5b\x8e\x74\x90\x9d\x0d\x4b\x74\x8c\x16\x7e\x29\xcf\xa9\xa3"
                "\xf3\x42\x8b\x62\xda\x2d\x8c\xda\xc9\x32\xc8\x78\xe2\x7e\xd2\x70"
-       },{
-               4096,
+       },{     2048, true,
+               "\x55\x5b\x8e\x74\x90\x9d\x0d\x4b\x74\x8c\x16\x7e\x29\xcf\xa9\xa3"
+               "\xf3\x42\x8b\x62\xda\x2d\x8c\xda\xc9\x32\xc8\x78\xe2\x7e\xd2\x70"
+       },{     4096, false,
+               "\xc6\x45\xba\xe0\x40\x3a\x96\x09\x5e\x46\x0d\x19\x9d\x58\x4b\x93"
+               "\x78\xc5\x3f\xa4\x2e\x9e\xb0\x19\x04\x4b\x73\x26\xf4\xa6\xb5\xc3"
+       },{     4096, true,
                "\xc6\x45\xba\xe0\x40\x3a\x96\x09\x5e\x46\x0d\x19\x9d\x58\x4b\x93"
                "\x78\xc5\x3f\xa4\x2e\x9e\xb0\x19\x04\x4b\x73\x26\xf4\xa6\xb5\xc3"
        },
@@ -692,73 +740,88 @@ static struct cipher_iv_test_vector cipher_iv_test_vectors[] = {
 {
        "aes", "cbc",
        "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
-       "plain", UINT32_MAX-1, 8192,
+       "plain", UINT32_MAX-7, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
-               "\x4e\xa0\x9e\x5b\xf2\x27\x88\xdb\xe9\x05\xfb\x34\xa1\x88\x3b\xa3"
-               "\xda\x3e\x98\x50\x5d\x52\x68\x72\xc8\xac\x21\x88\x77\x35\x67\xad"
-       },{
-               1024,
-               "\x0e\x4d\xba\x93\xef\x44\x06\x3b\xac\x92\x29\x97\xde\x75\xe7\x18"
-               "\x26\x06\x5c\x8f\x23\xf2\xf8\xe5\xee\xfe\xf7\x9a\xdf\xc7\xd4\x2d"
-       },{
-               2048,
-               "\x6f\xd7\x56\x23\x51\x65\x20\x8f\xd2\x11\x35\xe1\xd2\x05\x40\xc3"
-               "\xd3\x18\xc1\xed\xf0\x1c\xbe\x0e\xdd\xd5\xca\x39\x21\xe0\xe4\x68"
-       },{
-               4096,
-               "\x80\xaa\x75\x69\x39\x29\x8f\x93\xbd\x09\x51\x96\x9b\x7d\x0f\xd0"
-               "\xf5\xb5\xdf\xf4\x48\x8c\x21\x26\x2e\xa7\x5c\x52\x75\xaa\xfc\xe3"
+       {       512, false,
+               "\x43\xfd\x6e\x25\x80\xb2\x13\xf5\xca\x71\x79\x18\xe4\x12\x91\xe0"
+               "\x6e\x37\x24\x32\xfd\x40\x4b\x42\xcb\xc1\x72\x1a\xc7\x5a\x19\xc8"
+       },{     1024, false,
+               "\x18\x79\x8d\xad\xf2\x7b\x38\x03\x27\xa5\x76\x19\x07\xcd\x12\x62"
+               "\x03\x36\x57\x85\x88\x50\xd0\x6c\xf6\xdf\xf1\xcf\xb8\xcf\x01\x77"
+       },{     1024, true,
+               "\xd0\x21\xcf\xb2\x7a\x01\xa8\x94\xb2\x87\x49\xc4\x9f\x9c\xb2\x3a"
+               "\x7c\xc4\x0d\x50\x08\xea\x4d\xfb\x87\xe4\x49\x8c\x1a\xd6\xec\x16"
+       },{     2048, false,
+               "\xa4\x89\x72\xb9\xcf\x78\x0c\x2a\xc8\x20\x4f\xd5\x13\xcb\x75\x30"
+               "\x90\xd2\x4a\xfd\xd3\xb2\xe8\xf0\xd2\xb7\x9d\x07\xbd\xa9\x70\x97"
+       },{     2048, true,
+               "\x2a\xcf\x07\x57\xc8\xea\x64\xc7\xd0\xd5\x28\xe6\xd1\x9a\xb5\x7d"
+               "\xe4\xb9\x63\xa2\x66\x5a\x3d\x14\xbd\x27\xc7\x09\xc0\x3c\xd9\x00"
+       },{     4096, false,
+               "\x12\x1b\x00\x54\x6e\x2d\x08\xc1\x15\x8b\x15\x57\xc5\x11\x30\x8b"
+               "\x63\x33\x64\xa0\xd1\x45\xd6\xcb\xdd\x49\x91\x04\x29\xe6\x93\x08"
+       },{     4096, true,
+               "\x44\xaa\xf1\x23\x0c\x34\x32\x2a\xfa\xe3\xf7\x95\x7a\x7c\xa8\x8b"
+               "\x34\x78\xbd\x12\x5c\xae\x4a\x65\x23\x8a\x6f\x3a\x96\x05\xfa\xae"
        },
 }},
 {
        "aes", "cbc",
        "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
-       "plain64", UINT32_MAX-1, 8192,
+       "plain64", UINT32_MAX-7, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
-               "\x60\xe5\xc9\xf8\xcd\x48\x06\x3c\x96\x11\xc8\xbf\x1e\x67\x60\x21"
-               "\x0c\x1f\x1a\x8b\x03\x00\x0d\xc1\x39\xc9\x27\xb8\xa8\x73\x17\x69"
-       },{
-               1024,
-               "\x25\xc1\x6b\x78\x8a\x22\x72\xb5\x5c\xfb\x3f\xe9\x16\x8b\x89\x96"
-               "\xfa\x80\xed\xf4\x83\xab\x1c\x79\xd2\xc7\x44\x27\x89\x99\xbb\x83"
-       },{
-               2048,
-               "\xb3\x42\x15\xd7\x86\xf6\xdf\x45\x49\x78\x18\x73\xa8\x7f\x3e\xb3"
-               "\x0b\xb8\x64\x91\x7c\xf1\x5a\x5b\x6d\x20\xbc\x0b\xe2\xab\x9b\xe6"
-       },{
-               4096,
-               "\x6b\x45\x5c\x24\x97\xb4\x87\x49\x99\x16\x69\x59\x72\x6b\xd7\xc9"
-               "\xc9\x90\xec\x7f\x3b\xfb\xe9\xea\x9d\xb4\x39\x62\x4d\x22\xe5\x43"
+       {       512, false,
+               "\xb3\x65\x7e\x6c\xba\xe0\x39\xcd\x1e\x1d\xaf\x65\xae\xb7\xda\x20"
+               "\x25\x17\x6a\x38\x75\x79\x68\x4c\x9a\x75\xc7\xfb\x2b\xa2\x17\xd2"
+       },{     1024, false,
+               "\x0a\xa3\x23\x72\x80\xd3\x76\x33\x8b\x2b\xae\x01\x03\x99\xa5\xca"
+               "\xcd\x95\x27\x40\x27\xec\x14\x90\xfd\x58\xb0\x08\x9b\x99\x27\xe2"
+       },{     1024, true,
+               "\xd0\x21\xcf\xb2\x7a\x01\xa8\x94\xb2\x87\x49\xc4\x9f\x9c\xb2\x3a"
+               "\x7c\xc4\x0d\x50\x08\xea\x4d\xfb\x87\xe4\x49\x8c\x1a\xd6\xec\x16"
+       },{     2048, false,
+               "\x67\x87\xeb\xed\xe1\x16\x85\x0a\x3f\xb2\x5c\xbc\x27\x61\x99\x52"
+               "\xfe\x64\xb9\xab\x24\xdd\x2c\x1a\x2c\xff\xcd\x7e\x2e\x74\xb5\xd4"
+       },{     2048, true,
+               "\x2a\xcf\x07\x57\xc8\xea\x64\xc7\xd0\xd5\x28\xe6\xd1\x9a\xb5\x7d"
+               "\xe4\xb9\x63\xa2\x66\x5a\x3d\x14\xbd\x27\xc7\x09\xc0\x3c\xd9\x00"
+       },{     4096, false,
+               "\xb2\xf1\x0e\x66\xd4\x58\x4e\x93\xe7\x98\xae\x9c\x3e\xa7\xad\xf2"
+               "\x93\x1a\xaa\x3c\xc4\x90\x12\x05\x00\x58\x25\x8f\x1f\x5d\xc6\x67"
+       },{     4096, true,
+               "\x44\xaa\xf1\x23\x0c\x34\x32\x2a\xfa\xe3\xf7\x95\x7a\x7c\xa8\x8b"
+               "\x34\x78\xbd\x12\x5c\xae\x4a\x65\x23\x8a\x6f\x3a\x96\x05\xfa\xae"
        },
 }},
 {
        "aes", "cbc",
        "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c", 16,
-       "plain64be", UINT32_MAX-1, 8192,
+       "plain64be", UINT32_MAX-7, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
-               "\x7f\xf9\xdb\xe1\xf6\x8c\x4d\xb4\x33\x9d\x61\x7b\x67\x5c\xef\x69"
-               "\xea\x94\x32\x3d\xa7\x70\x01\xe0\x06\x4c\xf8\x56\x64\xd0\xb7\xdf"
-       },{
-               1024,
-               "\x8e\x33\x0b\xa2\x45\x78\x5a\x3d\x5e\xf7\x74\xf9\x75\xb5\xbd\x06"
-               "\x38\x78\x74\x4f\xd8\xec\x11\x96\xf7\x92\x2b\xb1\x9a\xc2\xc3\xef"
-       },{
-               2048,
-               "\xad\x94\xcb\x8d\x96\x47\x10\x5c\x54\xce\x74\xca\xc8\xa3\xbd\x3e"
-               "\xdf\xa7\xf5\x14\x2a\x77\x4c\x50\xb8\x01\x46\xc3\x89\x50\xa7\x46"
-       },{
-               4096,
-               "\x3b\xdb\xbe\x01\x09\xd9\xda\xf7\x77\x85\xe2\x30\xaf\x21\xe7\x70"
-               "\x51\x2c\x6b\xcc\x75\x40\x7e\x8d\xdc\x90\xab\xaf\x6d\x2e\x0b\x49"
+       {       512, false,
+               "\x28\xbf\x09\xe1\x68\xcc\x05\x1b\x20\xaf\x8d\x01\x36\x21\x8a\x8d"
+               "\x7a\x94\x98\xa8\x99\xe9\xf4\x66\xd8\xb7\x99\xca\x04\x58\x83\x90"
+       },{     1024, false,
+               "\x9b\x74\xf7\xd5\x5a\x6b\xb2\x3a\xd2\x09\xdd\x80\x59\x28\x70\x8f"
+               "\x3a\x61\xf2\x14\xc3\x0d\xa8\xd7\xd9\xcb\x57\x26\x73\x88\x93\xd2"
+       },{     1024, true,
+               "\x36\xb5\x68\x08\x29\x55\xb9\xe9\x01\xc1\xa8\xcf\x3e\x5b\x00\x28"
+               "\xb6\xd1\x35\xc5\xf7\x0c\xf6\x59\xb5\x8f\xb9\xa2\x00\x43\x29\x48"
+       },{     2048, false,
+               "\x94\x4f\xc8\xb4\xfe\xad\xdc\x56\xf0\x62\x00\x8d\x52\x0b\x2d\x58"
+               "\xc0\x05\xd6\x1d\x47\x35\xc6\x6a\x42\xec\x98\xee\x21\x74\x7b\xe5"
+       },{     2048, true,
+               "\x14\x6b\xaa\x2f\xf4\xa8\x24\x3f\x4e\x92\x97\x1a\xca\x1c\xbb\x46"
+               "\xa7\x08\xbb\xc5\x95\xac\x73\x81\x25\x34\x33\x41\x95\x71\xd9\xe7"
+       },{     4096, false,
+               "\xa8\x17\x5d\x84\xc8\x16\x06\x7f\xa2\x68\xdd\x1e\x7d\x63\x34\x93"
+               "\x7b\x45\x2d\xf4\x10\x0b\x90\xfa\x14\x8b\x73\x86\xbc\x09\x4a\xe3"
+       },{     4096, true,
+               "\xe2\xc3\x30\xd8\xa1\xb3\xa8\xeb\xde\xdc\xfe\x9b\xe0\x0b\x62\x4e"
+               "\x38\x2f\xa1\x45\x0e\x8f\x6c\xf0\x4e\x88\x58\x17\x13\xb5\x10\x98"
        },
 }},
 {
@@ -767,22 +830,27 @@ static struct cipher_iv_test_vector cipher_iv_test_vectors[] = {
        "essiv:sha256", 0, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
+       {       512, false,
                "\xa5\x3e\x74\xc4\x1a\x5c\xf3\x6b\x63\x49\xd5\xd9\xbb\x7a\x89\x5a"
                "\xd5\x3e\x76\x6f\x4c\x2d\x0b\xd3\x8b\x5e\x0e\x91\xa3\x8c\x2a\xde"
-       },{
-               1024,
+       },{     1024, false,
                "\x41\x6b\xc6\x75\x2e\x99\x76\xa1\x83\xea\xd5\x97\x64\x0e\x24\x8c"
                "\x91\x17\x03\x38\xe7\xd8\x66\x64\xaa\xd7\x27\x50\x2a\xd3\x0b\xe6"
-       },{
-               2048,
+       },{     1024, true,
+               "\x02\x3c\xbe\xe6\x1e\x9a\xf3\x14\xab\x16\xff\x6f\xb6\xa2\x3e\x03"
+               "\xa1\xbd\xe9\xe4\xfa\x44\x5b\x22\xc6\x53\xe8\x60\x58\x15\x99\xea"
+       },{     2048, false,
                "\x84\xdc\x45\xd3\x61\x03\xa8\x51\x85\x5b\xef\xf8\x92\x6b\x12\x06"
                "\x2c\xfe\x75\x3e\xcf\x28\xd1\x8b\x4d\xcb\x88\x9e\x31\xb0\x0b\x92"
-       },{
-               4096,
+       },{     2048, true,
+               "\x4b\x9d\xe4\x3c\xe2\x4e\x7a\x13\x72\x02\x48\xf8\x7a\x7e\x15\xe8"
+               "\x3a\xc3\x92\x0b\xe8\x30\xac\xb7\x9a\xe0\xcf\xf9\xb1\xf5\x61\x5b"
+       },{     4096, false,
                "\xbb\x1b\xa3\xa9\x41\xbf\x17\xd8\x76\x19\x08\x8e\x3f\x50\xed\xfd"
                "\x57\x1d\xd2\xc2\x8a\x32\x01\xb9\xd9\x8a\xcc\x0d\xa0\x65\x8b\x6d"
+       },{     4096, true,
+               "\xa6\xdc\x7d\xc8\xc4\x9b\x78\x81\x72\xe9\xdd\x35\x6c\x07\xeb\x7b"
+               "\xd6\x56\x9e\xe4\xdf\xf5\xdd\x2e\x2c\x19\x8f\x63\x58\xdb\xa7\xd0"
        },
 }},
 {
@@ -791,22 +859,27 @@ static struct cipher_iv_test_vector cipher_iv_test_vectors[] = {
        "benbi", 0, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
+       {       512, false,
                "\x3c\xe3\x94\xe3\x6d\x68\x5b\xdb\x5a\x8d\x71\xbf\xd3\xa6\x68\xb9"
                "\x1f\x33\x0f\x97\xe2\xd6\xe8\xe2\xe1\xfc\x7e\x80\x28\xf1\x73\xbd"
-       },{
-               1024,
+       },{     1024, false,
                "\x0f\x27\xa7\xae\x31\x9e\x71\x02\x12\x16\x44\x5f\xbb\xc6\xcb\x78"
                "\xd4\x84\x49\xe0\x88\x85\x04\xbf\x6d\xea\x60\x76\x98\x34\x0a\x7e"
-       },{
-               2048,
+       },{     1024, true,
+               "\x3e\xf3\x08\x8d\x3b\x20\x4b\x51\x54\xde\x7f\x77\x5b\xcf\x02\x8b"
+               "\x0e\xb0\x74\x2e\x8e\x29\xfa\x5e\x86\xb4\xab\x65\x18\x59\x48\xb1"
+       },{     2048, false,
                "\xb0\x9a\xe5\x31\x5f\x2e\x9d\x13\x04\x08\x2a\x02\x71\x3d\xdb\x5d"
                "\xb2\xc9\x68\x5b\xdc\xd1\x38\xc2\x96\xb3\x3b\x72\xda\x9d\xcb\xe6"
-       },{
-               4096,
+       },{     2048, true,
+               "\x6f\x34\xf0\xc1\xea\x72\xe4\xdc\x91\x91\x78\xb3\x7c\xb0\x9d\x41"
+               "\x94\xf6\xb8\xad\x05\xc4\x0e\x49\x05\x31\x90\xf0\x56\xfe\x21\x3f"
+       },{     4096, false,
                "\xaa\x74\x7d\xd6\x73\xa7\x77\xe1\x7f\xb9\x76\xf7\x5c\xcf\xc0\xb7"
                "\xfa\x7b\xed\x15\xc2\x32\x7c\x27\xbb\x35\xfc\xfe\x12\xee\x14\x2d"
+       },{     4096, true,
+               "\x71\x1b\x3d\x26\xf4\x44\x82\x72\x1b\x7a\x65\x0b\x37\x8c\x94\x5b"
+               "\x1c\xd3\x30\x2f\xf6\xce\xa4\x24\x25\xeb\x9b\xb9\x83\xe5\x71\xbb"
        },
 }},
 {
@@ -815,22 +888,27 @@ static struct cipher_iv_test_vector cipher_iv_test_vectors[] = {
        "eboiv", 0, 8192,
        "\x9f\x1d\xcb\xc3\x5c\x35\x0d\x60\x27\xf9\x8b\xe0\xf5\xc8\xb4\x3b"
        "\x42\xca\x52\xb7\x60\x44\x59\xc0\xc4\x2b\xe3\xaa\x88\x91\x3d\x47", {
-       {
-               512,
+       {       512, false,
                "\x04\x4e\x92\x9f\x79\x66\xfe\x93\x1b\xa5\xb8\x02\xfe\x7e\xf9\x26"
                "\x7b\x64\x39\xe7\xb3\xca\xc4\x6e\xca\x27\xa0\x2f\xe2\xea\x91\x16"
-       },{
-               1024,
+       },{     1024, false,
                "\xb0\x4a\xa4\xb5\xd6\x45\x7a\x86\xe9\x43\x3d\xd6\x01\xf7\x68\x8e"
                "\xe6\x81\x8d\x50\x55\x18\x8e\x4b\xb6\xa7\x89\xdf\xe2\x4b\x94\xe2"
-       },{
-               2048,
+       },{     1024, true,
+               "\x95\x08\x4d\x4e\x89\xab\x91\x4e\xae\x56\x5d\xec\xf2\x78\x13\xb1"
+               "\x82\xf7\xc8\xb5\x03\xd6\xfa\xb0\xe3\xf9\xc1\x01\xc0\x0c\x35\xa4"
+       },{     2048, false,
                "\xd4\x00\x1f\x26\x18\xd1\x6d\xd5\xc4\xbf\x4a\x13\x30\xae\xd7\x4b"
                "\x33\x1e\xd5\xe8\x43\x2d\x95\x84\x67\x39\x04\x51\x5f\x1f\x49\xe4"
-       },{
-               4096,
+       },{     2048, true,
+               "\x89\x8d\xa2\xec\x45\x7f\xf0\xac\xfc\x70\xb6\x36\xf0\x89\xca\x86"
+               "\x6b\xbf\x09\xd2\x54\xa0\x7c\xbc\x17\xd3\x4e\xb8\x10\x8a\x3f\x5d"
+       },{     4096, false,
                "\xd1\xd7\x4f\x70\x9a\xa0\x22\x27\x60\xdb\x40\x5a\x84\xce\x89\x2c"
                "\x4f\x98\x55\xd2\x2d\xd1\xea\x9e\x47\xae\x8a\x83\xb5\x90\xbb\x49"
+       },{     4096, true,
+               "\xdb\xe7\xd2\x25\xb0\x4f\x5d\x36\x20\xc4\xc2\xb4\xe8\x7e\xae\xe9"
+               "\x95\x10\x45\x5d\xdd\xc4\xcd\x33\xad\xbd\x39\x49\xf2\x85\x82\x4c"
        },
 }}};
 
@@ -1106,12 +1184,12 @@ static int cipher_iv_test(void)
 
                        snprintf(mode_iv, sizeof(mode_iv)-2, "%s-%s", vector->cipher_mode, vector->iv_name);
                        r = crypt_storage_init(&storage, vector->out[j].sector_size, vector->cipher_name, mode_iv,
-                                              vector->key, vector->key_length);
+                                              vector->key, vector->key_length, vector->out[j].large_iv);
                        if (r == -ENOENT || r == -ENOTSUP) {
                                printf("[N/A]");
                                continue;
                        } else {
-                               printf("[%i]", (int)vector->out[j].sector_size);
+                               printf("[%i%s]", (int)vector->out[j].sector_size, vector->out[j].large_iv ? "L" : "");
                                if (r)
                                        return EXIT_FAILURE;
                        }
index b2530f7..493e125 100644 (file)
    fun:init_crypto
    ...
 }
-# following leaks/errors are addressed to libpopt...
-{
-  popt_read_error
-  Memcheck:Addr4
-  obj:/lib*/libpopt.so*
-  fun:poptGetNextOpt
-  fun:main
-}
-{
-  popt_leak_poptGetNextOpt_00
-  Memcheck:Leak
-  fun:realloc
-  fun:poptGetNextOpt
-  fun:main
-}
-{
-  popt_leak_poptGetNextOpt_01
-  Memcheck:Leak
-  fun:malloc
-  fun:poptGetNextOpt
-  fun:main
-}
index 0898b45..617f16a 100755 (executable)
@@ -17,7 +17,7 @@ cleanup() {
            umount -f $MNT_DIR 2>/dev/null
            rmdir $MNT_DIR 2>/dev/null
        fi
-       sleep 2
+       rmmod scsi_debug 2>/dev/null
 }
 
 fail()
@@ -36,8 +36,19 @@ skip()
        exit 77
 }
 
+add_device() {
+       modprobe scsi_debug $@ delay=0
+       [ $? -ne 0 ] && skip "This kernel seems to not support proper scsi_debug module."
+
+       sleep 1
+       SCSI_DEV=$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /)
+
+       [ -b "/dev/$SCSI_DEV" ] || fail "Cannot find $SCSI_DEV."
+}
+
 function dm_crypt_features()
 {
+       modprobe dm-crypt || fail "dm-crypt failed to load"
        VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv)
        [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version."
 
@@ -61,6 +72,9 @@ function dm_crypt_features()
        if [ $VER_MIN -gt 18 -o \( $VER_MIN -eq 18 -a $VER_PTC -ge 1 \) ]; then
                 test -d /proc/sys/kernel/keys && DM_KEYRING=1
        fi
+
+       [ $VER_MIN -lt 22 ] && return
+       DM_PERF_NO_WORKQUEUE=1
 }
 
 function dm_crypt_keyring_support()
@@ -119,11 +133,12 @@ if [ -z "$DM_PERF_CPU" ]; then
        echo "TEST SKIPPED: dmcrypt options not available"
        SKIP_COUNT=$((SKIP_COUNT+1))
 else
-       # plain
+       echo -n "PLAIN: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open -q --type plain --hash sha256 $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards "
        echo -e "$PWD1" | $CRYPTSETUP open -q --type plain --hash sha256 $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -141,12 +156,21 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q discards && fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt && fail
        echo -e "$PWD1" | $CRYPTSETUP refresh --hash sha256 $DEV $DEV_NAME2 2>/dev/null && fail
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh --hash sha256 -q $DEV_NAME --perf-no_read_workqueue --perf-no_write_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        $CRYPTSETUP close $DEV_NAME || fail
-       # LUKS
+       echo
+
+       echo -n "LUKS: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open --type luks1 $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards "
        echo -e "$PWD1" | $CRYPTSETUP open --type luks1 $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -162,9 +186,17 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q discards && fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt && fail
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME2 2>/dev/null && fail
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh $DEV_NAME  --perf-no_read_workqueue --perf-no_write_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        $CRYPTSETUP close $DEV_NAME || fail
+       echo
 
        format luks2
+       echo -n "LUKS2: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus --persistent || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
@@ -174,6 +206,7 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards [persistent flags] "
        echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards --persistent || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -211,11 +244,23 @@ else
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME --disable-keyring || fail
        $CRYPTSETUP status $DEV_NAME | grep -q keyring && fail
        if [ -n "$DM_KEYRING" ]; then
+               echo -n "keyring "
                echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME || fail
                $CRYPTSETUP status $DEV_NAME | grep -q keyring || fail
        fi
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME --perf-no_read_workqueue --perf-no_write_workqueue --persistent || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+               $CRYPTSETUP close $DEV_NAME || fail
+               echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME2 2>/dev/null && fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo
 fi
 
 echo "[3] Kernel dmcrypt sector size options"
@@ -262,4 +307,22 @@ else
        echo
 fi
 
+echo "[4] Disappeared device test:"
+KEY="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
+for F in LUKS1 LUKS2 BITLK TCRYPT; do
+       echo -n "$F"
+       add_device dev_size_mb=1 sector_size=512 num_tgts=1 lbpu=1
+       # Fake CRYPT UUID to force code to parse type-specific path
+       dmsetup create $DEV_NAME --uuid CRYPT-$F-$DEV_NAME --table "0 1024 crypt aes-xts-plain64 $KEY 16 /dev/$SCSI_DEV 16"
+       $CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 || fail
+       echo 1 > /sys/block/$SCSI_DEV/device/delete
+       udevadm settle >/dev/null 2>&1
+       $CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 || fail
+       dmsetup remove $DEV_NAME --retry || fail
+       rmmod scsi_debug
+       echo -n "[OK] "
+done
+echo
+
 cleanup
+exit 0
index 827b319..ec811a4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * cryptsetup file differ check (rewritten Clemens' fileDiffer in Python)
  *
- * Copyright (C) 2010-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2010-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff --git a/tests/generators/generate-luks2-segment-wrong-backup-key-0.img.sh b/tests/generators/generate-luks2-segment-wrong-backup-key-0.img.sh
new file mode 100755 (executable)
index 0000000..2499a5e
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+. lib.sh
+
+#
+# *** Description ***
+#
+# generate primary header with wrong backup segment id
+#
+# secondary header is corrupted on purpose as well
+#
+
+# $1 full target dir
+# $2 full source luks2 image
+
+function prepare()
+{
+       cp $SRC_IMG $TGT_IMG
+       test -d $TMPDIR || mkdir $TMPDIR
+       read_luks2_json0 $TGT_IMG $TMPDIR/json0
+       read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
+       read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
+}
+
+function generate()
+{
+       # create illegal backup segment key (used to be bug in 32bit implementations)
+       json_str=$(jq -c '.segments[(.segments | length + 1 | tostring)] = { "type" : "linear", "offset" : "512", "size" : "512", "flags":["backup-x"]}' $TMPDIR/json0)
+       test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
+
+       write_luks2_json "$json_str" $TMPDIR/json0
+
+       merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0
+       erase_checksum $TMPDIR/area0
+       chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
+       write_checksum $chks0 $TMPDIR/area0
+       write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG
+       kill_bin_hdr $TMPDIR/hdr1
+       write_luks2_hdr1 $TMPDIR/hdr1 $TGT_IMG
+}
+
+function check()
+{
+       read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1
+       local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
+       test "$str_res1" = "VACUUM" || exit 2
+
+       read_luks2_json0 $TGT_IMG $TMPDIR/json_res0
+       jq -c 'if .segments | length < 2
+              then error("Unexpected segments count") else empty end' $TMPDIR/json_res0 || exit 5
+}
+
+function cleanup()
+{
+       rm -f $TMPDIR/*
+       rm -fd $TMPDIR
+}
+
+test $# -eq 2 || exit 1
+
+TGT_IMG=$1/$(test_img_name $0)
+SRC_IMG=$2
+
+prepare
+generate
+check
+cleanup
diff --git a/tests/generators/generate-luks2-segment-wrong-backup-key-1.img.sh b/tests/generators/generate-luks2-segment-wrong-backup-key-1.img.sh
new file mode 100755 (executable)
index 0000000..702fe71
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+. lib.sh
+
+#
+# *** Description ***
+#
+# generate primary header with wrong backup segment id
+#
+# secondary header is corrupted on purpose as well
+#
+
+# $1 full target dir
+# $2 full source luks2 image
+
+function prepare()
+{
+       cp $SRC_IMG $TGT_IMG
+       test -d $TMPDIR || mkdir $TMPDIR
+       read_luks2_json0 $TGT_IMG $TMPDIR/json0
+       read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
+       read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
+}
+
+function generate()
+{
+       # create illegal backup segment key (used to be bug in 32bit implementations)
+       json_str=$(jq -c '(.segments."0".offset | tonumber) as $i | .segments[range(1;65) | tostring] = { "type" : "linear", "offset" : ($i + 512 | tostring), "size" : "512" } | .segments."268435472" = { "type":"linear","offset":"512","size":"512","flags":["backup-x"]}' $TMPDIR/json0)
+       test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
+
+       write_luks2_json "$json_str" $TMPDIR/json0
+
+       merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0
+       erase_checksum $TMPDIR/area0
+       chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
+       write_checksum $chks0 $TMPDIR/area0
+       write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG
+       kill_bin_hdr $TMPDIR/hdr1
+       write_luks2_hdr1 $TMPDIR/hdr1 $TGT_IMG
+}
+
+function check()
+{
+       read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1
+       local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
+       test "$str_res1" = "VACUUM" || exit 2
+
+       read_luks2_json0 $TGT_IMG $TMPDIR/json_res0
+       jq -c 'if .segments | length < 64
+              then error("Unexpected segments count") else empty end' $TMPDIR/json_res0 || exit 5
+}
+
+function cleanup()
+{
+       rm -f $TMPDIR/*
+       rm -fd $TMPDIR
+}
+
+test $# -eq 2 || exit 1
+
+TGT_IMG=$1/$(test_img_name $0)
+SRC_IMG=$2
+
+prepare
+generate
+check
+cleanup
index 8607e85..a3d3b8c 100755 (executable)
@@ -14,6 +14,7 @@ DEV_LOOP=""
 DEV=test123.img
 DEV2=test124.img
 KEY_FILE=key.img
+KEY_FILE2=key2.img
 
 dmremove() { # device
        udevadm settle >/dev/null 2>&1
@@ -25,12 +26,12 @@ cleanup() {
        [ -b /dev/mapper/$DEV_NAME_BIG ] && dmremove $DEV_NAME_BIG
        [ -n "$DEV_LOOP" ] && losetup -d "$DEV_LOOP"
        DEV_LOOP=""
-       rm -f $DEV $DEV2 $KEY_FILE >/dev/null 2>&1
+       rm -f $DEV $DEV2 $KEY_FILE $KEY_FILE2 >/dev/null 2>&1
 }
 
 fail()
 {
-       echo
+       [ -n "$1" ] && echo "$1"
        echo "FAILED backtrace:"
        while caller $frame; do ((frame++)); done
        cleanup
@@ -60,11 +61,15 @@ function dm_integrity_features()
        [ $VER_MIN -gt 2 ] && {
                DM_INTEGRITY_BITMAP=1
        }
+       [ $VER_MIN -gt 6 ] && {
+               DM_INTEGRITY_HMAC_FIX=1
+       }
 }
 
 add_device() {
        cleanup
-       dd if=/dev/urandom of=$KEY_FILE bs=1 count=512 >/dev/null 2>&1
+       dd if=/dev/urandom of=$KEY_FILE bs=4096 count=1 >/dev/null 2>&1
+       dd if=/dev/urandom of=$KEY_FILE2 bs=1 count=32 >/dev/null 2>&1
        dd if=/dev/zero of=$DEV bs=1M count=32 >/dev/null 2>&1
        dd if=/dev/zero of=$DEV2 bs=1M count=32 >/dev/null 2>&1
        sync
@@ -156,12 +161,27 @@ intformat() # alg alg_out tagsize outtagsize sector_size csum [keyfile keysize]
        fi
 
        echo -n "[INTEGRITY:$2:$4:$5]"
+       [ -n "$8" ] && echo -n "[KEYFILE:$8]"
        echo -n "[FORMAT]"
-       $INTSETUP format --integrity-legacy-padding -q --integrity $1 $TAG_PARAMS --sector-size $5 $KEY_PARAMS $DEV >/dev/null || fail "Cannot format device."
+       $INTSETUP format --integrity-legacy-padding -q --integrity $1 $TAG_PARAMS --sector-size $5 $KEY_PARAMS $DEV >/dev/null 2>&1
+       if [ $? -ne 0 ] ; then
+               ALG=$(echo $1 | sed -e 's/hmac-//')
+               if ! grep -q $ALG /proc/crypto ; then
+                       echo "[N/A]"
+                       return
+               fi
+               fail "Cannot format device."
+       fi
+
        dump_check "tag_size" $4
        dump_check "sector_size" $5
        echo -n "[ACTIVATE]"
        $INTSETUP open $DEV $DEV_NAME --integrity $1 $KEY_PARAMS || fail "Cannot activate device."
+       if [ -n "$8" ]; then
+               KEY_HEX=$(xxd -c 4096 -l $8 -p $7)
+               [ -z "$KEY_HEX" ] && fail "Cannot decode key."
+               dmsetup table --showkeys $DEV_NAME | grep -q $KEY_HEX || fail "Key mismatch."
+       fi
        status_check "tag size" $4
        status_check "integrity" $2
        status_check "sector size" "$5 bytes"
@@ -225,7 +245,7 @@ int_error_detection() # mode alg tagsize outtagsize sector_size key_file key_siz
 
 int_journal() # 1 alg, 2 tagsize, 3 sector_size, 4 watermark, 5 commit_time, 6 journal_integrity, 7 key-file, 8 key-size, 9 journal_integrity_out
 {
-    echo -n "[INTEGRITY JOURNAL:$6:${4}%:${5}ms]"
+    echo -n "[INTEGRITY JOURNAL:$6:${4}%:${5}ms:$8]"
     echo -n "[FORMAT]"
     ARGS="--integrity $1 --journal-watermark $4 --journal-commit-time $5 --journal-integrity $6 --journal-integrity-key-file $7 --journal-integrity-key-size $8"
     $INTSETUP format -q --tag-size $2 --sector-size $3 $ARGS $DEV || fail "Cannot format device."
@@ -235,7 +255,7 @@ int_journal() # 1 alg, 2 tagsize, 3 sector_size, 4 watermark, 5 commit_time, 6 j
     $INTSETUP open $DEV $DEV_NAME $ARGS || fail "Cannot activate device."
 
     echo -n "[KEYED HASH]"
-    KEY_HEX=$(xxd -c 256 -l $8 -p $7)
+    KEY_HEX=$(xxd -c 4096 -l $8 -p $7)
     [ -z "$KEY_HEX" ] && fail "Cannot decode key."
     dmsetup table --showkeys $DEV_NAME | grep -q $KEY_HEX || fail "Key mismatch."
 
@@ -286,7 +306,7 @@ int_mode() # alg tag_size sector_size [keyfile keysize]
        status_check "mode" "read/write"
        kernel_param_check 7 "J"
 
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
 
        echo -n "[DIRECT WRITES]"
        $INTSETUP open $DEV $DEV_NAME --integrity $1 $KEY_PARAMS --integrity-no-journal || fail "Cannot activate device without journal."
@@ -294,14 +314,14 @@ int_mode() # alg tag_size sector_size [keyfile keysize]
        status_check "journal" "not active"
        kernel_param_check 7 "D"
 
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
 
        echo -n "[RECOVERY MODE]"
        $INTSETUP open $DEV $DEV_NAME --integrity $1 $KEY_PARAMS --integrity-recovery-mode || fail "Cannot activate device in recovery mode."
        status_check "mode" "read/write recovery"
        kernel_param_check 7 "R"
 
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
 
        echo "[OK]"
 }
@@ -316,6 +336,8 @@ modprobe dm-integrity >/dev/null 2>&1
 dm_integrity_features
 
 add_device
+intformat blake2s-256 blake2s-256    32 32  512 8e5fe4119558e117bfc40e3b0f13ade3abe497b52604d4c7cca0cfd6c7f4cf11
+intformat blake2b-256 blake2b-256    32 32  512 8e5fe4119558e117bfc40e3b0f13ade3abe497b52604d4c7cca0cfd6c7f4cf11
 intformat crc32c      crc32c          0  4  512 08f63eb27fb9ce2ce903b0a56429c68ce5e209253ba42154841ef045a53839d7
 intformat crc32       crc32           0  4  512 08f63eb27fb9ce2ce903b0a56429c68ce5e209253ba42154841ef045a53839d7
 intformat sha1        sha1            0 20  512 6eedd6344dab8875cd185fcd6565dfc869ab36bc57e577f40c685290b1fa7fe7
@@ -324,6 +346,7 @@ intformat sha256      sha256          0 32  512 8e5fe4119558e117bfc40e3b0f13ade3
 intformat hmac-sha256 hmac\(sha256\)  0 32  512 8e5fe4119558e117bfc40e3b0f13ade3abe497b52604d4c7cca0cfd6c7f4cf11 $KEY_FILE 32
 intformat sha256      sha256          0 32 4096 33f7dfa5163ca9f740383fb8b0919574e38a7b20a94a4170fde4238196b7c4b4
 intformat hmac-sha256 hmac\(sha256\)  0 32 4096 33f7dfa5163ca9f740383fb8b0919574e38a7b20a94a4170fde4238196b7c4b4 $KEY_FILE 32
+intformat hmac-sha256 hmac\(sha256\)  0 32 4096 33f7dfa5163ca9f740383fb8b0919574e38a7b20a94a4170fde4238196b7c4b4 $KEY_FILE 4096
 
 echo "Error detection tests:"
 int_error_detection J crc32c  0  4  512
@@ -345,6 +368,7 @@ echo "Journal parameters tests:"
 int_journal crc32  4  512  66 1000 hmac-sha256 $KEY_FILE 32 hmac\(sha256\)
 int_journal sha256 32 4096 34 5000 hmac-sha1   $KEY_FILE 16 hmac\(sha1\)
 int_journal sha1   20 512  75 9999 hmac-sha256 $KEY_FILE 32 hmac\(sha256\)
+int_journal sha1   20 512  75 9999 hmac-sha256 $KEY_FILE 4096 hmac\(sha256\)
 
 echo "Journal encryption tests:"
 int_journal_crypt cbc-aes cbc\(aes\) $KEY_FILE 32
@@ -367,7 +391,7 @@ if [ -n "$DM_INTEGRITY_RECALC" ] ; then
        $INTSETUP open $DEV $DEV_NAME --integrity-recalculate || fail "Cannot activate device."
        dd if=/dev/mapper/$DEV_NAME of=/dev/null bs=1M 2>/dev/null || fail "Cannot recalculate tags in-kernel"
        int_check_sum_only 08f63eb27fb9ce2ce903b0a56429c68ce5e209253ba42154841ef045a53839d7
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
        echo "[OK]"
 else
        echo "[N/A]"
@@ -380,7 +404,7 @@ if [ -n "$DM_INTEGRITY_META" ] ; then
        $INTSETUP open $DEV --data-device $DEV2 $DEV_NAME || fail "Cannot activate device."
        int_check_sum_only 83ee47245398adee79bd9c0a8bc57b821e92aba10f5f9ade8a5d1fae4d8c4302
        $INTSETUP status $DEV_NAME | grep -q 'metadata device:' || fail
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
        echo "[OK]"
 else
        echo "[N/A]"
@@ -393,7 +417,7 @@ if [ -n "$DM_INTEGRITY_BITMAP" ] ; then
        $INTSETUP open $DEV --integrity-bitmap-mode --bitmap-sectors-per-bit 65536 --bitmap-flush-time 5000 $DEV_NAME || fail "Cannot activate device."
        $INTSETUP status $DEV_NAME | grep -q 'bitmap 512-byte sectors per bit: 65536' || fail
        $INTSETUP status $DEV_NAME | grep -q 'bitmap flush interval: 5000 ms' || fail
-       $INTSETUP close $DEV_NAME fail "Cannot deactivate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
        echo "[OK]"
        echo "Bitmap error detection tests:"
        int_error_detection B crc32c      0  4 512
@@ -426,4 +450,35 @@ else
        echo "[N/A]"
 fi
 
+echo -n "Fixed HMAC and legacy flags:"
+if [ -n "$DM_INTEGRITY_HMAC_FIX" ] ; then
+       add_device
+       # only data HMAC
+       ARGS="--integrity hmac-sha256 --integrity-key-file $KEY_FILE --integrity-key-size 32"
+       $INTSETUP format -q $DEV --integrity-legacy-hmac --no-wipe --tag-size 32 $ARGS || fail "Cannot format device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-recalculate $ARGS >/dev/null 2>&1 && fail "Cannot activate device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-legacy-recalculate $ARGS || fail "Cannot activate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
+       # New version - must fail (no journal HMAC)
+       $INTSETUP format -q $DEV --no-wipe --tag-size 32 $ARGS || fail "Cannot format device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-recalculate $ARGS  >/dev/null 2>&1 && fail "Cannot activate device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-legacy-recalculate $ARGS || fail "Cannot activate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
+
+       # data and journal HMAC
+       ARGS="$ARGS --journal-integrity hmac-sha256 --journal-integrity-key-file $KEY_FILE2 --journal-integrity-key-size 32"
+       $INTSETUP format -q $DEV --integrity-legacy-hmac --no-wipe --tag-size 32 $ARGS || fail "Cannot format device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-recalculate $ARGS >/dev/null 2>&1 && fail "Cannot activate device."
+       $INTSETUP open $DEV $DEV_NAME --integrity-legacy-recalculate $ARGS || fail "Cannot activate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
+       # New fixed version
+       $INTSETUP format -q $DEV --no-wipe --tag-size 32 $ARGS || fail "Cannot format device."
+       $INTSETUP dump $DEV | grep "flags" | grep -q "fix_hmac" || fail "Flag for HMAC not set."
+       $INTSETUP open $DEV $DEV_NAME --integrity-recalculate $ARGS || fail "Cannot activate device."
+       $INTSETUP close $DEV_NAME || fail "Cannot deactivate device."
+       echo "[OK]"
+else
+       echo "[N/A]"
+fi
+
 cleanup
index 9c69192..5c28be3 100755 (executable)
@@ -91,10 +91,7 @@ function get_expsum() # $offset
 
 function check_sum() # $key $keysize $offset [stdin|keyfile]
 {
-       # Fill device with zeroes and reopen it
-       dd if=/dev/zero of=/dev/mapper/$DEV_NAME bs=1k $LOOP_DD_PARAM >/dev/null 2>&1
-       sync
-       dmremove $DEV_NAME
+       $CRYPTSETUP close $DEV_NAME || fail
 
        EXPSUM=$(get_expsum $3)
        if [ "$4" == "stdin" ] ; then
@@ -163,8 +160,9 @@ for key_size in $KEY_SIZES ; do
                        2>/dev/null
                [ $? -ne 0 ] && echo "[SKIPPED]" && continue
                check_exists
+               # Fill device with zeroes and reopen it
+               dd if=/dev/zero of=/dev/mapper/$DEV_NAME $LOOP_DD_PARAM >/dev/null 2>&1
                check_sum $key $key_size $offset keyfile
-               $CRYPTSETUP loopaesClose $DEV_NAME || fail
                check_sum $key $key_size $offset stdin
                $CRYPTSETUP loopaesClose $DEV_NAME || fail
                check_sum_losetup $key AES$key_size $offset
diff --git a/tests/luks2-reencryption-mangle-test b/tests/luks2-reencryption-mangle-test
new file mode 100755 (executable)
index 0000000..8f308f5
--- /dev/null
@@ -0,0 +1,506 @@
+#!/bin/bash
+
+PS4='$LINENO:'
+[ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
+CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
+CRYPTSETUP_RAW=$CRYPTSETUP
+
+CRYPTSETUP_VALGRIND=../.libs/cryptsetup
+CRYPTSETUP_LIB_VALGRIND=../.libs
+IMG=reenc-mangle-data
+IMG_HDR=$IMG.hdr
+IMG_JSON=$IMG.json
+KEY1=key1
+DEV_NAME=reenc3492834
+
+FAST_PBKDF2="--pbkdf pbkdf2 --pbkdf-force-iterations 1000"
+CS_PWPARAMS="--disable-keyring --key-file $KEY1"
+CS_PARAMS="-q --disable-locks $CS_PWPARAMS"
+JSON_MSIZE=16384
+
+function remove_mapping()
+{
+       [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME
+       rm -f $IMG $IMG_HDR $IMG_JSON $KEY1 >/dev/null 2>&1
+}
+
+function fail()
+{
+       local frame=0
+       [ -n "$1" ] && echo "$1"
+       echo "FAILED backtrace:"
+       while caller $frame; do ((frame++)); done
+       remove_mapping
+       exit 2
+}
+
+function skip()
+{
+       [ -n "$1" ] && echo "$1"
+       remove_mapping
+       exit 77
+}
+
+function bin_check()
+{
+       which $1 >/dev/null 2>&1 || skip "WARNING: test require $1 binary, test skipped."
+}
+
+function img_json_save()
+{
+       # FIXME: why --json-file cannot be used?
+       #$CRYPTSETUP luksDump --dump-json-metadata $IMG | jq -c -M | tr -d '\n' >$IMG_JSON
+       local LUKS2_JSON_SIZE=$(($JSON_MSIZE - 4096))
+       _dd if=$IMG count=$LUKS2_JSON_SIZE skip=4096 | jq -c -M . | tr -d '\n' >$IMG_JSON
+}
+
+function img_json_dump()
+{
+       img_json_save
+       jq . $IMG_JSON
+}
+
+function img_hash_save()
+{
+       IMG_HASH=$(sha256sum $IMG | cut -d' ' -f 1)
+}
+
+function img_hash_unchanged()
+{
+       local IMG_HASH2=$(sha256sum $IMG | cut -d' ' -f 1)
+       [ "$IMG_HASH" != "$IMG_HASH2" ] && fail "Image changed!"
+}
+
+function img_prepare_raw() # $1 options
+{
+       remove_mapping
+
+       if [ ! -e $KEY1 ]; then
+               dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1
+       fi
+
+       truncate -s 32M $IMG || fail
+       $CRYPTSETUP luksFormat $FAST_PBKDF2 $CS_PARAMS --luks2-metadata-size $JSON_MSIZE $IMG $1 || fail
+}
+
+function img_prepare() # $1 options
+{
+       img_prepare_raw
+       # FIXME: resilience is not saved here (always none)?
+       $CRYPTSETUP reencrypt $IMG $CS_PARAMS -q --init-only --resilience none $1 >/dev/null 2>&1
+       [ $? -ne 0 ] && skip "Reencryption unsupported, test skipped."
+       img_json_save
+       img_hash_save
+}
+
+function _dd()
+{
+       dd $@ status=none conv=notrunc bs=1
+}
+
+# header mangle functions
+function img_update_json()
+{
+       local LUKS2_BIN1_OFFSET=448
+       local LUKS2_BIN2_OFFSET=$((LUKS2_BIN1_OFFSET + $JSON_MSIZE))
+       local LUKS2_JSON_SIZE=$(($JSON_MSIZE - 4096))
+
+       # if present jq script, mangle JSON
+       if [ -n "$1" ]; then
+               local JSON=$(cat $IMG_JSON)
+               echo $JSON | jq -M -c "$1" >$IMG_JSON || fail
+               local JSON=$(cat $IMG_JSON)
+               echo $JSON | tr -d '\n' >$IMG_JSON || fail
+       fi
+
+       # wipe JSON areas
+       _dd if=/dev/zero of=$IMG count=$LUKS2_JSON_SIZE seek=4096
+       _dd if=/dev/zero of=$IMG count=$LUKS2_JSON_SIZE seek=$(($JSON_MSIZE + 4096))
+
+       # write JSON data
+       _dd if=$IMG_JSON of=$IMG count=$LUKS2_JSON_SIZE seek=4096
+       _dd if=$IMG_JSON of=$IMG count=$LUKS2_JSON_SIZE seek=$(($JSON_MSIZE + 4096))
+
+       # erase sha256 checksums
+       _dd if=/dev/zero of=$IMG count=64 seek=$LUKS2_BIN1_OFFSET
+       _dd if=/dev/zero of=$IMG count=64 seek=$LUKS2_BIN2_OFFSET
+
+       # calculate sha256 and write chexksums
+       local SUM1_HEX=$(_dd if=$IMG count=$JSON_MSIZE | sha256sum | cut -d ' ' -f 1)
+       echo $SUM1_HEX | xxd -r -p | _dd of=$IMG seek=$LUKS2_BIN1_OFFSET count=64 || fail
+
+       local SUM2_HEX=$(_dd if=$IMG skip=$JSON_MSIZE count=$JSON_MSIZE | sha256sum | cut -d ' ' -f 1)
+       echo $SUM2_HEX | xxd -r -p | _dd of=$IMG seek=$LUKS2_BIN2_OFFSET count=64 || fail
+
+       img_hash_save
+}
+
+function img_check_ok()
+{
+       if [ $(id -u) == 0 ]; then
+               $CRYPTSETUP open $CS_PWPARAMS $IMG $DEV_NAME || fail
+               $CRYPTSETUP close $DEV_NAME || fail
+       fi
+
+       $CRYPTSETUP repair $IMG $CS_PARAMS || fail
+}
+
+function img_check_fail()
+{
+       if [ $(id -u) == 0 ]; then
+               $CRYPTSETUP open $CS_PWPARAMS $IMG $DEV_NAME 2>/dev/null && fail
+       fi
+
+       $CRYPTSETUP repair $IMG $CS_PARAMS 2>/dev/null && fail
+       img_hash_unchanged
+}
+
+function img_run_reenc_ok()
+{
+local EXPECT_TIMEOUT=5
+[ -n "$VALG" ] && EXPECT_TIMEOUT=60
+# For now, we cannot run reencryption in batch mode for non-block device. Just fake the terminal here.
+expect_run - >/dev/null <<EOF
+proc abort {} { send_error "Timeout. "; exit 2 }
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW reencrypt $IMG $CS_PWPARAMS --disable-locks --resilience none
+expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
+send "YES\n"
+expect timeout abort eof
+exit
+EOF
+[ $? -eq 0 ] || fail "Expect script failed."
+}
+
+function img_run_reenc_fail()
+{
+local EXPECT_TIMEOUT=5
+[ -n "$VALG" ] && EXPECT_TIMEOUT=60
+# For now, we cannot run reencryption in batch mode for non-block device. Just fake the terminal here.
+expect_run - >/dev/null <<EOF
+proc abort {} { send_error "Timeout. "; exit 42 }
+set timeout $EXPECT_TIMEOUT
+eval spawn $CRYPTSETUP_RAW reencrypt $IMG $CS_PWPARAMS --disable-locks
+expect timeout abort "Are you sure? (Type 'yes' in capital letters):"
+send "YES\n"
+expect timeout abort eof
+catch wait result
+exit [lindex \$result 3]
+EOF
+local ret=$?
+[ $ret -eq 0 ] &&  fail "Reencryption passed (should have failed)."
+[ $ret -eq 42 ] && fail "Expect script failed."
+img_hash_unchanged
+}
+
+function img_check_fail_repair_ok()
+{
+       if [ $(id -u) == 0 ]; then
+               $CRYPTSETUP open $CS_PWPARAMS $IMG $DEV_NAME 2>/dev/null && fail
+       fi
+
+       img_run_reenc_fail
+
+       # repair metadata
+       $CRYPTSETUP repair $IMG $CS_PARAMS || fail
+
+       img_check_ok
+       img_run_reenc_ok
+}
+
+function valgrind_setup()
+{
+       bin_check valgrind
+       [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
+       export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
+       CRYPTSETUP=valgrind_run
+       CRYPTSETUP_RAW="./valg.sh ${CRYPTSETUP_VALGRIND}"
+}
+
+function valgrind_run()
+{
+       INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
+}
+
+function expect_run()
+{
+        export INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}"
+        expect "$@"
+}
+
+bin_check jq
+bin_check sha256sum
+bin_check xxd
+bin_check expect
+
+export LANG=C
+
+[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
+
+#while false; do
+
+echo "[1] Reencryption with old flag is rejected"
+img_prepare
+img_update_json '.config.requirements.mandatory = ["online-reencryptx"]'
+img_check_fail
+img_update_json '.config.requirements.mandatory = ["online-reencrypt-v2"]'
+img_check_ok
+img_run_reenc_ok
+img_check_ok
+
+# Simulate old reencryption with no digest (repairable)
+img_prepare
+img_update_json 'del(.digests."2") | .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+# This must fail for new releases
+echo "[2] Old reencryption in-progress (journal)"
+img_prepare
+img_update_json '
+       del(.digests."2") |
+       .keyslots."2".area.type = "journal" |
+       .segments = {
+               "0" : (.segments."0" +
+                       {"size" : .keyslots."2".area.size} +
+                       {"flags" : ["in-reencryption"]}),
+               "1" : (.segments."0" +
+                       {"offset" : ((.segments."0".offset|tonumber) +
+                       (.keyslots."2".area.size|tonumber))|tostring}),
+               "2" : .segments."1",
+               "3" : .segments."2"
+       } |
+       .digests."0".segments = ["1","2"] |
+       .digests."1".segments = ["0","3"] |
+       .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+echo "[3] Old reencryption in-progress (checksum)"
+img_prepare
+img_update_json '
+       del(.digests."2") |
+       .keyslots."2".area.type = "checksum" |
+       .keyslots."2".area.hash = "sha256" |
+       .keyslots."2".area.sector_size = 4096 |
+       .segments = {
+               "0" : (.segments."0" +
+                       {"size" : .keyslots."2".area.size} +
+                       {"flags" : ["in-reencryption"]}),
+               "1" : (.segments."0" +
+                       {"offset": ((.segments."0".offset|tonumber) +
+                       (.keyslots."2".area.size|tonumber))|tostring}),
+               "2" : .segments."1",
+               "3" : .segments."2"
+       } |
+       .digests."0".segments = ["1","2"] |
+       .digests."1".segments = ["0","3"] |
+       .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+# Note: older tools cannot create this from commandline
+echo "[4] Old decryption in-progress (journal)"
+img_prepare
+img_update_json '
+       del(.digests."1") |
+       del(.digests."2") |
+       del(.keyslots."1") |
+       .keyslots."2".mode = "decrypt" |
+       .keyslots."2".area.type = "journal" |
+       .segments = {
+               "0" : {
+                       "type" : "linear",
+                       "offset" : .segments."0".offset,
+                       "size" : .keyslots."2".area.size,
+                       "flags" : ["in-reencryption"]
+               },
+               "1" : (.segments."0" +
+                       {"offset" : ((.segments."0".offset|tonumber) +
+                       (.keyslots."2".area.size|tonumber))|tostring}),
+               "2" : .segments."1",
+               "3" : {
+                       "type" : "linear",
+                       "offset" : .segments."0".offset,
+                       "size" : "dynamic",
+                       "flags" : ["backup-final"]
+               }
+       } |
+       .digests."0".segments = ["1","2"] |
+       .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+echo "[5] Old decryption in-progress (checksum)"
+img_prepare
+img_update_json '
+       del(.digests."1") |
+       del(.digests."2") |
+       del(.keyslots."1") |
+       .keyslots."2".mode = "decrypt" |
+       .keyslots."2".area.type = "checksum" |
+       .keyslots."2".area.hash = "sha256" |
+       .keyslots."2".area.sector_size = 4096 |
+       .segments = {
+               "0" : {
+                       "type" : "linear",
+                       "offset" : .segments."0".offset,
+                       "size" : .keyslots."2".area.size,
+                       "flags" : ["in-reencryption"]
+               },
+               "1" : (.segments."0" +
+                       {"offset" : ((.segments."0".offset|tonumber) +
+                       (.keyslots."2".area.size|tonumber))|tostring}),
+               "2" : .segments."1",
+               "3" : {
+                       "type" : "linear",
+                       "offset" : .segments."0".offset,
+                       "size" : "dynamic",
+                       "flags" : ["backup-final"]
+               }
+       } |
+       .digests."0".segments = ["1","2"] |
+       .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+# Note - offset is set to work with the old version (with a datashift bug)
+echo "[6] Old reencryption in-progress (datashift)"
+img_prepare
+img_update_json '
+       del(.digests."2") |
+       .keyslots."2".direction = "backward" |
+       .keyslots."2".area.type = "datashift" |
+       .keyslots."2".area.size = "4096" |
+       .keyslots."2".area.shift_size = ((1 * 1024 * 1024)|tostring) |
+       .segments = {
+               "0" : (.segments."0" +
+                       {"size" : ((13 * 1024 * 1024)|tostring)}),
+               "1" : (.segments."0" +
+                       {"offset" : ((30 * 1024 * 1024)|tostring)}),
+               "2" : .segments."1",
+               "3" : (.segments."2" +
+                       {"offset" : ((17 * 1024 * 1024)|tostring)}),
+       } |
+       .digests."0".segments = ["0","2"] |
+       .digests."1".segments = ["1","3"] |
+       .config.requirements.mandatory = ["online-reencrypt"]'
+img_check_fail_repair_ok
+
+#
+# NEW metadata (with reenc digest)
+#
+echo "[7] Reencryption with various mangled metadata"
+
+# Normal situation
+img_prepare
+img_run_reenc_ok
+img_check_ok
+
+# The same in various steps.
+# Repair must validate not only metadata, but also reencryption digest.
+img_prepare
+img_update_json 'del(.digests."2")'
+img_check_fail_repair_ok
+
+img_prepare '--reduce-device-size 2M'
+img_update_json '.keyslots."2".area.shift_size = ((.keyslots."2".area.shift_size|tonumber / 2)|tostring)'
+img_check_fail
+
+#FIXME: cannot check with correct digest for now (--init-only does not store area type)
+img_prepare
+img_update_json '
+       .keyslots."2".area.type = "checksum" |
+       .keyslots."2".area.hash = "sha256" |
+       .keyslots."2".area.sector_size = 4096'
+img_check_fail
+
+img_prepare
+img_update_json '.keyslots."2".area.type = "journal"'
+img_check_fail
+
+img_prepare
+img_update_json '.keyslots."2".mode = "decrypt"'
+img_check_fail
+
+img_prepare
+img_update_json '.keyslots."2".direction = "backward"'
+img_check_fail
+
+# key_size must be 1
+img_prepare
+img_update_json '.keyslots."2".key_size = 16'
+img_check_fail
+
+# Mangling segments
+img_prepare
+img_update_json 'del(.segments."1")'
+img_check_fail
+
+img_prepare
+img_update_json '.segments."0".encryption = "aes-cbc-null"'
+img_check_fail
+
+img_prepare
+img_update_json '.segments."1".encryption = "aes-cbc-null"'
+img_check_fail
+
+img_prepare
+img_update_json '.segments."2".encryption = "aes-cbc-null"'
+img_check_fail
+
+# Mangling digests
+img_prepare
+img_update_json '
+       .digests."2" = .digests."0" |
+       .digests."2".keyslots = ["2"] |
+       .digests."2".segments = []'
+img_check_fail
+
+img_prepare
+img_update_json '.digests."2".iterations = 1111'
+img_check_fail
+
+# Simulate correct progress
+img_prepare
+img_update_json '
+       .segments = {
+               "0" : (.segments."0" +
+                       {"size" : ((1 * 1024 * 1024)|tostring)}),
+               "1" : (.segments."0" +
+                       {"offset" : ((17 * 1024 * 1024)|tostring)}),
+               "2" : .segments."1",
+               "3" : .segments."2"
+       } |
+       .digests."0".segments = ["1","2"] |
+       .digests."1".segments = ["0","3"]'
+img_check_ok
+
+# Mangling keyslots
+
+# Set reencrypt slot to non-ignore priority
+# This should be benign, just avoid noisy messages
+img_prepare
+img_update_json 'del(.keyslots."2".priority)'
+img_check_ok
+
+# Flags
+
+# Remove mandatory reenc flag, but keep reenc metadata
+img_prepare
+img_update_json '.config.requirements.mandatory = []'
+img_check_fail
+
+# Unknown segment flag, should be ignored
+img_prepare
+img_update_json '.segments."0".flags = ["dead-parrot"]'
+img_check_ok
+
+echo "[8] Reencryption with AEAD is not supported"
+img_prepare_raw
+img_json_save
+img_update_json '
+       .segments."0".integrity = {
+               "type" : "hmac(sha256)",
+               "journal_encryption": "none",
+               "journal_integrity": "none"
+       }'
+$CRYPTSETUP reencrypt $IMG $CS_PARAMS >/dev/null 2>&1 && fail
+
+remove_mapping
+exit 0
index e0529c9..92f223d 100755 (executable)
@@ -19,6 +19,7 @@ DEV_NAME2=reenc97682
 IMG=reenc-data
 IMG_HDR=/tmp/$IMG.hdr
 KEY1=key1
+VKEY1=vkey1
 PWD1="93R4P4pIqAH8"
 PWD2="1cND4319812f"
 PWD3="1-9Qu5Ejfnqv"
@@ -96,7 +97,7 @@ function remove_mapping()
        [ -b /dev/mapper/$OVRDEV-err ] && dmsetup remove --retry $OVRDEV-err 2>/dev/null
        [ -n "$LOOPDEV" ] && losetup -d $LOOPDEV
        unset LOOPDEV
-       rm -f $IMG $IMG_HDR $KEY1 $DEVBIG >/dev/null 2>&1
+       rm -f $IMG $IMG_HDR $KEY1 $VKEY1 $DEVBIG >/dev/null 2>&1
        rmmod scsi_debug 2> /dev/null
        scsi_debug_teardown $DEV
 }
@@ -114,6 +115,7 @@ function fail()
 function skip()
 {
        [ -n "$1" ] && echo "$1"
+       remove_mapping
        exit 77
 }
 
@@ -173,6 +175,11 @@ function prepare() # $1 dev1_siz
                dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1
        fi
 
+       if [ ! -e $VKEY1 ]; then
+               echo -n $'\x44\xc6\x74\x4f\x41\x4e\x50\xc0\x79\xc2\x2d\x5b\x5f\x68\x84\x17' >$VKEY1
+               echo -n $'\x9c\x03\xba\xbe\x4d\x0f\x9a\x75\xb3\x90\x70\x32\x0a\xf8\xae\xc4'>>$VKEY1
+       fi
+
        add_scsi_device $@
 }
 
@@ -269,7 +276,7 @@ function prepare_linear_dev() {
        DEV=/dev/mapper/$OVRDEV
 }
 
-function get_error_offsets() # $1 devsize, $2 minimal offset, $3 sector_size [512 if ommited], $4 max offset
+function get_error_offsets() # $1 devsize, $2 minimal offset, $3 sector_size [512 if omitted], $4 max offset
 {
        local _devsize=$(($1*1024*2))
        local _sector_size=${3:-512}
@@ -290,7 +297,7 @@ function reencrypt_recover() { # $1 sector size, $2 resilience, $3 digest, [$4 h
        test -z "$4" || _hdr="--header $4"
 
        error_writes $OVRDEV $OLD_DEV $ERROFFSET $ERRLENGTH
-       echo $PWD1 | $CRYPTSETUP reencrypt $DEV $_hdr --hotzone-size 1M --resilience $2 --sector-size $1 -q $FAST_PBKDF_ARGON 2>/dev/null && fail
+       echo $PWD1 | $CRYPTSETUP reencrypt $DEV $_hdr --hotzone-size 1M --resilience $2 --sector-size $1 -q $FAST_PBKDF_ARGON >/dev/null 2>&1 && fail
        fix_writes $OVRDEV $OLD_DEV
 
        echo $PWD1 | $CRYPTSETUP -q repair $DEV $_hdr || fail
@@ -311,7 +318,7 @@ function reencrypt_recover_online() { # $1 sector size, $2 resilience, $3 digest
        echo $PWD1 | $CRYPTSETUP open $DEV $_hdr $DEV_NAME || fail
 
        error_writes $OVRDEV $OLD_DEV $ERROFFSET $ERRLENGTH
-       echo $PWD1 | $CRYPTSETUP reencrypt --active-name $DEV_NAME $_hdr --hotzone-size 1M --resilience $2 --sector-size $1 -q $FAST_PBKDF_ARGON 2>/dev/null && fail
+       echo $PWD1 | $CRYPTSETUP reencrypt --active-name $DEV_NAME $_hdr --hotzone-size 1M --resilience $2 --sector-size $1 -q $FAST_PBKDF_ARGON >/dev/null 2>&1 && fail
        $CRYPTSETUP status $DEV_NAME $_hdr | grep -q "reencryption:  in-progress" || fail
        $CRYPTSETUP close $DEV_NAME || fail
        fix_writes $OVRDEV $OLD_DEV
@@ -647,6 +654,20 @@ function reencrypt_online_fixed_size() {
        fi
 }
 
+function setup_luks2_env() {
+       echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 -c aes-xts-plain64 $FAST_PBKDF_ARGON $DEV || fail
+       echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME || fail
+       HAVE_KEYRING=$($CRYPTSETUP status $DEV_NAME | grep "key location: keyring")
+       if [ -n "$HAVE_KEYRING" ]; then
+               HAVE_KEYRING=1
+       else
+               HAVE_KEYRING=0
+       fi
+       DEF_XTS_KEY=$($CRYPTSETUP status $DEV_NAME | grep "keysize:" | sed 's/\(  keysize: \)\([0-9]\+\)\(.*\)/\2/')
+       [ -n "$DEF_XTS_KEY" ] || fail "Failed to parse xts mode key size."
+       $CRYPTSETUP close $DEV_NAME || fail
+}
+
 function valgrind_setup()
 {
        which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind."
@@ -698,12 +719,15 @@ HASH7=18a393d1a505e22ccf3e29effe3005ea8627e4c36b7cca0e53f58121f49b67e1
 # 60 MiBs of zeroes
 HASH8=cf5ac69ca412f9b3b1a8b8de27d368c5c05ed4b1b6aa40e6c38d9cbf23711342
 
+prepare dev_size_mb=32
+setup_luks2_env
+
 echo "[1] Reencryption"
 echo -n "[512 sector]"
-prepare dev_size_mb=32
 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -s 128 -c aes-cbc-essiv:sha256 --offset 8192 $FAST_PBKDF_ARGON $DEV || fail
 wipe $PWD1
 check_hash $PWD1 $HASH1
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q $FAST_PBKDF_ARGON 2>&1 | tail -1 | grep -q "not supported" && skip " No reenryption support, test skipped."
 echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q $FAST_PBKDF_ARGON || fail
 check_hash $PWD1 $HASH1
 echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q -s 256 -c twofish-cbc-essiv:sha256 --resilience journal $FAST_PBKDF_ARGON || fail
@@ -716,6 +740,8 @@ check_hash $PWD1 $HASH1
 echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q -c aes-xts-plain64 --init-only $FAST_PBKDF_ARGON || fail
 echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME || fail
 echo $PWD1 | $CRYPTSETUP reencrypt --active-name /dev/mapper/$DEV_NAME --resilience none -q || fail
+XTS_KEY=$($CRYPTSETUP status $DEV_NAME | grep "keysize:" | sed 's/\(  keysize: \)\([0-9]\+\)\(.*\)/\2/')
+[ "$XTS_KEY" -eq "$DEF_XTS_KEY" ] || fail "xts mode has wrong key size after reencryption ($XTS_KEY != expected $DEF_XTS_KEY)"
 echo $PWD1 | $CRYPTSETUP close $DEV_NAME || fail
 echo -n "[OK][4096 sector]"
 prepare sector_size=4096 dev_size_mb=32
@@ -918,6 +944,17 @@ $CRYPTSETUP status $DEV_NAME >/dev/null || fail
 dmsetup remove --retry $DEV_NAME2
 $CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 && fail
 
+# check tool can block some funny user ideas
+preparebig 64
+echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 -c serpent-xts-plain -q $FAST_PBKDF_ARGON $DEV || fail
+echo $PWD1 | $CRYPTSETUP reencrypt --decrypt $DEV -q 2>/dev/null && fail
+echo $PWD1 | $CRYPTSETUP reencrypt --decrypt $DEV --header $DEV -q 2>/dev/null && fail
+open_crypt $PWD1
+echo $PWD1 | $CRYPTSETUP reencrypt --decrypt --active-name $DEV_NAME -q 2>/dev/null && fail
+echo $PWD1 | $CRYPTSETUP reencrypt --decrypt --active-name $DEV_NAME --header $DEV -q 2>/dev/null && fail
+$CRYPTSETUP status $DEV_NAME | grep -q "reencryption:  in-progress" && fail
+$CRYPTSETUP close $DEV_NAME
+
 if ! dm_delay_features; then
        echo "dm-delay target is missing, skipping recovery tests."
        remove_mapping
@@ -1366,5 +1403,148 @@ echo -e "$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$
 echo $PWD1 | $CRYPTSETUP reencrypt $DEV --resume-only -q 2>/dev/null && fail
 echo -e "$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1\n$PWD1" | $CRYPTSETUP reencrypt $DEV -q  || fail
 
+echo "[23] Reencryption with specified new volume key"
+prepare dev_size_mb=32
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -s 256 -c aes-cbc-essiv:sha256 --offset 8192 $FAST_PBKDF_ARGON $DEV || fail
+echo -e "$PWD1\n$PWD3" | $CRYPTSETUP -q luksAddKey $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+check_hash $PWD1 $HASH1
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q -S0 $FAST_PBKDF_ARGON --master-key-file $VKEY1 -s 128 || fail
+check_hash $PWD1 $HASH1
+$CRYPTSETUP luksErase -q $DEV || fail
+echo $PWD1 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_ARGON --master-key-file $VKEY1 -s 128 $DEV || fail
+check_hash $PWD1 $HASH1
+
+echo "[24] Reencryption with initial cipher_null"
+# aka custom encryption
+prepare dev_size_mb=32
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -s 128 -c cipher_null-ecb --offset 8192 $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+check_hash $PWD1 $HASH1
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV -c aes-xts-plain64 -q $FAST_PBKDF_ARGON || fail
+check_hash $PWD1 $HASH1
+
+# online
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -s 128 -c cipher_null-ecb --offset 8192 $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV -c aes-xts-plain64 -q $FAST_PBKDF_ARGON || fail
+check_hash_dev /dev/mapper/$DEV_NAME $HASH1
+if [ $HAVE_KEYRING -gt 0 ]; then
+       $CRYPTSETUP status $DEV_NAME | grep -q "key location: keyring" || fail
+fi
+$CRYPTSETUP close $DEV_NAME
+
+# simulate LUKS2 device with cipher_null in both keyslot and segment (it can be created only by up conversion from LUKS1)
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks1 -s 128 -c cipher_null-ecb --offset 8192 $FAST_PBKDF2 $DEV || fail
+$CRYPTSETUP convert -q --type luks2 $DEV || fail
+wipe $PWD1
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV -q $FAST_PBKDF_ARGON >/dev/null || fail
+check_hash $PWD1 $HASH1
+# both keyslot and segment cipher must not be null after reencryption with default params
+$CRYPTSETUP luksDump $DEV | grep -q "cipher_null" && fail
+
+# multistep reencryption with initial cipher_null
+preparebig 64
+echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $DEV -c null --offset 16384 -q $FAST_PBKDF_ARGON || fail
+echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME
+wipe_dev /dev/mapper/$DEV_NAME
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV --hotzone-size 1M --resilience none -q $FAST_PBKDF_ARGON >/dev/null || fail
+$CRYPTSETUP close $DEV_NAME
+check_hash $PWD1 $HASH5
+
+echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $DEV -c null --offset 16384 -q $FAST_PBKDF_ARGON || fail
+wipe $PWD1
+echo $PWD1 | $CRYPTSETUP reencrypt $DEV --hotzone-size 1M --resilience none -q $FAST_PBKDF_ARGON >/dev/null || fail
+check_hash $PWD1 $HASH5
+
+echo "[25] Reencryption recovery with cipher_null"
+# (check opt-io size optimization in reencryption code does not affect recovery)
+# device with opt-io size 32k
+prepare_linear_dev 32 opt_blks=64 $OPT_XFERLEN_EXP
+OFFSET=8192
+
+echo "sector size 512->512"
+
+get_error_offsets 32 $OFFSET
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+check_hash $PWD1 $HASH1
+
+echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+reencrypt_recover 512 checksum $HASH1
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+reencrypt_recover 512 journal $HASH1
+
+if [ -n "$DM_SECTOR_SIZE" ]; then
+       echo "sector size 512->4096"
+
+       get_error_offsets 32 $OFFSET 4096
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+
+       echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+       reencrypt_recover 4096 checksum $HASH1
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+       reencrypt_recover 4096 journal $HASH1
+
+       echo "sector size 4096->4096"
+
+       get_error_offsets 32 $OFFSET 4096
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 4096 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+
+       echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+       reencrypt_recover 4096 checksum $HASH1
+       reencrypt_recover 4096 journal $HASH1
+fi
+
+echo "[26] Reencryption recovery with cipher_null (online i/o error)"
+
+echo "sector size 512->512"
+
+get_error_offsets 32 $OFFSET
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --sector-size 512 -c null --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+check_hash $PWD1 $HASH1
+
+echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+reencrypt_recover_online 512 checksum $HASH1
+echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --sector-size 512 -c null --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+wipe $PWD1
+reencrypt_recover_online 512 journal $HASH1
+
+if [ -n "$DM_SECTOR_SIZE" ]; then
+       echo "sector size 512->4096"
+
+       get_error_offsets 32 $OFFSET 4096
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+
+       echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+       reencrypt_recover_online 4096 checksum $HASH1
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 512 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+       reencrypt_recover_online 4096 journal $HASH1
+
+       echo "sector size 4096->4096"
+
+       get_error_offsets 32 $OFFSET 4096
+       echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 -c null --sector-size 4096 --offset $OFFSET $FAST_PBKDF_ARGON $DEV || fail
+       wipe $PWD1
+       check_hash $PWD1 $HASH1
+
+       echo "ERR writes to sectors [$ERROFFSET,$(($ERROFFSET+$ERRLENGTH-1))]"
+       reencrypt_recover_online 4096 checksum $HASH1
+       reencrypt_recover_online 4096 journal $HASH1
+fi
+
 remove_mapping
 exit 0
index 52945ba..04183fb 100755 (executable)
@@ -199,6 +199,8 @@ RUN luks2-segment-unknown-type.img                  "R" "Validation rejected segment with all m
 RUN luks2-segment-two.img                              "R" "Validation rejected two valid segments"
 RUN luks2-segment-wrong-flags.img                      "F" "Failed to detect invalid flags field"
 RUN luks2-segment-wrong-flags-element.img              "F" "Failed to detect invalid flags content"
+RUN luks2-segment-wrong-backup-key-0.img               "F" "Failed to detect gap in backup segments"
+RUN luks2-segment-wrong-backup-key-1.img               "F" "Failed to detect gap in backup segments"
 
 echo "[6] Test metadata size and keyslots size (config section)"
 RUN luks2-invalid-keyslots-size-c0.img                 "F" "Failed to detect too large keyslots_size in config section"
index 263da0d..6dc85bd 100755 (executable)
@@ -352,7 +352,7 @@ echo $PWD1 | $REENC $LOOPDEV1 -q --keep-key $FAST_PBKDF
 check_hash $PWD1 $HASH1
 $CRYPTSETUP --type luks1 luksDump $LOOPDEV1 > /dev/null || fail
 
-echo "[9] Test log I/Os on various underlaying block devices"
+echo "[9] Test log I/Os on various underlying block devices"
 prepare 8192
 echo $PWD2 | $CRYPTSETUP -q luksFormat --type luks1 $FAST_PBKDF $LOOPDEV1 || fail
 add_scsi_device sector_size=512 dev_size_mb=32
index 4ec26fa..812788a 100755 (executable)
@@ -370,7 +370,7 @@ check_hash $PWD2 $HASH5
 check_slot 21 || fail "Only keyslot 21 expected to be enabled"
 $CRYPTSETUP luksDump $IMG | grep -q "luks2" > /dev/null || fail
 
-echo "[9] Test log I/Os on various underlaying block devices"
+echo "[9] Test log I/Os on various underlying block devices"
 echo $PWD2 | $CRYPTSETUP -q luksFormat --type luks2 $FAST_PBKDF_ARGON $IMG --offset 8192 || fail
 add_scsi_device sector_size=512 dev_size_mb=32
 test_logging "[512 sector]" || fail
index 0b00005..9f070e9 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * cryptsetup library API test utilities
  *
- * Copyright (C) 2009-2020 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2009-2020 Milan Broz
+ * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2021 Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -95,6 +95,14 @@ void check_equal(int line, const char *func, int64_t x, int64_t y)
        exit(-1);
 }
 
+void check_ge_equal(int line, const char *func, int64_t x, int64_t y)
+{
+       printf("FAIL line %d [%s]: expected greater or equal values differs: %"
+               PRIi64 " < %" PRIi64 "\n", line, func, x, y);
+       _cleanup();
+       exit(-1);
+}
+
 void check_null(int line, const char *func, const void *x)
 {
        if (x) {
@@ -279,7 +287,14 @@ void global_log_callback(int level, const char *msg, void *usrptr)
        if (level <= CRYPT_LOG_DEBUG)
                return;
 
-       strncat(global_log, msg, sizeof(global_log) - strlen(global_log));
+       len = strlen(global_log);
+
+       if (len + strlen(msg) > sizeof(global_log)) {
+                       printf("Log buffer is too small, fix the test.\n");
+                       return;
+       }
+
+       strncat(global_log, msg, sizeof(global_log) - len);
        global_lines++;
        if (level == CRYPT_LOG_ERROR) {
                len = strlen(msg);
index ff5be52..8120842 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * simple unit test for utils_io.c (blockwise low level functions)
  *
- * Copyright (C) 2018-2020 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 Red Hat, Inc. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -99,7 +99,7 @@ static int test_write_buffer(void)
        if (ret < 0)
                goto out;
 
-       return (size_t) ret == test_length ? 0 : -EIO;
+       ret = (size_t) ret == test_length ? 0 : -EIO;
 out:
        if (fd >= 0)
                close(fd);
index e27a269..fcd59a8 100755 (executable)
@@ -5,7 +5,7 @@ MALLOC="--malloc-fill=aa"
 FREE="--free-fill=21"
 STACK="--max-stackframe=300000"
 EXTRAS="--read-var-info=yes --show-reachable=yes"
-LOGFILE="--log-file=./valglog.$(date +%s)_${INFOSTRING}"
+LOGFILE="--log-file=./valglog.$(date +%H:%M:%S:%N)_${INFOSTRING}"
 LEAKCHECK="--leak-check=full --track-origins=yes"
 
 exec valgrind  $SUP $GETSUP $CHILD $MALLOC $FREE $STACK $EXTRAS $LOGFILE  $LEAKCHECK "$@"
index 3dc0784..888efcc 100755 (executable)
@@ -5,7 +5,7 @@ MALLOC="--malloc-fill=aa"
 FREE="--free-fill=21"
 STACK="--max-stackframe=2000000"
 EXTRAS="--read-var-info=yes --show-reachable=yes"
-LOGFILE="--log-file=./valglog.$(date +%s)_${INFOSTRING}"
+LOGFILE="--log-file=./valglog.$(date +%H:%M:%S:%N)_${INFOSTRING}"
 LEAKCHECK="--leak-check=full --track-origins=yes"
 
 exec valgrind  $SUP $GETSUP $CHILD $MALLOC $FREE $STACK $EXTRAS $LOGFILE  $LEAKCHECK "$@"
index 4ce70f9..7f381e7 100755 (executable)
@@ -84,6 +84,30 @@ function compare_out() # $1 what, $2 expected
        [ $OPT != $2 ] && fail "$1 differs ($2)"
 }
 
+function check_root_hash_fail()
+{
+       echo -n "Root hash check "
+       ARR=(`$VERITYSETUP format $IMG $IMG_HASH --fec-device $FEC_DEV --fec-roots 2 -h sha256`)
+       ROOT_HASH=${ARR[28]}
+       ROOT_HASH_BAD=abcdef0000000000000000000000000000000000000000000000000000000000
+
+       $VERITYSETUP verify $IMG $IMG_HASH $ROOT_HASH || fail
+       $VERITYSETUP verify $IMG $IMG_HASH $ROOT_HASH_BAD >/dev/null 2>&1 && fail
+       $VERITYSETUP verify $IMG $IMG_HASH $ROOT_HASH_BAD --fec-device $FEC_DEV --fec-roots 2 >/dev/null 2>&1 && fail
+
+       $VERITYSETUP open $IMG $DEV_NAME $IMG_HASH $ROOT_HASH || fail
+       check_exists
+       dmsetup status $DEV_NAME | grep "verity V" >/dev/null || fail
+       $VERITYSETUP close $DEV_NAME >/dev/null 2>&1 || fail
+
+       $VERITYSETUP open $IMG $DEV_NAME $IMG_HASH $ROOT_HASH_BAD >/dev/null 2>&1 || fail
+       check_exists
+       dmsetup status $DEV_NAME | grep "verity C" >/dev/null || fail
+       $VERITYSETUP close $DEV_NAME >/dev/null 2>&1 || fail
+
+       echo "[OK]"
+}
+
 function check_root_hash() # $1 size, $2 hash, $3 salt, $4 version, $5 hash, [$6 offset]
 {
        if [ -z "$LOOPDEV2" ] ; then
@@ -228,14 +252,20 @@ function check_fec()
        HASH_REPAIRED=${ARR[0]}
 
        $VERITYSETUP close $DEV_NAME
-       rm $1 $2 $3 $IMG_TMP > /dev/null 2>&1
 
        if [ "$HASH_ORIG" != "$HASH_REPAIRED" ]; then
-               echo -n "[correction failed]"
-               return 1
-       fi
-
-       echo "[file was repaired][OK]"
+               echo -n "[kernel correction failed]"
+               $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS >/dev/null 2>&1 && fail "Userspace verify should fail"
+               echo -n "[userspace verify failed]"
+               RET=1
+       else
+               echo -n "[repaired in kernel]"
+               $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS >/dev/null 2>&1 || fail "Userspace verify failed"
+                echo "[userspace verify][OK]"
+                RET=0
+       fi
+       rm $1 $2 $3 $IMG_TMP > /dev/null 2>&1
+       return $RET
 }
 
 function check_option() # $1 size, $2 hash, $3 salt, $4 version, $5 hash, $6 CLI option, $7 status option
@@ -363,6 +393,8 @@ SALT=e48da609055204e89ae53b655ca2216dd983cf3cb829f34f63a297d106d53e2d
 
 echo "Verity tests [separate devices]"
 prepare 8192 1024
+check_root_hash_fail
+
 check_root_hash  512 9de18652fe74edfb9b805aaed72ae2aa48f94333f1ba5c452ac33b1c39325174 $SALT 1 sha256
 check_root_hash 1024 54d92778750495d1f80832b486ebd007617d746271511bbf0e295e143da2b3df $SALT 1 sha256
 check_root_hash 4096 e522df0f97da4febb882ac40f30b37dc0b444bf6df418929463fa25280f09d5c $SALT 1 sha256
@@ -399,6 +431,9 @@ if check_version 1 3; then
        if check_version 1 4; then
                check_option 512 $HASH $SALT 1 sha256 "--check-at-most-once" "check_at_most_once"
        fi
+       if check_version 1 7; then
+               check_option 512 $HASH $SALT 1 sha256 "--panic-on-corruption" "panic_on_corruption"
+       fi
 fi
 
 echo "Veritysetup [hash-offset bigger than 2G works] "
@@ -421,6 +456,11 @@ if check_version 1 3; then
          [ "$RET" -eq "3" ] && break
          [ "$RET" -eq "0" ] || fail "FEC repair failed"
 
+         (check_fec $IMG $IMG $IMG 512  500 50000 2457600 4915200 $(($RANDOM % 23 + 2)) $(($INDEX * 4)) 'n' $SALT) || fail "FEC repair failed"
+         (check_fec $IMG $IMG $IMG 512  500 50000 2457600 4915200 $(($RANDOM % 23 + 2)) $(($INDEX * 4)) 'y' $SALT) || fail "FEC repair failed"
+         (check_fec $IMG $IMG $IMG 4096  64 6250  4194304 8388608 $(($RANDOM % 23 + 2)) $(($INDEX * 4)) 'n' $SALT) || fail "FEC repair failed"
+         (check_fec $IMG $IMG $IMG 4096  64 6250  4194304 8388608 $(($RANDOM % 23 + 2)) $(($INDEX * 4)) 'y' $SALT) || fail "FEC repair failed"
+
          (check_fec $IMG $IMG_HASH $FEC_DEV 4096 30 30 0 0 $(($RANDOM % 23 + 2)) $(($INDEX * 4)) 'n' $SALT) || fail "FEC repair failed"
          (check_fec $IMG $IMG_HASH $FEC_DEV 4096 35 35 0 0 $(($RANDOM % 23 + 2)) $(($INDEX * 4))) || fail "FEC repair failed"
          (check_fec $IMG $IMG_HASH $FEC_DEV 512 2000 2000 0 0 $(($RANDOM % 23 + 2)) $(($INDEX * 4))) || fail "FEC repair failed"
@@ -438,7 +478,7 @@ checkUserSpaceRepair 400 512  2 256000  0       2 50
 checkUserSpaceRepair 500 512  2 2457600  4915200  1 1
 checkUserSpaceRepair -1  4096 2 0       0       3 10
 checkUserSpaceRepair 400 4096 2 2048000 0       2 1
-#checkUserSpaceRepair 500 4096 2 2457600 4915200 1 2 # FIXME
+checkUserSpaceRepair 500 4096 2 2457600 4915200 1 2
 
 remove_mapping
 exit 0