From 4a9862a666dee6fec82893d757e0a3b8091f3a01 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 28 May 2020 08:41:09 +0200 Subject: [PATCH 001/149] Add option for large IV to storage wrapper. Also implement some test vectors and use the same limits as in dm-crypt (IV offset alignnment). --- lib/crypto_backend/crypto_backend.h | 2 +- lib/crypto_backend/crypto_storage.c | 42 +++--- lib/luks1/keyencryption.c | 4 +- lib/luks2/luks2_keyslot_luks2.c | 4 +- lib/utils_storage_wrappers.c | 2 +- lib/utils_storage_wrappers.h | 1 + tests/crypto-vectors.c | 210 ++++++++++++++++------------ 7 files changed, 153 insertions(+), 112 deletions(-) diff --git a/lib/crypto_backend/crypto_backend.h b/lib/crypto_backend/crypto_backend.h index 13fd47c1..e44fc6f2 100644 --- a/lib/crypto_backend/crypto_backend.h +++ b/lib/crypto_backend/crypto_backend.h @@ -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); diff --git a/lib/crypto_backend/crypto_storage.c b/lib/crypto_backend/crypto_storage.c index 846f17c4..8b6c19cd 100644 --- a/lib/crypto_backend/crypto_storage.c +++ b/lib/crypto_backend/crypto_storage.c @@ -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,7 +56,8 @@ 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; @@ -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) diff --git a/lib/luks1/keyencryption.c b/lib/luks1/keyencryption.c index fdab63a6..cf781d41 100644 --- a/lib/luks1/keyencryption.c +++ b/lib/luks1/keyencryption.c @@ -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).", diff --git a/lib/luks2/luks2_keyslot_luks2.c b/lib/luks2/luks2_keyslot_luks2.c index 156f0c1d..c8fa7d71 100644 --- a/lib/luks2/luks2_keyslot_luks2.c +++ b/lib/luks2/luks2_keyslot_luks2.c @@ -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; diff --git a/lib/utils_storage_wrappers.c b/lib/utils_storage_wrappers.c index b7e816b1..09d16117 100644 --- a/lib/utils_storage_wrappers.c +++ b/lib/utils_storage_wrappers.c @@ -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; diff --git a/lib/utils_storage_wrappers.h b/lib/utils_storage_wrappers.h index aaaa8246..f360955b 100644 --- a/lib/utils_storage_wrappers.h +++ b/lib/utils_storage_wrappers.h @@ -31,6 +31,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, diff --git a/tests/crypto-vectors.c b/tests/crypto-vectors.c index a8f37978..466509a2 100644 --- a/tests/crypto-vectors.c +++ b/tests/crypto-vectors.c @@ -660,31 +660,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 +698,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 +788,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 +817,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 +846,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 +1142,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; } From 57eba0d6f525635521923c20761724573eac2415 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Sun, 28 Jun 2020 17:44:53 +0200 Subject: [PATCH 002/149] bitlk: Fix reading key data size in the decrypted key material We've assumed that first 4 bytes of the decrypted key data is the size of the key + metadata. Looks like this isn't true and only first two bytes contain the size and the other two bytes are unknown data, possibly related to reencryption and/or passphrase change. Fixes: #575 --- lib/bitlk/bitlk.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 2ce3a945..d5f3165b 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -908,7 +908,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,10 +923,12 @@ 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; } From 9412d9a0f11256c07e4c45787e25a4f61e05a001 Mon Sep 17 00:00:00 2001 From: Francesco Turco Date: Fri, 3 Jul 2020 16:36:03 +0200 Subject: [PATCH 003/149] use HTTPS for URLs --- FAQ | 19 ++++++++++--------- README | 4 ++-- README.md | 4 ++-- lib/crypto_backend/argon2/argon2.c | 4 ++-- lib/crypto_backend/argon2/argon2.h | 4 ++-- .../argon2/blake2/blake2-impl.h | 4 ++-- lib/crypto_backend/argon2/blake2/blake2.h | 4 ++-- lib/crypto_backend/argon2/blake2/blake2b.c | 4 ++-- .../argon2/blake2/blamka-round-opt.h | 4 ++-- .../argon2/blake2/blamka-round-ref.h | 4 ++-- lib/crypto_backend/argon2/core.c | 4 ++-- lib/crypto_backend/argon2/core.h | 4 ++-- lib/crypto_backend/argon2/encoding.c | 4 ++-- lib/crypto_backend/argon2/encoding.h | 4 ++-- lib/crypto_backend/argon2/opt.c | 4 ++-- lib/crypto_backend/argon2/ref.c | 4 ++-- lib/crypto_backend/argon2/thread.c | 4 ++-- lib/crypto_backend/argon2/thread.h | 4 ++-- lib/crypto_backend/crypto_gcrypt.c | 2 +- lib/utils_wipe.c | 2 +- 20 files changed, 46 insertions(+), 45 deletions(-) diff --git a/FAQ b/FAQ index 31060dde..52036760 100644 --- a/FAQ +++ b/FAQ @@ -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 @@ -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 > @@ -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 @@ -811,7 +811,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 @@ -1271,7 +1271,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. @@ -1701,8 +1701,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 @@ -2994,7 +2995,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 diff --git a/README b/README index 613aa091..f663509d 100644 --- a/README +++ b/README @@ -14,7 +14,7 @@ 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 DOWNLOAD: @@ -28,4 +28,4 @@ SOURCE CODE: NLS (PO TRANSLATIONS): PO files are maintained by: - http://translationproject.org/domain/cryptsetup.html + https://translationproject.org/domain/cryptsetup.html diff --git a/README.md b/README.md index b98e85f0..2d69ceba 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ For libcryptsetup documentation see [libcryptsetup API](https://mbroz.fedorapeop The libcryptsetup API/ABI changes are tracked in [compatibility report](https://abi-laboratory.pro/tracker/timeline/cryptsetup/). -NLS PO files are maintained by [TranslationProject](http://translationproject.org/domain/cryptsetup.html). +NLS PO files are maintained by [TranslationProject](https://translationproject.org/domain/cryptsetup.html). Help! ----- @@ -82,5 +82,5 @@ For cryptsetup and LUKS related questions, please use the dm-crypt mailing list, If you want to subscribe just send an empty mail to [dm-crypt-subscribe@saout.de](mailto:dm-crypt-subscribe@saout.de). -You can also browse [list archive](http://www.saout.de/pipermail/dm-crypt/) or read it through +You can also browse [list archive](https://www.saout.de/pipermail/dm-crypt/) or read it through [web interface](https://marc.info/?l=dm-crypt). diff --git a/lib/crypto_backend/argon2/argon2.c b/lib/crypto_backend/argon2/argon2.c index f748bccb..37771abd 100644 --- a/lib/crypto_backend/argon2/argon2.c +++ b/lib/crypto_backend/argon2/argon2.c @@ -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. diff --git a/lib/crypto_backend/argon2/argon2.h b/lib/crypto_backend/argon2/argon2.h index fc8682c2..20df933a 100644 --- a/lib/crypto_backend/argon2/argon2.h +++ b/lib/crypto_backend/argon2/argon2.h @@ -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. diff --git a/lib/crypto_backend/argon2/blake2/blake2-impl.h b/lib/crypto_backend/argon2/blake2/blake2-impl.h index e77ad92f..dcac8270 100644 --- a/lib/crypto_backend/argon2/blake2/blake2-impl.h +++ b/lib/crypto_backend/argon2/blake2/blake2-impl.h @@ -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. diff --git a/lib/crypto_backend/argon2/blake2/blake2.h b/lib/crypto_backend/argon2/blake2/blake2.h index 9f97e1c1..0c1b0ee6 100644 --- a/lib/crypto_backend/argon2/blake2/blake2.h +++ b/lib/crypto_backend/argon2/blake2/blake2.h @@ -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. diff --git a/lib/crypto_backend/argon2/blake2/blake2b.c b/lib/crypto_backend/argon2/blake2/blake2b.c index b8651f26..d8f69e8c 100644 --- a/lib/crypto_backend/argon2/blake2/blake2b.c +++ b/lib/crypto_backend/argon2/blake2/blake2b.c @@ -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. diff --git a/lib/crypto_backend/argon2/blake2/blamka-round-opt.h b/lib/crypto_backend/argon2/blake2/blamka-round-opt.h index 2c8942e3..3127f2a3 100644 --- a/lib/crypto_backend/argon2/blake2/blamka-round-opt.h +++ b/lib/crypto_backend/argon2/blake2/blamka-round-opt.h @@ -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. diff --git a/lib/crypto_backend/argon2/blake2/blamka-round-ref.h b/lib/crypto_backend/argon2/blake2/blamka-round-ref.h index b8f2cf47..16cfc1c7 100644 --- a/lib/crypto_backend/argon2/blake2/blamka-round-ref.h +++ b/lib/crypto_backend/argon2/blake2/blamka-round-ref.h @@ -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. diff --git a/lib/crypto_backend/argon2/core.c b/lib/crypto_backend/argon2/core.c index f5b0067a..b204ba98 100644 --- a/lib/crypto_backend/argon2/core.c +++ b/lib/crypto_backend/argon2/core.c @@ -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. diff --git a/lib/crypto_backend/argon2/core.h b/lib/crypto_backend/argon2/core.h index 78000ba9..59e25646 100644 --- a/lib/crypto_backend/argon2/core.h +++ b/lib/crypto_backend/argon2/core.h @@ -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. diff --git a/lib/crypto_backend/argon2/encoding.c b/lib/crypto_backend/argon2/encoding.c index 9de606e0..a7172636 100644 --- a/lib/crypto_backend/argon2/encoding.c +++ b/lib/crypto_backend/argon2/encoding.c @@ -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. diff --git a/lib/crypto_backend/argon2/encoding.h b/lib/crypto_backend/argon2/encoding.h index 7e83ec92..5b8b2ddb 100644 --- a/lib/crypto_backend/argon2/encoding.h +++ b/lib/crypto_backend/argon2/encoding.h @@ -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. diff --git a/lib/crypto_backend/argon2/opt.c b/lib/crypto_backend/argon2/opt.c index f6c20528..6c5e403f 100644 --- a/lib/crypto_backend/argon2/opt.c +++ b/lib/crypto_backend/argon2/opt.c @@ -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. diff --git a/lib/crypto_backend/argon2/ref.c b/lib/crypto_backend/argon2/ref.c index ad1cf461..10e45eba 100644 --- a/lib/crypto_backend/argon2/ref.c +++ b/lib/crypto_backend/argon2/ref.c @@ -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. diff --git a/lib/crypto_backend/argon2/thread.c b/lib/crypto_backend/argon2/thread.c index e099a00d..3ae2fb23 100644 --- a/lib/crypto_backend/argon2/thread.c +++ b/lib/crypto_backend/argon2/thread.c @@ -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. diff --git a/lib/crypto_backend/argon2/thread.h b/lib/crypto_backend/argon2/thread.h index 49d88367..d4ca10c1 100644 --- a/lib/crypto_backend/argon2/thread.h +++ b/lib/crypto_backend/argon2/thread.h @@ -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. diff --git a/lib/crypto_backend/crypto_gcrypt.c b/lib/crypto_backend/crypto_gcrypt.c index f2cf3c68..4811f212 100644 --- a/lib/crypto_backend/crypto_gcrypt.c +++ b/lib/crypto_backend/crypto_gcrypt.c @@ -53,7 +53,7 @@ struct crypt_cipher { /* * 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) { diff --git a/lib/utils_wipe.c b/lib/utils_wipe.c index 96dff298..36071c4c 100644 --- a/lib/utils_wipe.c +++ b/lib/utils_wipe.c @@ -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) From f695e155ec7ad155e0b44f4c27c71ffd21248ecb Mon Sep 17 00:00:00 2001 From: Francesco Turco Date: Fri, 3 Jul 2020 17:52:48 +0200 Subject: [PATCH 004/149] fix typos --- FAQ | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/FAQ b/FAQ index 52036760..70aca3a4 100644 --- a/FAQ +++ b/FAQ @@ -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 @@ -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 @@ -787,7 +787,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 > + cat /dev/urandom > 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 @@ -2828,7 +2828,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, @@ -2841,7 +2841,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 From ac535923e0cc1f38a04db6c36eacbc53a02043c6 Mon Sep 17 00:00:00 2001 From: Francesco Turco Date: Fri, 3 Jul 2020 17:55:55 +0200 Subject: [PATCH 005/149] fix capitalization --- FAQ | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FAQ b/FAQ index 70aca3a4..c7b267d1 100644 --- a/FAQ +++ b/FAQ @@ -1317,7 +1317,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 +1409,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 From a15008d876b48a23b464fc392318a5fee914da4c Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 16 Jun 2020 12:21:29 +0200 Subject: [PATCH 006/149] Do not create excessively large headers. When creating LUKS2 header with specified --offset much larger then LUKS2 header size we needlessly also wipe (allocate up to --offset) much larger file than needed. --- lib/luks2/luks2.h | 2 +- lib/luks2/luks2_json_format.c | 4 ++-- lib/setup.c | 2 +- tests/compat-test2 | 6 ++++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h index 6ab753a4..5b29a627 100644 --- a/lib/luks2/luks2.h +++ b/lib/luks2/luks2.h @@ -523,7 +523,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); diff --git a/lib/luks2/luks2_json_format.c b/lib/luks2/luks2_json_format.c index 1416766e..fb695f08 100644 --- a/lib/luks2/luks2_json_format.c +++ b/lib/luks2/luks2_json_format.c @@ -337,7 +337,7 @@ int LUKS2_generate_hdr( } 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 +352,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; } diff --git a/lib/setup.c b/lib/setup.c index 567f2624..52b472a1 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -1874,7 +1874,7 @@ 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)); diff --git a/tests/compat-test2 b/tests/compat-test2 index fd8d6f02..0fad9997 100755 --- a/tests/compat-test2 +++ b/tests/compat-test2 @@ -713,6 +713,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 From b2c1ec2f83376287702ad0309ded26d3b52de4f9 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 12 Jul 2020 08:14:25 +0200 Subject: [PATCH 007/149] Use the most recent image in travis.yml. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index c13f2f06..8e6614ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: c sudo: required dist: bionic +group: edge compiler: - gcc From 0cd7cac03f0ed1a0bd3661a41049e20c24a47615 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 21 Jul 2020 14:14:54 +0200 Subject: [PATCH 008/149] Fix crypto backend to properly handle ECB mode. Despite it should be never used, it should still work :) Bug introduced in version 2.3.2. --- lib/crypto_backend/crypto_storage.c | 2 +- tests/compat-test2 | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/crypto_backend/crypto_storage.c b/lib/crypto_backend/crypto_storage.c index 8b6c19cd..92dbae7c 100644 --- a/lib/crypto_backend/crypto_storage.c +++ b/lib/crypto_backend/crypto_storage.c @@ -64,7 +64,7 @@ static int crypt_sector_iv_init(struct crypt_sector_iv *ctx, 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") || diff --git a/tests/compat-test2 b/tests/compat-test2 index 0fad9997..c3852cd3 100755 --- a/tests/compat-test2 +++ b/tests/compat-test2 @@ -1023,5 +1023,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 From 04d2ff7689893da69c8158f66dc6913266bf7c1b Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 26 Jul 2020 21:09:04 +0200 Subject: [PATCH 009/149] tcrypt: Support activation of devices with a larger sector. TrueCrypt/VeraCrypt always use 512-bytes sector for encryption, but for devices with a larger native sector it stores this value in header. This patch allows activating of such devices, basically ignoring the mentioned sector size in header (it only must be multiple of 512-bytes sector). Fixes: #580. --- lib/tcrypt/tcrypt.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/tcrypt/tcrypt.c b/lib/tcrypt/tcrypt.c index 859f0ed7..037244ee 100644 --- a/lib/tcrypt/tcrypt.c +++ b/lib/tcrypt/tcrypt.c @@ -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; @@ -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,7 +1070,7 @@ 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))); From 16aec64d1b4eda3884602b86a01eb2411ed58369 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 27 Jul 2020 12:50:46 +0200 Subject: [PATCH 010/149] 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 dash - like "blake2s-256". Because we use dash as a separator, this patch adds an exception for this case. Fixes: #581. --- lib/utils_crypt.c | 5 ++++- tests/integrity-compat-test | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/utils_crypt.c b/lib/utils_crypt.c index 17dc6d8e..f09871c2 100644 --- a/lib/utils_crypt.c +++ b/lib/utils_crypt.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "libcryptsetup.h" @@ -76,8 +77,10 @@ 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 diff --git a/tests/integrity-compat-test b/tests/integrity-compat-test index 8607e854..c1272975 100755 --- a/tests/integrity-compat-test +++ b/tests/integrity-compat-test @@ -30,7 +30,7 @@ cleanup() { fail() { - echo + [ -n "$1" ] && echo "$1" echo "FAILED backtrace:" while caller $frame; do ((frame++)); done cleanup @@ -157,7 +157,15 @@ intformat() # alg alg_out tagsize outtagsize sector_size csum [keyfile keysize] echo -n "[INTEGRITY:$2:$4:$5]" 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 + if ! grep -q $1 /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]" @@ -316,6 +324,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 From 9c2d918474c17be0ea143390a821f517f04f790f Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 8 Aug 2020 20:54:07 +0100 Subject: [PATCH 011/149] libdevmapper: always return EEXIST if a task fails because the device already exists Allows concurrent opens to return a usable error instead of EINVAL --- lib/libdevmapper.c | 12 +++++++++++- lib/setup.c | 19 ++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index a82163b0..0906bd72 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -1305,6 +1305,12 @@ static int _create_dm_targets_params(struct crypt_dm_active_device *dmd) 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 +1360,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; @@ -1720,6 +1729,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, ¶ms); diff --git a/lib/setup.c b/lib/setup.c index 52b472a1..d8e665c0 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -4161,21 +4161,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 From d7279eeda1fa65281c4e7c3bf4ab3ff0493ab798 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 15 Aug 2020 17:16:58 +0200 Subject: [PATCH 012/149] Use Ubuntu 20.04 in Travis CI builds. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8e6614ed..04d4f717 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: c sudo: required -dist: bionic +os: linux +dist: focal group: edge compiler: From d1c3ad270328a741fff59792e6f4e93a9b0ba814 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Thu, 20 Aug 2020 12:08:06 +0200 Subject: [PATCH 013/149] bitlk: Set sector size to 512 when unknown/zero Fixes: #584 --- lib/bitlk/bitlk.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index d5f3165b..ea3d0c5b 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -506,6 +506,11 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params) } 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; + } + if (!(params->sector_size == 512 || params->sector_size == 4096)) { log_err(cd, _("Unsupported sector size %" PRIu16 "."), params->sector_size); r = -EINVAL; From a4f78e1c98acd504ab990a7651eea9afcae9fed0 Mon Sep 17 00:00:00 2001 From: Ingo Franzki Date: Mon, 17 Aug 2020 17:15:05 +0200 Subject: [PATCH 014/149] Support online reencryption for PAES cipher. Signed-off-by: Ingo Franzki (With few adjustments by Ondrej Kozina) --- lib/luks2/luks2_reencrypt.c | 2 +- man/cryptsetup.8 | 2 +- src/cryptsetup.c | 32 ++++++++++++++++++++------------ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index 68d31942..a76cb16e 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -2882,7 +2882,7 @@ static int reencrypt_init_by_passphrase(struct crypt_device *cd, 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; diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index bc3fff61..3154d479 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -199,7 +199,7 @@ as soon as possible and mounted (used) before full data area encryption is compl Action supports following additional \fB\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 diff --git a/src/cryptsetup.c b/src/cryptsetup.c index c527690e..5c651edc 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -3119,7 +3119,7 @@ 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 = {}; @@ -3161,6 +3161,7 @@ static int action_reencrypt_luks2(struct crypt_device *cd) if (!key_size) return -EINVAL; + vk_size = key_size; r = crypt_keyslot_max(CRYPT_LUKS2); if (r < 0) @@ -3175,11 +3176,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 +3190,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 +3199,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 +3229,6 @@ static int action_reencrypt_luks2(struct crypt_device *cd) } } - crypt_safe_free(vk); - if (r < 0) goto err; @@ -3241,6 +3248,7 @@ static int action_reencrypt_luks2(struct crypt_device *cd) kp[keyslot_old].passwordLen, keyslot_old, kp[keyslot_old].new, cipher, mode, ¶ms); 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 && From f61eb8b4270ef621c46ba267ef036fa44c19e1a7 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 19 Aug 2020 14:04:35 +0200 Subject: [PATCH 015/149] Add API test for reencryption with specific new key. --- tests/api-test-2.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/api-test-2.c b/tests/api-test-2.c index 8386c081..0c3b87e5 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -3675,6 +3675,12 @@ static void Luks2Reencryption(void) .luks2 = ¶ms2, }; + 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; @@ -4317,6 +4323,33 @@ static void Luks2Reencryption(void) OK_(crypt_deactivate(cd, CDEVICE_1)); CRYPT_FREE(cd); + _cleanup_dmdevices(); + 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 = ¶ms2; + 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, ¶ms2)); + 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 } From f5bf9ef9fadffcd9485532a9bdb75be8d8668df7 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 19 Aug 2020 14:45:12 +0200 Subject: [PATCH 016/149] Add test for reencryption with --master-key-file argument. --- tests/luks2-reencryption-test | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index e0529c90..df02d8ac 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -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 } @@ -173,6 +174,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 $@ } @@ -1366,5 +1372,17 @@ 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 + remove_mapping exit 0 From 03ecfe3478c0fe70dbb6a2ae9d562e6ed841d580 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 20 Aug 2020 18:52:31 +0200 Subject: [PATCH 017/149] Support panic_on_corruption option form dm-verity. The panic_on_corruption switch is available since kernel 5.9 (dm-verity 1.7.0). --- lib/libcryptsetup.h | 2 ++ lib/libdevmapper.c | 19 +++++++++++++++++-- lib/utils_dm.h | 1 + man/veritysetup.8 | 9 +++++---- src/veritysetup.c | 13 ++++++++++++- tests/verity-compat-test | 3 +++ 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index bfb0ca1b..7174907d 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -1103,6 +1103,8 @@ 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) /** * Active device runtime attributes diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 0906bd72..9c943ffc 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -205,6 +205,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; } @@ -693,14 +696,19 @@ 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) @@ -723,9 +731,10 @@ static char *get_dm_verity_params(const struct dm_target *tgt, uint32_t flags) *verity_verify_args = '\0'; if (num_options) - snprintf(features, sizeof(features)-1, " %d%s%s%s%s", num_options, + snprintf(features, sizeof(features)-1, " %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 @@ -1638,6 +1647,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.")); @@ -2178,6 +2191,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")) diff --git a/lib/utils_dm.h b/lib/utils_dm.h index 1501eb59..d384f350 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -69,6 +69,7 @@ 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 */ 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 }; diff --git a/man/veritysetup.8 b/man/veritysetup.8 index d907e1b6..d4d7aa42 100644 --- a/man/veritysetup.8 +++ b/man/veritysetup.8 @@ -40,8 +40,8 @@ Creates a mapping with backed by device and using The is a hexadecimal string. \fB\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. diff --git a/src/veritysetup.c b/src/veritysetup.c index e29b75dc..fcc12a6b 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -37,6 +37,7 @@ 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; @@ -153,6 +154,8 @@ 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) @@ -349,11 +352,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" : ""); } @@ -477,6 +482,7 @@ int main(int argc, const char **argv) { "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 }, @@ -592,6 +598,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); diff --git a/tests/verity-compat-test b/tests/verity-compat-test index 4ce70f9f..ca6ebcf2 100755 --- a/tests/verity-compat-test +++ b/tests/verity-compat-test @@ -399,6 +399,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] " From e7ca35091c26b46637898df0beff8d2554d22edd Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 20 Aug 2020 20:58:44 +0200 Subject: [PATCH 018/149] Add no_read/write_wrokqueue to dm-crypt options. These performance options, introduced in kernel 5.9, configures dm-crypt to bypass read or write workqueues and run encryption synchronously. Also support persistent storage of these flags for LUKS2. --- lib/libcryptsetup.h | 4 ++++ lib/libdevmapper.c | 37 ++++++++++++++++++++++++++++++--- lib/luks2/luks2_json_metadata.c | 2 ++ lib/utils_dm.h | 1 + man/cryptsetup.8 | 15 +++++++++++-- src/cryptsetup.c | 20 +++++++++++++++--- tests/device-test | 24 +++++++++++++++++++++ 7 files changed, 95 insertions(+), 8 deletions(-) diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index 7174907d..3d002c0c 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -1105,6 +1105,10 @@ int crypt_keyslot_destroy(struct crypt_device *cd, int keyslot); #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 diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 9c943ffc..8f8c94b5 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -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; } @@ -618,6 +621,10 @@ 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) @@ -630,10 +637,12 @@ static char *get_dm_crypt_params(const struct dm_target *tgt, uint32_t flags) *sector_feature = '\0'; if (num_options) { - snprintf(features, sizeof(features)-1, " %d%s%s%s%s%s%s", num_options, + snprintf(features, sizeof(features)-1, " %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); } else @@ -1610,6 +1619,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; } @@ -1632,14 +1649,21 @@ 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); + } 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| @@ -1697,7 +1721,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)) @@ -1941,6 +1968,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) { diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index e346067b..e0cc8eb2 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -1289,6 +1289,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 } }; diff --git a/lib/utils_dm.h b/lib/utils_dm.h index d384f350..22add180 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -70,6 +70,7 @@ static inline uint32_t act2dmflags(uint32_t act_flags) #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 */ 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 }; diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 3154d479..643012d4 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -146,7 +146,8 @@ Mandatory parametrs 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, \-\-no_write_workqueue +and \-\-allow\-discards. Refreshing device without any optional parameter will refresh the device with default setting (respective to device type). @@ -1209,6 +1210,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 +1335,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" diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 5c651edc..b32f167d 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -64,6 +64,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; @@ -182,6 +184,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; @@ -815,11 +823,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); @@ -3535,6 +3547,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") }, diff --git a/tests/device-test b/tests/device-test index 0898b455..b1ec5abe 100755 --- a/tests/device-test +++ b/tests/device-test @@ -38,6 +38,7 @@ skip() 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 +62,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() @@ -141,7 +145,13 @@ 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 -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 -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 @@ -162,6 +172,11 @@ 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 -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 format luks2 @@ -214,6 +229,15 @@ else 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 -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 fi From 6df1a694300c714d6fb551c187b7c62415a16f19 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 20 Aug 2020 22:38:03 +0200 Subject: [PATCH 019/149] Add some descriptive output to device test - performance flags. --- tests/device-test | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/device-test b/tests/device-test index b1ec5abe..343e81ea 100755 --- a/tests/device-test +++ b/tests/device-test @@ -123,11 +123,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 @@ -146,17 +147,20 @@ else $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 + echo - # LUKS + 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 @@ -173,13 +177,16 @@ else $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 @@ -189,6 +196,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 @@ -226,10 +234,12 @@ 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 @@ -240,6 +250,7 @@ else 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" From e75f5de2edeaeef84900242873506e16ac60a276 Mon Sep 17 00:00:00 2001 From: Tobias Stoeckmann Date: Mon, 24 Aug 2020 19:21:43 +0200 Subject: [PATCH 020/149] Check segment gaps regardless of heap space. Segments are validated in hdr_validate_segments. Gaps in segment keys are detected when collecting offsets. But if an invalid segment is very large, larger than count, it could happen that cryptsetup is unable to allocate enough memory, not giving a clue about what actually is the problem. Therefore check for gaps even if not enough memory is available. This gives much more information with debug output enabled. Obviously cryptsetup still fails if segments are perfectly fine but not enough RAM available. But at that stage, the user knows that it's the fault of the system, not of an invalid segment. --- lib/luks2/luks2_json_metadata.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index e0cc8eb2..e8095fce 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -679,11 +679,10 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj) if (first_backup < 0) first_backup = count; - intervals = malloc(first_backup * sizeof(*intervals)); - if (!intervals) { - log_dbg(cd, "Not enough memory."); - return 1; - } + if (first_backup <= count && (size_t)first_backup < SIZE_MAX / sizeof(*intervals)) + intervals = malloc(first_backup * sizeof(*intervals)); + else + intervals = NULL; for (i = 0; i < first_backup; i++) { jobj = json_segments_get_segment(jobj_segments, i); @@ -692,8 +691,14 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj) free(intervals); return 1; } - intervals[i].offset = json_segment_get_offset(jobj, 0); - intervals[i].length = json_segment_get_size(jobj, 0) ?: UINT64_MAX; + if (intervals != NULL) { + intervals[i].offset = json_segment_get_offset(jobj, 0); + intervals[i].length = json_segment_get_size(jobj, 0) ?: UINT64_MAX; + } + } + if (intervals == NULL) { + log_dbg(cd, "Not enough memory."); + return 1; } r = !validate_segment_intervals(cd, first_backup, intervals); From 63a5bd5ef6082456550fcc22e776ce5c6b0046fe Mon Sep 17 00:00:00 2001 From: Tobias Stoeckmann Date: Sun, 16 Aug 2020 11:40:36 +0200 Subject: [PATCH 021/149] Fixed some typos. The large text block happened due to reformat. It's just addition of "the" in front of problem, i.e. "If this is _the_ problem, ..." --- FAQ | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/FAQ b/FAQ index c7b267d1..82e8f4ab 100644 --- a/FAQ +++ b/FAQ @@ -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 @@ -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. @@ -821,7 +821,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 +911,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. @@ -991,7 +991,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 +1085,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 +1124,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 +1215,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 @@ -1295,7 +1295,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. @@ -1848,7 +1848,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 @@ -1918,7 +1918,7 @@ A. Contributors cryptsetup --header luksOpen - 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 @@ -2038,7 +2038,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 @@ -2781,7 +2781,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. @@ -2865,7 +2865,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. From 9c8c636ececf544481fce76f5a8b44133d75aad4 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 25 Aug 2020 14:38:35 +0200 Subject: [PATCH 022/149] Print a warning if API test generates too long log. --- tests/test_utils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/test_utils.c b/tests/test_utils.c index 0b00005c..053f9b99 100644 --- a/tests/test_utils.c +++ b/tests/test_utils.c @@ -279,7 +279,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); From b79ccb782b0be54ad71e2cf93e8011dd2d9e8bfd Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 24 Aug 2020 09:35:57 +0200 Subject: [PATCH 023/149] Ignore optimal-io if not aligned to minimal page size This values is bogus on some systems and causes wrong alignment for data area. Just ignore it there. Fixes: #585. --- lib/utils_device.c | 10 ++++++++-- tests/align-test2 | 27 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/utils_device.c b/lib/utils_device.c index 75449c09..04f9f89a 100644 --- a/lib/utils_device.c +++ b/lib/utils_device.c @@ -520,10 +520,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) + 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)) diff --git a/tests/align-test2 b/tests/align-test2 index f1b387e0..75d9cf44 100755 --- a/tests/align-test2 +++ b/tests/align-test2 @@ -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 From 72be05c817417d22a958cab548541fba0a994ead Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 26 Aug 2020 13:27:00 +0200 Subject: [PATCH 024/149] Fix error message in previous commit. --- lib/utils_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils_device.c b/lib/utils_device.c index 04f9f89a..ddbe8362 100644 --- a/lib/utils_device.c +++ b/lib/utils_device.c @@ -529,7 +529,7 @@ void device_topology_alignment(struct crypt_device *cd, !((unsigned long)opt_io_size % temp_alignment) && !MISALIGNED_4K(opt_io_size)) temp_alignment = (unsigned long)opt_io_size; else if (opt_io_size) - log_err(cd, "Ignoring bogus optimal-io size for data device (%u bytes).", opt_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)) From 8a170d0e80b42154d5592bbac31a3e361ac76a49 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 26 Aug 2020 15:43:40 +0200 Subject: [PATCH 025/149] Build branch v2.3.x in Travis. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 04d4f717..adf612be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ branches: only: - master - wip-luks2 + - v2.3.x before_install: - uname -a From 82e6ca7202376fa41ee3d07fdf5dbbe5dc9af154 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 26 Aug 2020 15:45:20 +0200 Subject: [PATCH 026/149] Set devel 2.3.x version. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0d2fa630..7810f029 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.67]) -AC_INIT([cryptsetup],[2.3.3]) +AC_INIT([cryptsetup],[2.3.4-git]) dnl library version from ..[-] LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-) From 3f20b04e426b33c731b41afa38d18096627030a0 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 25 Aug 2020 19:32:48 +0200 Subject: [PATCH 027/149] Avoid needlessly large allocations in LUKS2 validation code. In case LUKS2 backup segment creates gap in between last regular segment and backup segment report invalid metadata imediately. We stop on first error so there's no need to allocate large memory on heap (we may ran with mlock(MCL_FUTURE) set). Example: - total segments count is 3 - regular segments have keys "0" and "1" - first backup segment has key "42" --- lib/luks2/luks2_json_metadata.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index e8095fce..20a34c70 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -676,10 +676,16 @@ 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; - if (first_backup <= count && (size_t)first_backup < SIZE_MAX / sizeof(*intervals)) + if ((size_t)first_backup < SIZE_MAX / sizeof(*intervals)) intervals = malloc(first_backup * sizeof(*intervals)); else intervals = NULL; From 7ceaf3f313b8fa021503fc3e2bba1103a1c14551 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 25 Aug 2020 19:23:21 +0200 Subject: [PATCH 028/149] Simplify validation code a bit. Keep it simple. If there's not enough memory we can't validate segments. The LUKS2 specification does not recommend to continue processing LUKS2 metadata if it can not be properly validated. --- lib/luks2/luks2_json_metadata.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index 20a34c70..905bc953 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -594,9 +594,9 @@ static bool validate_segment_intervals(struct crypt_device *cd, 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."); @@ -687,8 +687,11 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj) if ((size_t)first_backup < SIZE_MAX / sizeof(*intervals)) intervals = malloc(first_backup * sizeof(*intervals)); - else - intervals = NULL; + + if (!intervals) { + log_dbg(cd, "Not enough memory."); + return 1; + } for (i = 0; i < first_backup; i++) { jobj = json_segments_get_segment(jobj_segments, i); @@ -697,14 +700,8 @@ static int hdr_validate_segments(struct crypt_device *cd, json_object *hdr_jobj) free(intervals); return 1; } - if (intervals != NULL) { - intervals[i].offset = json_segment_get_offset(jobj, 0); - intervals[i].length = json_segment_get_size(jobj, 0) ?: UINT64_MAX; - } - } - if (intervals == NULL) { - log_dbg(cd, "Not enough memory."); - return 1; + intervals[i].offset = json_segment_get_offset(jobj, 0); + intervals[i].length = json_segment_get_size(jobj, 0) ?: UINT64_MAX; } r = !validate_segment_intervals(cd, first_backup, intervals); From fb1b28777349591ed98d166ea820a1e3e9d9bf8c Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 26 Aug 2020 17:24:05 +0200 Subject: [PATCH 029/149] Add test for LUKS2 segments validation code fix. --- ...te-luks2-segment-wrong-backup-key-0.img.sh | 67 +++++++++++++++++++ ...te-luks2-segment-wrong-backup-key-1.img.sh | 67 +++++++++++++++++++ tests/luks2-validation-test | 2 + 3 files changed, 136 insertions(+) create mode 100755 tests/generators/generate-luks2-segment-wrong-backup-key-0.img.sh create mode 100755 tests/generators/generate-luks2-segment-wrong-backup-key-1.img.sh 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 index 00000000..2499a5eb --- /dev/null +++ b/tests/generators/generate-luks2-segment-wrong-backup-key-0.img.sh @@ -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 index 00000000..702fe712 --- /dev/null +++ b/tests/generators/generate-luks2-segment-wrong-backup-key-1.img.sh @@ -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 diff --git a/tests/luks2-validation-test b/tests/luks2-validation-test index 52945bad..04183fbc 100755 --- a/tests/luks2-validation-test +++ b/tests/luks2-validation-test @@ -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" From 03213ac23088187c961e57d0f233adbbae9f3071 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 27 Aug 2020 12:12:13 +0200 Subject: [PATCH 030/149] Fix posible buffer overflows in LUKS conversion. cipher[31] and cipher_mode[31] buffers were passed to crypt_parse_name_and_mode() routine where sscanf(s, "%31[^-]-%31s", cipher, cipher_mode) was called. In corner case it could cause terminating 0 byte written beyond respective arrays. --- lib/luks2/luks2_luks1_convert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/luks2/luks2_luks1_convert.c b/lib/luks2/luks2_luks1_convert.c index 603c44d2..9b70df11 100644 --- a/lib/luks2/luks2_luks1_convert.c +++ b/lib/luks2/luks2_luks1_convert.c @@ -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; From 2f4990868e3b9a530ff2dfe4d27a95c7ee1c3fea Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 27 Aug 2020 12:27:33 +0200 Subject: [PATCH 031/149] Explicitly terminate cipher strings during down conversion. --- lib/luks2/luks2_luks1_convert.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/luks2/luks2_luks1_convert.c b/lib/luks2/luks2_luks1_convert.c index 9b70df11..ff21b3ff 100644 --- a/lib/luks2/luks2_luks1_convert.c +++ b/lib/luks2/luks2_luks1_convert.c @@ -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); + strncpy(hdr1->cipherMode, cipher_mode, LUKS_CIPHERMODE_L - 1); + hdr1->cipherName[LUKS_CIPHERNAME_L-1] = '\0'; + hdr1->cipherMode[LUKS_CIPHERMODE_L-1] = '\0'; if (!json_object_object_get_ex(jobj_keyslot, "kdf", &jobj_kdf)) return -EINVAL; From 06bd23d120402d09f97c1bc0669434e3c272ae26 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 27 Aug 2020 21:23:00 +0200 Subject: [PATCH 032/149] Remove a gcc warning. --- lib/luks2/luks2_luks1_convert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/luks2/luks2_luks1_convert.c b/lib/luks2/luks2_luks1_convert.c index ff21b3ff..ff0a0352 100644 --- a/lib/luks2/luks2_luks1_convert.c +++ b/lib/luks2/luks2_luks1_convert.c @@ -825,8 +825,8 @@ int LUKS2_luks2_to_luks1(struct crypt_device *cd, struct luks2_hdr *hdr2, struct return r; strncpy(hdr1->cipherName, cipher, LUKS_CIPHERNAME_L - 1); - strncpy(hdr1->cipherMode, cipher_mode, LUKS_CIPHERMODE_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)) From 68cc46fc22ad1d26d8e722f26bddd702d4ffb03f Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 27 Aug 2020 23:29:51 +0200 Subject: [PATCH 033/149] Update cryptsetup.pot. --- po/cryptsetup.pot | 958 ++++++++++++++++++++++++---------------------- 1 file changed, 491 insertions(+), 467 deletions(-) diff --git a/po/cryptsetup.pot b/po/cryptsetup.pot index 75eee30f..a418674d 100644 --- a/po/cryptsetup.pot +++ b/po/cryptsetup.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-24 23:25+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \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:405 msgid "Cannot initialize device-mapper, running as non-root user." msgstr "" -#: lib/libdevmapper.c:402 +#: lib/libdevmapper.c:408 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "" -#: lib/libdevmapper.c:1131 +#: lib/libdevmapper.c:1149 msgid "Requested deferred flag is not supported." msgstr "" -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "" -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "" -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 msgid "Requested dm-crypt performance options are not supported." msgstr "" -#: lib/libdevmapper.c:1630 +#: lib/libdevmapper.c:1672 lib/libdevmapper.c:1676 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "" -#: lib/libdevmapper.c:1634 +#: lib/libdevmapper.c:1680 msgid "Requested dm-verity FEC options are not supported." msgstr "" -#: lib/libdevmapper.c:1638 +#: lib/libdevmapper.c:1684 msgid "Requested data integrity options are not supported." msgstr "" -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "" -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "" -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "" -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "" @@ -174,7 +175,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "" @@ -197,7 +198,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "" @@ -247,7 +248,7 @@ msgstr "" msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -412,8 +413,8 @@ msgstr "" msgid "Error during resuming device %s." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "" @@ -430,7 +431,7 @@ msgstr "" msgid "Key slot %d is invalid." msgstr "" -#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 +#: lib/setup.c:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "" @@ -443,7 +444,7 @@ msgstr "" msgid "Reencryption in-progress. Cannot activate device." msgstr "" -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "" @@ -452,106 +453,106 @@ msgstr "" msgid "LUKS2 reencryption recovery failed." msgstr "" -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 msgid "Device type is not properly initialized." msgstr "" -#: lib/setup.c:4171 +#: lib/setup.c:4175 #, 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:4182 #, 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:4301 msgid "Incorrect volume key specified for plain device." msgstr "" -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "" -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "" -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." msgstr "" -#: lib/setup.c:4438 lib/setup.c:5915 +#: lib/setup.c:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "" -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "" -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "" -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "" -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "" -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, c-format msgid "This operation is not supported for %s crypt device." msgstr "" -#: lib/setup.c:4865 +#: lib/setup.c:4870 msgid "Dump operation is not supported for this device type." msgstr "" -#: lib/setup.c:5190 +#: lib/setup.c:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "" -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, c-format msgid "Cannot convert device %s which is still in use." msgstr "" -#: lib/setup.c:5772 +#: lib/setup.c:5777 #, c-format msgid "Failed to assign keyslot %u as the new volume key." msgstr "" -#: lib/setup.c:5845 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "" -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "" -#: lib/setup.c:5982 +#: lib/setup.c:5987 msgid "Kernel keyring is not supported by the kernel." msgstr "" -#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 +#: lib/setup.c:5997 lib/luks2/luks2_reencrypt.c:2952 #, c-format msgid "Failed to read passphrase from keyring (error %d)." msgstr "" -#: lib/setup.c:6016 +#: lib/setup.c:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "" @@ -611,42 +612,47 @@ msgstr "" msgid "Device %s is not compatible." msgstr "" -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, c-format +msgid "Ignoring bogus optimal-io size for data device (%u bytes)." +msgstr "" + +#: lib/utils_device.c:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "" -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, c-format msgid "Cannot use device %s, permission denied." msgstr "" -#: lib/utils_device.c:730 +#: lib/utils_device.c:736 #, c-format msgid "Cannot get info about device %s." msgstr "" -#: lib/utils_device.c:753 +#: lib/utils_device.c:759 msgid "Cannot use a loopback device, running as non-root user." msgstr "" -#: lib/utils_device.c:763 +#: lib/utils_device.c:769 msgid "" "Attaching loopback device failed (loop device with autoclear flag is " "required)." msgstr "" -#: lib/utils_device.c:809 +#: lib/utils_device.c:815 #, c-format msgid "Requested offset is beyond real size of device %s." msgstr "" -#: lib/utils_device.c:817 +#: lib/utils_device.c:823 #, c-format msgid "Device %s has zero size." msgstr "" @@ -759,7 +765,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "" @@ -782,7 +788,7 @@ msgstr "" #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -805,42 +811,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "" @@ -866,7 +872,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -917,7 +923,7 @@ msgstr "" msgid "Requested LUKS hash %s is not supported." msgstr "" -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "" @@ -937,8 +943,8 @@ msgid "" 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "" @@ -1007,11 +1013,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "" @@ -1024,16 +1030,16 @@ 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 "" @@ -1078,57 +1084,57 @@ msgstr "" msgid "Invalid or unknown signature for BITLK device." msgstr "" -#: lib/bitlk/bitlk.c:510 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "" -#: lib/bitlk/bitlk.c:518 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "" -#: lib/bitlk/bitlk.c:543 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "" -#: lib/bitlk/bitlk.c:594 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "" -#: lib/bitlk/bitlk.c:627 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "" -#: lib/bitlk/bitlk.c:921 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "" -#: lib/bitlk/bitlk.c:929 -msgid "Wrong key size." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." msgstr "" -#: lib/bitlk/bitlk.c:981 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "" -#: lib/bitlk/bitlk.c:987 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "" -#: lib/bitlk/bitlk.c:1069 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "" -#: lib/bitlk/bitlk.c:1205 +#: lib/bitlk/bitlk.c:1212 msgid "" "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "" -#: lib/bitlk/bitlk.c:1209 +#: lib/bitlk/bitlk.c:1216 msgid "" "Cannot activate device, kernel dm-crypt is missing support for BITLK " "Elephant diffuser." @@ -1283,8 +1289,8 @@ msgstr "" 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "" @@ -1311,104 +1317,104 @@ msgid "" "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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, c-format msgid "Forbidden LUKS2 requirements detected in backup %s." msgstr "" -#: lib/luks2/luks2_json_metadata.c:1208 +#: lib/luks2/luks2_json_metadata.c:1216 msgid "Data offset differ on device and backup, restore failed." msgstr "" -#: lib/luks2/luks2_json_metadata.c:1214 +#: lib/luks2/luks2_json_metadata.c:1222 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:1229 #, c-format msgid "Device %s %s%s%s%s" msgstr "" -#: lib/luks2/luks2_json_metadata.c:1222 +#: lib/luks2/luks2_json_metadata.c:1230 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:1231 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:1233 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:1235 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "" -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "" -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 msgid "Failed to read LUKS2 requirements." msgstr "" -#: lib/luks2/luks2_json_metadata.c:2339 +#: lib/luks2/luks2_json_metadata.c:2349 msgid "Unmet LUKS2 requirements detected." msgstr "" -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "" "Operation incompatible with device marked for legacy reencryption. Aborting." msgstr "" -#: lib/luks2/luks2_json_metadata.c:2349 +#: lib/luks2/luks2_json_metadata.c:2359 msgid "" "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "" @@ -1447,7 +1453,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 "" @@ -1711,408 +1717,408 @@ msgstr "" msgid "Failed to create builtin token %s." msgstr "" -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 msgid "Can't do passphrase verification on non-tty inputs." msgstr "" -#: src/cryptsetup.c:221 +#: src/cryptsetup.c:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "" -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 msgid "" "WARNING: The --hash parameter is being ignored in plain mode with keyfile " "specified.\n" msgstr "" -#: src/cryptsetup.c:267 +#: src/cryptsetup.c:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "" -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "" -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "" -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "" -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "" -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "" -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "" -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 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:681 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "" -#: src/cryptsetup.c:701 +#: src/cryptsetup.c:709 msgid "" "Resize of active device requires volume key in keyring but --disable-keyring " "option is set." msgstr "" -#: src/cryptsetup.c:838 +#: src/cryptsetup.c:850 msgid "Benchmark interrupted." msgstr "" -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, c-format msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" msgstr "" -#: src/cryptsetup.c:875 +#: src/cryptsetup.c:887 #, c-format msgid "%-10s N/A\n" msgstr "" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "" -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" msgstr "" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "" -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 msgid "Really try to repair LUKS device header?" msgstr "" -#: src/cryptsetup.c:1160 src/integritysetup.c:146 +#: src/cryptsetup.c:1172 src/integritysetup.c:146 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:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "" -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 msgid "Integrity option can be used only for LUKS2 format." msgstr "" -#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 +#: src/cryptsetup.c:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "" -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, c-format msgid "Cannot create header file %s." msgstr "" -#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204 +#: src/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "" -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, c-format msgid "Cannot use %s as on-disk header." msgstr "" -#: src/cryptsetup.c:1313 src/integritysetup.c:227 +#: src/cryptsetup.c:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "" -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "" -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 msgid "" "Cannot determine volume key size for LUKS without keyslots, please use --key-" "size option." msgstr "" -#: src/cryptsetup.c:1488 +#: src/cryptsetup.c:1500 msgid "Device activated but cannot make flags persistent." msgstr "" -#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1651 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "" -#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 +#: src/cryptsetup.c:1593 src/cryptsetup.c:1654 msgid "" "This is the last keyslot. Device will become unusable after purging this key." msgstr "" -#: src/cryptsetup.c:1582 +#: src/cryptsetup.c:1594 msgid "Enter any remaining passphrase: " msgstr "" -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 msgid "Enter passphrase to be deleted: " msgstr "" -#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 +#: src/cryptsetup.c:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 msgid "Enter new passphrase for key slot: " msgstr "" -#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "" -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "" -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "" -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "" -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "" -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 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:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "" -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "" -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "" -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, c-format msgid "Refresh is not supported for device type %s" msgstr "" -#: src/cryptsetup.c:2311 +#: src/cryptsetup.c:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "" -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 msgid "Command requires device and mapped name as arguments." msgstr "" -#: src/cryptsetup.c:2336 +#: src/cryptsetup.c:2348 #, 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:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "" -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2410 #, c-format msgid "Device is already %s type." msgstr "" -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "" -#: src/cryptsetup.c:2409 +#: src/cryptsetup.c:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 msgid "Option --priority, --label or --subsystem is missing." msgstr "" -#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539 +#: src/cryptsetup.c:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "" -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "" -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, c-format msgid "Failed to add luks2-keyring token %d." msgstr "" -#: src/cryptsetup.c:2502 src/cryptsetup.c:2564 +#: src/cryptsetup.c:2514 src/cryptsetup.c:2576 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "" -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:2531 #, c-format msgid "Token %d is not in use." msgstr "" -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "" -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, c-format msgid "Failed to get token %d for export." msgstr "" -#: src/cryptsetup.c:2594 +#: src/cryptsetup.c:2606 msgid "--key-description parameter is mandatory for token add action." msgstr "" -#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 +#: src/cryptsetup.c:2612 src/cryptsetup.c:2620 msgid "Action requires specific token. Use --token-id parameter." msgstr "" -#: src/cryptsetup.c:2613 +#: src/cryptsetup.c:2625 #, c-format msgid "Invalid token operation %s." msgstr "" -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, c-format msgid "Auto-detected active dm device '%s' for data device %s.\n" msgstr "" -#: src/cryptsetup.c:2672 +#: src/cryptsetup.c:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "" -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2121,252 +2127,252 @@ msgid "" "To run reencryption in online mode, use --active-name parameter instead.\n" msgstr "" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "" -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "" "Adjusting --reduce-device-size value to twice the --offset % " "(sectors).\n" msgstr "" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "" -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "" -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "" -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "" -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "" -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "" -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "" -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 msgid "" "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt " "tool for LUKS1." msgstr "" -#: src/cryptsetup.c:3297 +#: src/cryptsetup.c:3317 msgid "" "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt " "utility." msgstr "" -#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178 +#: src/cryptsetup.c:3327 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "" -#: src/cryptsetup.c:3315 +#: src/cryptsetup.c:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "" -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "" -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr "" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 msgid "set permanent configuration options for LUKS2" msgstr "" -#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 +#: src/cryptsetup.c:3376 src/cryptsetup.c:3377 msgid " []" msgstr "" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 msgid "add key to LUKS device" msgstr "" -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr "" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 msgid "removes supplied key or key file from LUKS device" msgstr "" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3379 msgid "changes supplied key or key file of LUKS device" msgstr "" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3380 msgid "converts a key to new pbkdf parameters" msgstr "" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr "" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "" -#: src/cryptsetup.c:3368 +#: src/cryptsetup.c:3388 msgid "Resume suspended LUKS device" msgstr "" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr "" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" msgstr "" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2375,7 +2381,7 @@ msgid "" "bitlkClose\n" msgstr "" -#: src/cryptsetup.c:3399 +#: src/cryptsetup.c:3419 #, c-format msgid "" "\n" @@ -2385,14 +2391,14 @@ msgid "" " optional key file for the new key for luksAddKey action\n" msgstr "" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" "Default compiled-in metadata format is %s (for luksFormat action).\n" msgstr "" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2404,7 +2410,7 @@ msgid "" "\tIteration time: %d, Memory required: %dkB, Parallel threads: %d\n" msgstr "" -#: src/cryptsetup.c:3422 +#: src/cryptsetup.c:3442 #, c-format msgid "" "\n" @@ -2414,725 +2420,733 @@ msgid "" "\tLUKS: %s, Key: %d bits, LUKS header hashing: %s, RNG: %s\n" msgstr "" -#: src/cryptsetup.c:3431 +#: src/cryptsetup.c:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, c-format msgid "%s: requires %s as arguments" msgstr "" -#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536 +#: src/cryptsetup.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "" -#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 msgid "Show debug messages including JSON metadata" msgstr "" -#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1617 msgid "The cipher used to encrypt the disk (see /proc/crypto)" msgstr "" -#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619 +#: src/cryptsetup.c:3511 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "" -#: src/cryptsetup.c:3492 +#: src/cryptsetup.c:3512 msgid "Verifies the passphrase by asking for it twice" msgstr "" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "" -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 msgid "Dump volume (master) key instead of keyslots info" msgstr "" -#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3516 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "" -#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562 +#: src/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 msgid "Limits the read from newly added keyfile" msgstr "" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 msgid "Number of bytes to skip in newly added keyfile" msgstr "" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3521 msgid "Slot number for new key (default is first free)" msgstr "" -#: src/cryptsetup.c:3502 +#: src/cryptsetup.c:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "" -#: src/cryptsetup.c:3504 +#: src/cryptsetup.c:3524 msgid "The start offset in the backend device" msgstr "" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3526 msgid "Create a readonly mapping" msgstr "" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "" -#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "" -#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "" -#: src/cryptsetup.c:3511 +#: src/cryptsetup.c:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 msgid "File with LUKS header and keyslots backup" msgstr "" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "" -#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 msgid "Share device with another non-overlapping crypt segment" msgstr "" -#: src/cryptsetup.c:3516 src/veritysetup.c:477 +#: src/cryptsetup.c:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "" -#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 msgid "" "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" msgstr "" -#: src/cryptsetup.c:3527 +#: src/cryptsetup.c:3547 msgid "Disable password quality check (if enabled)" msgstr "" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 msgid "Use dm-crypt same_cpu_crypt performance compatibility option" msgstr "" -#: src/cryptsetup.c:3529 +#: src/cryptsetup.c:3549 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" msgstr "" -#: src/cryptsetup.c:3530 +#: src/cryptsetup.c:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "" + +#: src/cryptsetup.c:3552 msgid "Device removal is deferred until the last user closes it" msgstr "" -#: src/cryptsetup.c:3531 +#: src/cryptsetup.c:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "" -#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" msgstr "" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 msgid "Disable loading volume keys via kernel keyring" msgstr "" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 msgid "Do not ask for passphrase if activation by token fails" msgstr "" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3567 msgid "Token number (default: any)" msgstr "" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 msgid "Read or write the json from or to a file" msgstr "" -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3576 msgid "LUKS2 header metadata area size" msgstr "" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "" -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "" -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "" -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "" -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "" -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "" -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "" -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "" -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 msgid "Option --shared is allowed only for open of plain device." msgstr "" -#: src/cryptsetup.c:3728 src/integritysetup.c:654 +#: src/cryptsetup.c:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "" -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "" -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 msgid "" "Option --serialize-memory-hard-pbkdf is allowed only for open operation." msgstr "" -#: src/cryptsetup.c:3743 +#: src/cryptsetup.c:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "" -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 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:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "" -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 msgid "" "Option --integrity-no-wipe can be used only for format action with integrity " "extension." msgstr "" -#: src/cryptsetup.c:3770 +#: src/cryptsetup.c:3792 msgid "" "Options --label and --subsystem are allowed only for luksFormat and config " "LUKS2 operations." msgstr "" -#: src/cryptsetup.c:3776 +#: src/cryptsetup.c:3798 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:3803 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "" -#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "" -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "" -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 msgid "Only one --key-file argument is allowed." msgstr "" -#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "" -#: src/cryptsetup.c:3813 +#: src/cryptsetup.c:3835 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "" -#: src/cryptsetup.c:3817 +#: src/cryptsetup.c:3839 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "" -#: src/cryptsetup.c:3821 +#: src/cryptsetup.c:3843 msgid "Option --align-payload is allowed only for luksFormat." msgstr "" -#: src/cryptsetup.c:3825 +#: src/cryptsetup.c:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "" -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "" -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "" -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 msgid "Option --skip is supported only for open of plain and loopaes devices." msgstr "" -#: src/cryptsetup.c:3851 +#: src/cryptsetup.c:3873 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:3879 msgid "" "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only " "for TCRYPT device." msgstr "" -#: src/cryptsetup.c:3862 +#: src/cryptsetup.c:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "" -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "" -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "" -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "" "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "" -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 msgid "" "Option --veracrypt-query-pim is supported only for VeraCrypt compatible " "devices." msgstr "" -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 msgid "" "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive." msgstr "" -#: src/cryptsetup.c:3896 +#: src/cryptsetup.c:3918 msgid "Option --priority can be only ignore/normal/prefer." msgstr "" -#: src/cryptsetup.c:3901 src/cryptsetup.c:3939 +#: src/cryptsetup.c:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "" -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "" -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "" -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "" -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "" -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "" -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "" -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "" -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "" -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "" -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "" -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "" -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "" -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "" -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "" -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "" -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "" -#: src/cryptsetup.c:4014 +#: src/cryptsetup.c:4036 msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." msgstr "" -#: src/veritysetup.c:66 +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "" -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, c-format msgid "Cannot create hash image %s for writing." msgstr "" -#: src/veritysetup.c:107 +#: src/veritysetup.c:108 #, c-format msgid "Cannot create FEC image %s for writing." msgstr "" -#: src/veritysetup.c:179 +#: src/veritysetup.c:182 msgid "Invalid root hash string specified." msgstr "" -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "" -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "" -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr "" -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr "" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr "" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3142,7 +3156,7 @@ msgid "" " hash of the root node on \n" msgstr "" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3151,106 +3165,116 @@ msgid "" "Hash format: %u\n" msgstr "" -#: src/veritysetup.c:466 +#: src/veritysetup.c:471 msgid "Do not use verity superblock" msgstr "" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 msgid "Path to device with error correction data" msgstr "" -#: src/veritysetup.c:472 src/integritysetup.c:549 +#: src/veritysetup.c:477 src/integritysetup.c:549 msgid "path" msgstr "" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 msgid "Verify data block only the first time it is read" msgstr "" -#: src/veritysetup.c:582 +#: src/veritysetup.c:588 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:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "" -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 msgid "" "Option --ignore-corruption and --restart-on-corruption cannot be used " "together." msgstr "" +#: src/veritysetup.c:603 +msgid "" +"Option --panic-on-corruption and --restart-on-corruption cannot be used " +"together." +msgstr "" + #: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." From aa762d5cc1a20603e5808a358181aa65a6190647 Mon Sep 17 00:00:00 2001 From: Petr Pisar Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 034/149] po: update cs.po (from translationproject.org) --- po/cs.po | 977 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 503 insertions(+), 474 deletions(-) diff --git a/po/cs.po b/po/cs.po index 732c0412..4b88be35 100644 --- a/po/cs.po +++ b/po/cs.po @@ -23,10 +23,10 @@ # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-15 18:12+02:00\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-01 18:10+02:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -36,61 +36,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:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "Požadovaný příznak pozdrženo není podporován." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, 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:1547 msgid "Unknown dm target type." msgstr "Neznámý druh cíle DM." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 msgid "Requested data integrity options are not supported." msgstr "Požadované volby integrity dat nejsou podporovány." -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "Požadované volby sector_size není podporována." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Zahazování (TRIM) není podporováno." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 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:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Dotaz na část dm-%s selhal." @@ -196,7 +197,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Zařízení %s není aktivní." @@ -219,7 +220,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Nepodporovaná velikost šifrovaného sektoru." @@ -267,7 +268,7 @@ msgstr "POZOR: Metadata LUKS2 změnila velikost na % bajtů.\n" msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "POZOR: Oblast s pozicemi klíčů pro LUKS2 změnila velikost na % bajtů.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -431,8 +432,8 @@ msgstr "Probuzení není na zařízení %s podporováno." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Heslo svazku neodpovídá svazku." @@ -449,7 +450,7 @@ msgstr "Záměna novou pozicí klíče se nezdařila." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Pozice klíče %d není aktivní." @@ -462,7 +463,7 @@ msgstr "Hlavička zařízení se překrývá s datovou oblastí." 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/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Získání zámku pro přešifrování selhalo." @@ -471,106 +472,106 @@ msgstr "Získání zámku pro přešifrování selhalo." msgid "LUKS2 reencryption recovery failed." msgstr "Obnova přešifrování LUKS2 selhalo." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Zařízení %s již existuje." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 msgid "Incorrect volume key specified for plain device." msgstr "Byl zadán neplatný klíč svazku." -#: lib/setup.c:4405 +#: lib/setup.c:4410 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:4417 msgid "Root hash signature required." msgstr "Je potřeba podpis kořenového otisku." -#: lib/setup.c:4421 +#: lib/setup.c:4426 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, 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:4521 #, c-format msgid "Invalid device %s." msgstr "Neplatné zařízení %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Vyhrazená paměť pro klíč svazku je příliš malá." -#: lib/setup.c:4640 +#: lib/setup.c:4645 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:4662 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:4664 #, 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:4870 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:5195 #, 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:5480 #, 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:5777 #, 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:5850 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:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 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." @@ -630,41 +631,46 @@ msgstr "Zařízení %s neexistuje nebo přístup byl zamítnut." msgid "Device %s is not compatible." msgstr "Zařízení %s není kompatibilní." +#: lib/utils_device.c:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Zařízení %s je příliš malé. Je třeba alespoň % bajtů." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "Zařízení %s má nulovou velikost." @@ -775,7 +781,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Na zařízení %s nelze zapsat, povolení zamítnuto." @@ -798,7 +804,7 @@ msgstr "Chyba vstupu/výstupu při šifrování pozice klíče." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -821,42 +827,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Soubor se zálohou hlavičky %s nelze načíst." @@ -878,7 +884,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -931,7 +937,7 @@ msgstr "Oprava selhala." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "V hlavičce LUKS nenalezen žádný známý problém." @@ -951,8 +957,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Poskytnut UUID LUKSu ve špatném tvaru." @@ -1021,11 +1027,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Ujistěte se, že jaderný modul algif_skcipher je zaveden." @@ -1038,16 +1044,16 @@ 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." @@ -1070,73 +1076,73 @@ msgstr "Při rozboru hlavního klíče svazku byl nalezen nečekaný řetězec ( 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:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Z %s nebylo možné načíst vzorec BITLK." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK verze 1 není v současnosti podporován." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 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:502 +#: 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:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Nepodporovaná velikost sektoru %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, 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:542 +#: lib/bitlk/bitlk.c:548 #, 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:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Neznámý nebo nepodporovaný druh šifrování." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, 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:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Tato operace není podporována." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Špatná velikost klíče." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Nečekaná velikost údajů o klíči." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 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:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "Zařízení BITLK s typem „%s“ nelze aktivovat." -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 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:1204 +#: lib/bitlk/bitlk.c:1212 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:1208 +#: lib/bitlk/bitlk.c:1216 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." @@ -1290,8 +1296,8 @@ msgstr "Jádro nepodporuje mapování dm-integrity." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, 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." @@ -1318,40 +1324,40 @@ msgstr "Požadovaná poloha dat je příliš nízká." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "POZOR: oblast s pozicemi klíčů (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1361,7 +1367,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1371,50 +1377,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 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:2165 msgid "Unsupported device integrity configuration." msgstr "Nepodporovaná konfigurace integrity zařízení." -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 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:2349 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:2357 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:2359 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ší." @@ -1452,7 +1458,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." @@ -1702,69 +1708,69 @@ msgstr "Žádná volná pozice s tokenem" msgid "Failed to create builtin token %s." msgstr "Vestavěný token %s nebylo možné vytvořit" -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 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:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Operace zrušena.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Je vyžadován přepínač --key-file." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Zadejte PIM VeraCryptu: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Neplatná hodnota VIM: chyba rozboru" -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Neplatná hodnota PIM: 0" -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Neplatná hodnota PIM: mimo rozsah" -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 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:549 #, 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:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1774,69 +1780,69 @@ 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:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Hodnocení výkonu přerušeno." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s –\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s –\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Výsledek hodnocení výkonu není spolehlivý." # ???: are aproximated? -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, 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:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algoritmus | Klíč | Šifrování | Dešifrování\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "–" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1844,19 +1850,19 @@ 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:1101 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:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Zadejte heslo pro obnovení přešifrování: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 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:1172 src/integritysetup.c:146 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 +1871,106 @@ 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:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Dočasné zařízení %s nelze deaktivovat." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 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:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Nepodporované volby velikosti metadat LUKS2." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 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:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Nastavení parametrů PBKDF selhalo." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 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:1462 src/cryptsetup.c:1773 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Zadejte jakékoliv jiné heslo: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 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:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Zadejte jakékoliv existující heslo: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 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:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Zadejte nové heslo: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 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:1963 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:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1974,12 +1980,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:2078 #, 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:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1987,30 +1993,30 @@ 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:2219 src/cryptsetup.c:2240 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:2270 #, 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:2281 #, 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:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Nerozpoznaná metadata druhu zařízení %s." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -2019,95 +2025,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:2355 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:2392 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:2410 #, c-format msgid "Device is already %s type." msgstr "Zařízení je již druhu %s." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, 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:2421 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:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Token %d je neplatný." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Token %d se používá." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "Token %d se nepoužívá." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Import tokenu ze souboru selhal." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "Neplatná operace tokenu %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, 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:2686 #, 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:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2120,237 +2126,237 @@ 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:2768 msgid "Invalid LUKS device type." msgstr "Neplatný druh zařízení LUKS." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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)." -#: src/cryptsetup.c:2766 +#: src/cryptsetup.c:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Upravuje se hodnota --reduce-device-size na dvojnásobek --offset % (v sektorech).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 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:2813 #, 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:2828 #, 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:2830 src/cryptsetup.c:2837 #, 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:2901 #, 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:3065 src/cryptsetup.c:3071 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:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Zadejte heslo pro pozici klíče %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Zadejte heslo pro pozici klíče %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Příkaz vyžaduje jako argument zařízení." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 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:3339 msgid "LUKS2 device is not in reencryption." msgstr "Zařízení LUKS2 se nepřešifrovává." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "otevře zařízení jako " -#: 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "zavře zařízení (odstraní mapování)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "změní velikost aktivního zařízení" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "zobrazí stav zařízení" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher <šifra>]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "pokusí se opravit metadata uložená na disku" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "přešifruje zařízení LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 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:3374 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:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "naformátuje zařízení LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 msgid "converts a key to new pbkdf parameters" msgstr "převede klíč do nových parametrů PBKDF" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "smaže klíč s číslem ze zařízení LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "zobrazí UUID zařízení LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "otestuje na hlavičku oddílu LUKS" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "vypíše údaje o oddílu LUKS" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "vypíše údaje o oddílu TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 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:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "Probudí uspané zařízení LUKS" # TODO: not consistent with previous line -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 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:3390 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:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 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:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2358,7 +2364,7 @@ msgstr "" "\n" " je jedna z:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2370,7 +2376,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:3419 #, c-format msgid "" "\n" @@ -2385,7 +2391,7 @@ msgstr "" " je číslo pozice klíče LUKS, který se má upravit\n" " je volitelný soubor s novým klíčem pro akci luksAddKey\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2394,7 +2400,7 @@ msgstr "" "\n" "Výchozí zakompilovaný formát metadat (pro akci luksFormat) je %s.\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2411,7 +2417,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:3442 #, c-format msgid "" "\n" @@ -2426,443 +2432,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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 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.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 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.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Vypíše verzi balíku" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 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.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Zobrazuje ladicí hlášky" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Klíč načte ze souboru" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "(Hlavní) klíč svazku načte ze souboru." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITY" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "bajty" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 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:3519 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:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SEKTORY" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 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:3525 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:3526 msgid "Create a readonly mapping" msgstr "Vytvoří mapování určené jen pro čtení" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Nevyžaduje potvrzení" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "sekundy" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Zarovnává data na hranici sektorů – pro luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 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:3535 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:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "Použije zařízení s UUID" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 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:3539 msgid "Do not activate device, just check passphrase" msgstr "Zařízení neaktivuje, jen zkontroluje heslo" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 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:3541 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:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Použije se záložní (druhá) hlavička TCRYPT" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Hledá také zařízení kompatibilní s VeraCrypt" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 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:3545 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:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "Vypne kontrolku odolnosti hesla (byla-li zapnuta)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 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:3549 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:3550 +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:3551 +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:3552 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:3553 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:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "milisekundy" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilobajty" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "náročnost paralelizace PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "vlákna" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 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:3559 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:3560 msgid "Disable locking of on-disk metadata" msgstr "Vypne zamykání metadata uložených na disku" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 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:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Algoritmus pro integritu dat (pouze LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 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:3564 src/integritysetup.c:547 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:3565 src/integritysetup.c:577 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:3566 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:3567 msgid "Token number (default: any)" msgstr "Číslo tokenu (výchozí cokoliv)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Popis klíče" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Velikost sektoru šifrování (výchozí: 512 bajtů)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 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:3571 msgid "Set activation flags persistent for device" msgstr "Nastaví trvalé příznaky pro aktivaci zařízení" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Nastaví jmenovku zařízení LUKS2" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Nastaví jmenovku podsystému zařízení LUKS2" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 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:3575 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:3576 msgid "LUKS2 header metadata area size" msgstr "Velikost oblasti s metadaty hlavičky LUKS2" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Velikost oblasti s pozicemi klíčů hlavičky LUKS" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Reaktivuje zařízení s novými parametry" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 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:3580 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:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Zašifruje zařízení LUKS2 (šifrování bez mezikopie)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Natrvalo dešifruje zařízení LUKS2 (odstraní šifrování)." -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Inicializuje přešifrování LUKS2 pouze v metadatech." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 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:3585 src/cryptsetup_reencrypt.c:1635 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:3586 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:3587 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:3588 msgid "Reencryption hotzone checksums hash" msgstr "Algoritmus kontrolního součtu při přešifrování" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[PŘEPÍNAČ…] " -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Chybí argument ." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Neznámá akce." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 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:3740 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:3745 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:3750 src/integritysetup.c:654 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:3755 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:3760 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:3765 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:3775 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,256 +2885,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:3781 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:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Pozice klíče není platná." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 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:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Zadána neplatná velikost metadat LUKS2." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Zadána neplatná velikost pozic s klíči LUKS2." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 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:3866 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:3873 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:3879 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:3884 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:3889 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:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Zadán neplatný argument parametru --veracrypt-pim." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 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:3907 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:3911 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:3918 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:3923 src/cryptsetup.c:3961 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:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 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:3939 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:3951 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:3956 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:3966 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:3971 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:3982 msgid "Cannot disable metadata locking." msgstr "Zamykání metadata nelze vypnout." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 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.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Zadána neplatná velikost zařízení." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 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:4006 src/cryptsetup_reencrypt.c:1733 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:4011 msgid "Invalid data size specification." msgstr "Zadána neplatná velikost dat." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Velikost ke zmenšení přetekla." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "Dešifrování LUKS2 vyžaduje přepínač --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 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:4028 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:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Přepínače --device-size a --size nelze kombinovat." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Přepínače --keyslot-cipher a --keyslot-key-size musí být použity spolu." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Zadán neplatný řetězec se solí." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 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:190 #, c-format msgid "Invalid signature file %s." msgstr "Neplatné soubor s podpisem %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Soubor s podpisem %s nelze číst." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "naformátuje zařízení" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " " -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "ověří zařízení" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " " -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "zobrazí stav aktivního zařízení" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "zobrazí údaje z disku" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3135,7 +3153,7 @@ msgstr "" " je zařízení obsahující ověřovací data\n" " haš kořenového uzlu na \n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3146,102 +3164,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "Nepoužije superblok verity" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 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:472 msgid "number" msgstr "číslo" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Velikost bloku na zařízení dat" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Velikost bloku na zařízení hašů" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "Paritní bajty FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Počet bloků v datovém souboru" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "bloky" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "cesta" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Poloha začátku dat v zařízení hašů" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Poloha začátku dat v zařízení FEC" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Hašovací algoritmus" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "řetězec" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Sůl" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "šestnáctkový řetězec" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Cesta k souboru s podpisem kořenového otisku" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 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:485 +msgid "Panic kernel if corruption is detected" +msgstr "Jádro zpanikaří, pokud je zjištěno poškození" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Ignoruje poškození, pouze jej zaznamená" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Neověřuje vynulované bloky" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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:588 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:593 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:598 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/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3904,6 +3930,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Zapsaní souboru s dokumentem JSON selhalo." +#~ 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." From cccb7780eceb699a366cebd9d55e2a1fd006e486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 035/149] po: update fr.po (from translationproject.org) --- po/fr.po | 977 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 503 insertions(+), 474 deletions(-) diff --git a/po/fr.po b/po/fr.po index 403d213c..4b547554 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,10 +7,10 @@ # Frédéric Marchal , 2020. msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-19 11:00+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-02 16:28+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \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:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "Le fanion différé demandé n'est pas supporté." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, 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:1547 msgid "Unknown dm target type." msgstr "Type de cible dm inconnu." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 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:1686 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:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Discard/TRIM n'est pas supporté." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 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:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Échec lors de l'interrogation du segment dm-%s." @@ -179,7 +180,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Le périphérique %s n'est pas activé." @@ -202,7 +203,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Taille de secteur de chiffrement non supportée." @@ -250,7 +251,7 @@ msgstr "ATTENTION: La taille des métadonnées LUKS2 est devenue % octet msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "ATTENTION: La taille de la zone des emplacements de clés LUKS2 est devenue % octets.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -413,8 +414,8 @@ msgstr "Le périphérique %s ne supporte pas la remise en service." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Ceci n'est pas la clé du volume." @@ -431,7 +432,7 @@ msgstr "Nouvel emplacement de clé impossible à échanger." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "L'emplacement de clé %d n'est pas actif." @@ -444,7 +445,7 @@ msgstr "L'en-tête du périphérique recouvre la zone de données." 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/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Impossible d'obtenir le verrou de re-chiffrement." @@ -453,106 +454,106 @@ msgstr "Impossible d'obtenir le verrou de re-chiffrement." 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:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Le périphérique %s existe déjà." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 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:4410 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:4417 msgid "Root hash signature required." msgstr "Signature de hachage racine requise." -#: lib/setup.c:4421 +#: lib/setup.c:4426 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, 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:4521 #, c-format msgid "Invalid device %s." msgstr "Le périphérique %s n'est pas valide." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Le tampon de la clé du volume est trop petit." -#: lib/setup.c:4640 +#: lib/setup.c:4645 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:4662 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:4664 #, 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:4870 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:5195 #, 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:5480 #, 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:5777 #, 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:5850 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:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 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" @@ -612,40 +613,45 @@ msgstr "Le périphérique %s n'existe pas ou l'accès y est interdit." 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:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Le périphérique %s est trop petit. Il a besoin d'au moins % octets." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "Le périphérique %s a une taille nulle." @@ -757,7 +763,7 @@ msgstr "La spécification du chiffrement devrait être au format [chiffrement]-[ #: 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Impossible d'écrire sur le périphérique %s. Permission refusée." @@ -780,7 +786,7 @@ msgstr "Erreur E/S pendant le chiffrement de l'emplacement de clé." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -803,42 +809,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Impossible de lire le fichier de sauvegarde d'en-tête %s." @@ -860,7 +866,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -913,7 +919,7 @@ msgstr "Échec de la réparation." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "Aucun problème connu détecté pour l'en-tête LUKS." @@ -932,8 +938,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Mauvais format fourni pour le UUID LUKS." @@ -1002,11 +1008,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Vérifiez que le module du noyau algif_skcipher est chargé." @@ -1019,16 +1025,16 @@ 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." @@ -1051,73 +1057,73 @@ msgstr "Chaîne texte (« %s ») inattendue rencontrée en analysant la Clé M 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:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Impossible de lire la signature BITLK depuis %s." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "La version 1 de BITLK n'est actuellement pas supportée." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 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:502 +#: 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:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Taille de secteur % non supportée." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, 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:542 +#: lib/bitlk/bitlk.c:548 #, 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:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Type de chiffrement inconnu ou non supporté." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, 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:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Cette opération n'est pas supportée." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Mauvaise taille de clé." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Taille inattendue pour les données de la clé." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 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:986 +#: lib/bitlk/bitlk.c:994 #, 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:1068 +#: lib/bitlk/bitlk.c:1076 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:1204 +#: lib/bitlk/bitlk.c:1212 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:1208 +#: lib/bitlk/bitlk.c:1216 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." @@ -1268,8 +1274,8 @@ msgstr "Le noyau ne supporte pas les associations de type dm-integrity." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, 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." @@ -1295,40 +1301,40 @@ msgstr "Le décalage de données demandé est trop petit." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "ATTENTION: la zone des emplacements de clés (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1338,7 +1344,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1348,50 +1354,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 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:2165 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:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 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:2349 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:2357 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:2359 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." @@ -1429,7 +1435,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." @@ -1679,69 +1685,69 @@ msgstr "Aucun emplacement de jeton libre" 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:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 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:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Opération interrompue.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "L'option --key-file est requise." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Entrez le PIN VeraCrypt : " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Valeur PIN invalide : erreur d'analyse" -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Valeur PIN invalide: 0" -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Valeur PIN invalide: hors des limites." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 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:549 #, 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:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1751,68 +1757,68 @@ 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:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Test de performance interrompu." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s N/A\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s N/A\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 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:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algorithme | Clé | Chiffrement | Déchiffrement\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algorithme | Clé | Chiffrement | Déchiffrement\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "N/D" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1820,19 +1826,19 @@ 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:1101 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:1110 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:1153 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:1172 src/integritysetup.c:146 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 +1846,104 @@ 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:1194 src/integritysetup.c:168 #, 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:1243 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:1248 src/cryptsetup.c:1308 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:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 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:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Impossible de définir les paramètres pbkdf." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 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:1462 src/cryptsetup.c:1773 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Entrez toute phrase secrète restante : " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 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:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Entrez une phrase secrète existante : " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 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:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Entrez la nouvelle phrase secrète : " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 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:1963 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:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1947,12 +1953,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:2078 #, 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:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1960,30 +1966,30 @@ 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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "L'option --header-backup-file est requise." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, 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:2281 #, 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:2323 #, 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:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1992,95 +1998,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:2355 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:2392 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:2410 #, 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:2415 #, 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:2421 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:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Le jeton %d est invalide." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Le jeton %d est utilisé." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "Le jeton %d n'est pas utilisé." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Impossible d'importer le jeton depuis le fichier." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "L'opération de jeton %s est invalide." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, 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:2686 #, 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:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2093,233 +2099,233 @@ 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:2768 msgid "Invalid LUKS device type." msgstr "Type de périphérique LUKS invalide." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Ajustement de la valeur de --reduce-device-size à deux fois --offset % (secteurs).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 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:2813 #, 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:2828 #, 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:2830 src/cryptsetup.c:2837 #, 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:2901 #, 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:3065 src/cryptsetup.c:3071 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:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, 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:3108 #, 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:3283 msgid "Command requires device as argument." msgstr "La commande exige un périphérique comme argument." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 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:3339 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:3366 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "ouvrir le périphérique comme " -#: 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "fermeture du périphérique (supprime le « mapping »)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "redimensionner le périphérique actif" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "afficher le statut du périphérique" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher ]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 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:3372 msgid "reencrypt LUKS2 device" msgstr "rechiffrer le périphérique LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 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:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "convertir LUKS depuis/vers le format LUKS2" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "formater un périphérique LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 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:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "efface de façon sécurisée la clé avec le numéro du périphérique LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "afficher l'UUID du périphérique LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "teste si a un en-tête de partition LUKS" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "affiche les informations LUKS de la partition" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "affiche les informations du périphérique TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "affiche les informations du périphérique BITLK" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "Remettre en service le périphérique LUKS suspendu" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 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:3390 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:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Manipuler les jetons LUKS2" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2327,7 +2333,7 @@ msgstr "" "\n" " est l'une de :\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2339,7 +2345,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:3419 #, c-format msgid "" "\n" @@ -2354,7 +2360,7 @@ msgstr "" " est le numéro de l'emplacement de clé LUKS à modifier\n" " est un fichier optionnel contenant la nouvelle clé pour l'action luksAddKey\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2363,7 +2369,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:3431 #, c-format msgid "" "\n" @@ -2380,7 +2386,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:3442 #, c-format msgid "" "\n" @@ -2395,443 +2401,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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 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.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 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.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Afficher la version du paquet" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Options d'aide :" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Afficher les messages de débogage" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Lire la clef depuis un fichier" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 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:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITS" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "octets" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 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:3519 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:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SECTEURS" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 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:3525 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:3526 msgid "Create a readonly mapping" msgstr "Crée une association en lecture seule" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Ne pas demander confirmation" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "s" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Utiliser une limite de secteurs pour aligner les données – pour luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 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:3535 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:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "UUID du périphérique à utiliser" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 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:3539 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:3540 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:3541 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:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Utiliser l'en-tête TCRYPT de secours (secondaire)" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Recherche aussi des périphériques compatibles avec VeraCrypt" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 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:3545 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:3546 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:3547 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:3548 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:3549 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:3550 +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:3551 +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:3552 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:3553 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:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ms" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilooctets" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Coût parallèle PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "threads" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 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:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Priorité de l'emplacement de clé: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 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:3561 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:3562 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:3563 src/integritysetup.c:573 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:3564 src/integritysetup.c:547 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:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Utiliser le rembourrage historique inefficace (vieux noyaux)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 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:3567 msgid "Token number (default: any)" msgstr "Numéro de jeton (défaut: n'importe lequel)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Description de clé" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Taille du secteur de chiffrement (défaut: 512 octets)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 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:3571 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:3572 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:3573 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:3574 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:3575 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:3576 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:3577 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:3578 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:3579 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:3580 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:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Chiffrer le périphérique LUKS2 (chiffrement sur place)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Déchiffrer le périphérique LUKS2 (supprime le chiffrement)" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 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:3584 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:3585 src/cryptsetup_reencrypt.c:1635 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:3586 msgid "Maximal reencryption hotzone size." msgstr "Taille maximale de la zone chaude de rechiffrement." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 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:3588 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:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[OPTION...] " -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Il manque l'argument ." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Action inconnue." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 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:3740 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:3745 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:3750 src/integritysetup.c:654 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:3755 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:3760 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:3765 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:3775 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,255 +2853,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:3781 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:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Emplacement de clé non valide." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Nombre négatif non autorisé pour l'option." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Spécification de taille de métadonnées LUKS2 invalide." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 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:3860 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:3866 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:3873 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:3879 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:3884 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:3889 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:3895 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:3899 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:3907 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:3911 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:3918 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:3923 src/cryptsetup.c:3961 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:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 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:3939 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:3951 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:3956 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:3966 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:3971 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:3982 msgid "Cannot disable metadata locking." msgstr "Impossible de désactiver le verrouillage des métadonnées." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 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.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "La taille de périphérique spécifiée est invalide." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 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:4006 src/cryptsetup_reencrypt.c:1733 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:4011 msgid "Invalid data size specification." msgstr "La taille des données spécifiée est invalide." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Débordement de la taille de réduction." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "Le déchiffrement LUKS2 requiert l'option --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 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:4028 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:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Les options --device-size et --size ne peuvent pas être combinées." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Les options --keyslot-cipher et --keyslot-key-size doivent être utilisées ensembles." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Chaîne d'aléa spécifiée invalide." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 msgid "Invalid root hash string specified." msgstr "Chaîne de hachage racine invalide." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Fichier de signature %s invalide." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Impossible de lire le fichier de signature %s." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "formater le périphérique" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " " -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "vérifier le périphérique" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " " -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "afficher le statut du périphérique actif" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "afficher les informations sur le disque" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3102,7 +3120,7 @@ msgstr "" " est le périphérique contenant les données de vérification\n" " hachage du nœud racine sur \n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3113,102 +3131,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "Ne pas utiliser le superbloc de verity" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 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:472 msgid "number" msgstr "nombre" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 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:474 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:475 msgid "FEC parity bytes" msgstr "Octets de parité FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 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:476 msgid "blocks" msgstr "blocs" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "chemin" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 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:479 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:480 msgid "Hash algorithm" msgstr "Algorithme de hachage" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "chaîne" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Aléa" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "chaîne hexa" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Chemin du fichier de signature du hachage racine" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 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:485 +msgid "Panic kernel if corruption is detected" +msgstr "Faire paniquer le noyau si une corruption est détectée" + +#: src/veritysetup.c:486 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:487 msgid "Do not verify zeroed blocks" msgstr "Ne pas vérifier les blocs mis à zéro" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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:588 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:593 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:598 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/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3870,6 +3896,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Erreur lors de l'écriture du fichier JSON." +#~ 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." From 154c3441159ad1e260149da0dc1378847263b7b5 Mon Sep 17 00:00:00 2001 From: Hiroshi Takekawa Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 036/149] po: update ja.po (from translationproject.org) --- po/ja.po | 974 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 500 insertions(+), 474 deletions(-) diff --git a/po/ja.po b/po/ja.po index 494c686b..2c1c0523 100644 --- a/po/ja.po +++ b/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-15 21:33+0900\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-01 18:35+0900\n" "Last-Translator: Hiroshi Takekawa \n" "Language-Team: Japanese \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:405 msgid "Cannot initialize device-mapper, running as non-root user." msgstr "device-mapper を初期化できません、non-root で実行します。" -#: lib/libdevmapper.c:402 +#: lib/libdevmapper.c:408 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "device-mapper を初期化できません。dm_mod モジュールはロードされてますか?" -#: lib/libdevmapper.c:1131 +#: lib/libdevmapper.c:1149 msgid "Requested deferred flag is not supported." msgstr "指定された延期フラグはサポートされていません。" -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "デバイス %s の DM-UUID は短縮されています。" -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "不明な dm target タイプです。" -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 msgid "Requested dm-crypt performance options are not supported." msgstr "指定された dm-crypt パフォーマンスオプションはサポートされていません。" -#: lib/libdevmapper.c:1630 +#: lib/libdevmapper.c:1672 lib/libdevmapper.c:1676 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "指定された dm-verity のデータ破壊時の対応についてのオプションはサポートされていません。" -#: lib/libdevmapper.c:1634 +#: lib/libdevmapper.c:1680 msgid "Requested dm-verity FEC options are not supported." msgstr "指定された dm-verity の誤り訂正(FEC)オプションはサポートされていません。" -#: lib/libdevmapper.c:1638 +#: lib/libdevmapper.c:1684 msgid "Requested data integrity options are not supported." msgstr "指定されたデータの無改ざん確認のオプションはサポートされていません。" -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "指定された sector_size オプションはサポートされていません。" -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Discard/TRIM はサポートしていません。" -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "要求された dm-integrity のビットマップモードはサポートされていません。" -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "dm-%s のクエリーに失敗しました。" @@ -176,7 +177,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "デバイス %s はアクティブではありません。" @@ -199,7 +200,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "サポートされていない暗号化セクタサイズです。" @@ -247,7 +248,7 @@ msgstr "警告: LUKS2 メタデータサイズが % バイトに変更 msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "警告: LUKS2 キースロット領域サイズが % バイトに変更されました。\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -410,8 +411,8 @@ msgstr "デバイス %s は再開をサポートしていません。" 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "ボリュームキーがボリュームに合いません。" @@ -428,7 +429,7 @@ msgstr "新しいキースロットを交換できませんでした。" msgid "Key slot %d is invalid." msgstr "キースロット %d は不正です。" -#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 +#: lib/setup.c:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "キースロット %d は非アクティブです。" @@ -441,7 +442,7 @@ msgstr "デバイスヘッダがデータ領域に重なっています。" msgid "Reencryption in-progress. Cannot activate device." msgstr "既に再暗号化中です。デバイスをアクティベートできません。" -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "再暗号化ロックを取得できません。" @@ -450,106 +451,106 @@ msgstr "再暗号化ロックを取得できません。" msgid "LUKS2 reencryption recovery failed." msgstr "LUKS2 の再暗号化は既に初期化されました。" -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "デバイス %s は既に存在します。" -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "デバイス %s を使えません。名前が不正か使用中です。" + +#: lib/setup.c:4301 msgid "Incorrect volume key specified for plain device." msgstr "正しくないボリュームキーがプレーンデバイスに指定されました。" -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "正しくないルートハッシュが verity デバイスに指定されました。" -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "ルートハッシュ署名が必要です。" -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." msgstr "署名をカーネルに渡すのに必要なカーネルキーリングをカーネルがサポートしていません。" -#: lib/setup.c:4438 lib/setup.c:5915 +#: lib/setup.c:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "デバイス %s は使用中です。" -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "デバイス %s は不正です。" -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "ボリュームキーのバッファが小さすぎます。" -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "プレーンデバイス向けのボリュームキーが取得できません。" -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "verity デバイスのルートハッシュが読み出せません。" -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, c-format msgid "This operation is not supported for %s crypt device." msgstr "この操作は %s 暗号化デバイスではサポートされていません。" -#: lib/setup.c:4865 +#: lib/setup.c:4870 msgid "Dump operation is not supported for this device type." msgstr "このデバイスタイプはダンプ操作をサポートしていません。" -#: lib/setup.c:5190 +#: lib/setup.c:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "データオフセットが %u バイトの倍数である必要があります。" -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, c-format msgid "Cannot convert device %s which is still in use." msgstr "使用中のデバイス %s を変換できません。" -#: lib/setup.c:5772 +#: lib/setup.c:5777 #, c-format msgid "Failed to assign keyslot %u as the new volume key." msgstr "新しいボリュームキー向けのキースロット %u を確保できません。" -#: lib/setup.c:5845 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "デフォルト LUKS2 キースロットパラメータを初期化できません。" -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "ダイジェストするためのキースロット %d が確保できません。" -#: lib/setup.c:5982 +#: lib/setup.c:5987 msgid "Kernel keyring is not supported by the kernel." msgstr "カーネルがカーネルキーリングをサポートしていません。" -#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 +#: lib/setup.c:5997 lib/luks2/luks2_reencrypt.c:2952 #, c-format msgid "Failed to read passphrase from keyring (error %d)." msgstr "キーリングからパスフレーズが読み出せません (エラー %d)。" -#: lib/setup.c:6016 +#: lib/setup.c:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "グローバル memory-hard アクセス直列化ロックが取れません。" @@ -609,40 +610,45 @@ msgstr "デバイス %s は存在しないかアクセスが拒否されまし msgid "Device %s is not compatible." msgstr "デバイス %s は互換性がありません。" -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, c-format +msgid "Ignoring bogus optimal-io size for data device (%u bytes)." +msgstr "データデバイスのおかしな(bogus) optimal-io サイズ (%u バイト) は無視します。" + +#: lib/utils_device.c:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "デバイス %s が小さすぎます。少なくとも % バイト必要です。" -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, c-format msgid "Cannot use device %s, permission denied." msgstr "デバイス %s が使えません、拒否されました。" -#: lib/utils_device.c:730 +#: lib/utils_device.c:736 #, c-format msgid "Cannot get info about device %s." msgstr "デバイス %s についての情報が取得できません。" -#: lib/utils_device.c:753 +#: lib/utils_device.c:759 msgid "Cannot use a loopback device, running as non-root user." msgstr "ループバックデバイスが使えません、非 root ユーザで実行していませんか。" -#: lib/utils_device.c:763 +#: lib/utils_device.c:769 msgid "Attaching loopback device failed (loop device with autoclear flag is required)." msgstr "ループデバイスのアタッチできません (autoclear 付きのループデバイスが必要です)。" -#: lib/utils_device.c:809 +#: lib/utils_device.c:815 #, c-format msgid "Requested offset is beyond real size of device %s." msgstr "指定されたオフセットはデバイス %s の実際のサイズを超えています。" -#: lib/utils_device.c:817 +#: lib/utils_device.c:823 #, c-format msgid "Device %s has zero size." msgstr "デバイス %s のサイズが 0 です。" @@ -753,7 +759,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "デバイス %s に書き込めません。パーミッションがありません。" @@ -776,7 +782,7 @@ msgstr "キースロットを暗号化中にI/Oエラーが発生しました。 #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -799,42 +805,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "ヘッダバックアップファイル %s を読めません。" @@ -856,7 +862,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -909,7 +915,7 @@ msgstr "修復に失敗しました。" msgid "Requested LUKS hash %s is not supported." msgstr "要求された LUKS ハッシュ %s はサポートしていません。" -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "LUKS ヘッダに既知の不具合は検出されませんでした。" @@ -928,8 +934,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "LUKS UUID の形式が間違っています。" @@ -998,11 +1004,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "algif_skcipher カーネルモジュールをロードしてください。" @@ -1015,16 +1021,16 @@ 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 ヘッダの読み込みなしではサポートしません。" @@ -1047,73 +1053,73 @@ msgstr "ボリュームマスターキーを解釈中に予期しない文字列 msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "ボリュームマスターキーを解釈中に予期しないメタデータエントリー値 '%u' が見つかりました。" -#: lib/bitlk/bitlk.c:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "%s から BITLK シグネチャを読み込めませんでした。" -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK version 1 はサポートされていません。" -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "BITLK デバイスのブートシグネチャが不正また不明です。" -#: lib/bitlk/bitlk.c:502 +#: lib/bitlk/bitlk.c:503 msgid "Invalid or unknown signature for BITLK device." msgstr "BITLK デバイスのシグネチャが不正また不明です。" -#: lib/bitlk/bitlk.c:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "サポートされていないセクタサイズ % です。" -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "%s から BITLK ヘッダを読み出すのに失敗しました。" -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "%s から BITLK FVE メタデータを読み込めませんでした。" -#: lib/bitlk/bitlk.c:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "不明かサポートされていない暗号化タイプです。" -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "%s から BITLK メタデータエントリを読み込めませんでした。" -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "この操作はサポートされていません。" -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "不正なキーサイズ。" +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "予期しないキーデータサイズです。" -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "この BITLK デバイスはサポートされてない状態にあるためアクティベートできません。" -#: lib/bitlk/bitlk.c:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "タイプ '%s' の BITLK デバイスはアクティベートできません。" -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "部分的に復号された BITLK デバイスのアクティベーションはサポートされていません。" -#: lib/bitlk/bitlk.c:1204 +#: lib/bitlk/bitlk.c:1212 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "カーネルの dm-crypt が BITLK IV をサポートしていないためデバイスをアクティベートできません。" -#: lib/bitlk/bitlk.c:1208 +#: lib/bitlk/bitlk.c:1216 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "カーネルの dm-crypt が BITLK Elephant diffuser をサポートしていないためデバイスをアクティベートできません。" @@ -1264,8 +1270,8 @@ msgstr "カーネルが dm-integrity マッピングをサポートしていま 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "デバイス %s の書き込みのためのロックを取得できませんでした。" @@ -1291,40 +1297,40 @@ msgstr "要求されたデータオフセットが小さすぎます。" msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "警告: キースロット領域 (% バイト) がとても小さいため、利用可能な 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 msgid "Data offset differ on device and backup, restore failed." msgstr "データオフセットがデバイスとバックアップと異なるため修復できません。" -#: lib/luks2/luks2_json_metadata.c:1214 +#: lib/luks2/luks2_json_metadata.c:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1334,7 +1340,7 @@ msgstr "" "警告: 不明な LUKS2 への要求がリアルデバイスヘッダにあります!\n" "ヘッダをバックアップで置き換えるとデータを破壊する恐れがあります!" -#: lib/luks2/luks2_json_metadata.c:1227 +#: lib/luks2/luks2_json_metadata.c:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1344,50 +1350,50 @@ msgstr "" "警告: オフラインの再暗号化が終了していません!\n" "ヘッダを置き換えるとデータを破壊しかねません。" -#: lib/luks2/luks2_json_metadata.c:1323 +#: lib/luks2/luks2_json_metadata.c:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "dm-linear セグメントの設定に失敗しました。" -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "サポートしていないデバイス整合性設定です。" -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 msgid "Failed to read LUKS2 requirements." msgstr "LUKS2 の必要条件を読み込めませんでした。" -#: lib/luks2/luks2_json_metadata.c:2339 +#: lib/luks2/luks2_json_metadata.c:2349 msgid "Unmet LUKS2 requirements detected." msgstr "満たせない LUKS2 の必要条件があります。" -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "Operation incompatible with device marked for legacy reencryption. Aborting." msgstr "操作がレガシー再暗号化とマークされたデバイスと互換性がありません。中止します。" -#: lib/luks2/luks2_json_metadata.c:2349 +#: lib/luks2/luks2_json_metadata.c:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "操作が LUKS2 再暗号化とマークされたデバイスと互換性がありません。中止します。" @@ -1425,7 +1431,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 "キースロット領域を動かせません。" @@ -1674,69 +1680,69 @@ msgstr "空きトークンスロットがありません。" msgid "Failed to create builtin token %s." msgstr "ビルトイントークン %s が作成できません。" -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 msgid "Can't do passphrase verification on non-tty inputs." msgstr "tty 入力以外ではパスフレーズ認証できません。" -#: src/cryptsetup.c:221 +#: src/cryptsetup.c:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "未知の暗号スペックです。" -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "中止されました。\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "オプション --key-file が必要です。" -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "VeraCrypt PIM を入力してください: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "不正な PIM: 解釈できません。" -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "不正 PIM の値で 0 です。" -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "不正な PIM の値: 範囲外です。" -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "このパスフレーズではデバイスヘッダが検出されませんでした。" -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "デバイス %s は有効な BITLK デバイスではありません。" -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1746,68 +1752,68 @@ msgstr "" "暗号化されたパーティションにパスフレーズなしでアクセス可能にます。\n" "このダンプは暗号化された安全な所に保存してください。" -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "デバイス %s はまたアクティブで後から削除される予定になっています。.\n" -#: src/cryptsetup.c:701 +#: src/cryptsetup.c:709 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:850 msgid "Benchmark interrupted." msgstr "ベンチマークが中止されました。" -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s 計測値なし\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s 計測値なし\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "ベンチマークの結果は信頼できません。" -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algorithm | キー | 暗号化 | 復号化\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algorithm | キー | 暗号化 | 復号化\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "計測値なし" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1815,19 +1821,19 @@ msgstr "" "デバイスは再暗号化のリカバリを必要としていなそうです。\n" "本当にやりますか?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "本当に LUKS2 再暗号化リカバリを行いますか?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "再暗号化のリカバリのためのパスフレーズを入力してください: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 msgid "Really try to repair LUKS device header?" msgstr "本当に LUKS デバイスヘッダの復元を試みていいですか?" -#: src/cryptsetup.c:1160 src/integritysetup.c:146 +#: src/cryptsetup.c:1172 src/integritysetup.c:146 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 +1841,104 @@ msgstr "" "整合性チェックサムの初期化のためにデバイスのデータを消去しています。\n" "CTRL+c で中止できます (初期化されなかったデバイスのチェックサムは正しくなくなります)。\n" -#: src/cryptsetup.c:1182 src/integritysetup.c:168 +#: src/cryptsetup.c:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "一時的デバイス %s を非アクティブにできません。" -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 msgid "Integrity option can be used only for LUKS2 format." msgstr "整合性オプションは LUKS2 形式でしか使えません。" -#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 +#: src/cryptsetup.c:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "サポートされていない LUKS2 メタデータのサイズオプションです。" -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, c-format msgid "Cannot create header file %s." msgstr "ヘッダファイル %s を作成できません。" -#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204 +#: src/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "サポートしている整合性確認方式が検出されませんでした。" -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "pbkdf パラメータを設定できません。" -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "分離された LUKS ヘッダでのみ少ないデータオフセットが使えます。" -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 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:1500 msgid "Device activated but cannot make flags persistent." msgstr "デバイスはアクティベートされましたが、フラグを恒常的なものにできません。" -#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1651 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "キースロット %d は削除対象として選択されました。" -#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 +#: src/cryptsetup.c:1593 src/cryptsetup.c:1654 msgid "This is the last keyslot. Device will become unusable after purging this key." msgstr "これは最後のキースロットです。このキーがなくなるとデバイスは使用不能になります。" -#: src/cryptsetup.c:1582 +#: src/cryptsetup.c:1594 msgid "Enter any remaining passphrase: " msgstr "残っているパスフレーズを入力してください: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "操作は中止されました。キースロットは消去されていません。\n" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 msgid "Enter passphrase to be deleted: " msgstr "削除するキーのパスフレーズを入力してください: " -#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 +#: src/cryptsetup.c:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 msgid "Enter new passphrase for key slot: " msgstr "キースロットの新しいパスフレーズを入力してください: " -#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "有効なパスフレーズをどれか入力してください: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "変更するキーのパスフレーズを入力してください: " -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "新しいキーのパスフレーズを入力してください: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "変換されるキースロットのパスフレーズを入力してください: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "isLuks は一つのデバイス引数しかサポートしていません。" -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1942,12 +1948,12 @@ msgstr "" "暗号化されたパーティションにパスフレーズなしでアクセス可能になります。\n" "このダンプは暗号化された安全な所に保存してください。" -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "キースロット %d は unbound キーを含んでいません。" -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1955,30 +1961,30 @@ msgstr "" "unbound キーを使ったヘッダダンプは取り扱いに注意すべき情報です。\n" "このダンプは暗号化された安全な所に保存してください。" -#: src/cryptsetup.c:2207 src/cryptsetup.c:2228 +#: src/cryptsetup.c:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "オプション --header-backup-file が必要です。" -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "%s は cryptsetup で管理されているデバイスではありません。" -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, c-format msgid "Refresh is not supported for device type %s" msgstr "リフレッシュはデバイスタイプ %s ではサポートされていません。" -#: src/cryptsetup.c:2311 +#: src/cryptsetup.c:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "%s は認識できないメタデータデータタイプです。" -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 msgid "Command requires device and mapped name as arguments." msgstr "コマンドはデバイスとマップされた名前を引数として必要とします。" -#: src/cryptsetup.c:2336 +#: src/cryptsetup.c:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1987,95 +1993,95 @@ msgstr "" "この処理はデバイス %s の全てのキースロットを消去します。\n" "デバイスのデータは使用できなくなります。" -#: src/cryptsetup.c:2343 +#: src/cryptsetup.c:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "処理は中止されました。キースロットは消去されません。\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "不正な LUKS タイプです。luks1 と luks2 しかサポートしていません。" -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2410 #, c-format msgid "Device is already %s type." msgstr "デバイスは既にタイプ %s です。" -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "この処理は %s から %s フォーマットに変換します。\n" -#: src/cryptsetup.c:2409 +#: src/cryptsetup.c:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "処理は中止されました。デバイスは変換されませんでした。\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "トークン %d は不正です。" -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "トークン %d は使用中です。" -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, c-format msgid "Failed to add luks2-keyring token %d." msgstr "luks2-キーリングトークン %d を追加できませんでした。" -#: src/cryptsetup.c:2502 src/cryptsetup.c:2564 +#: src/cryptsetup.c:2514 src/cryptsetup.c:2576 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "トークン %d をキースロット %d に割りあてられませんでした。" -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:2531 #, c-format msgid "Token %d is not in use." msgstr "トークン %d は使われていません。" -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "ファイルからトークンをインポートできません。" -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, c-format msgid "Failed to get token %d for export." msgstr "トークン %d をエクスポートのために取得できませんでした。" -#: src/cryptsetup.c:2594 +#: src/cryptsetup.c:2606 msgid "--key-description parameter is mandatory for token add action." msgstr "--key-description はトークン追加には必須です。" -#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 +#: src/cryptsetup.c:2612 src/cryptsetup.c:2620 msgid "Action requires specific token. Use --token-id parameter." msgstr "トークンを必要としています。--token-id を使用してください。" -#: src/cryptsetup.c:2613 +#: src/cryptsetup.c:2625 #, c-format msgid "Invalid token operation %s." msgstr "%s は不正なトークン処理です。" -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "デバイス %s は有効なブロックデバイスではありません。\n" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "デバイス %s のホルダ(holders)を自動検出できません。" -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2088,233 +2094,233 @@ msgstr "" "アクティベートされていたらデータが破壊されるかもしれません。\n" "再暗号化をオンラインで行う場合は --active-name を代わりに使ってください。\n" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "LUKS デバイスタイプが不正です。" -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "--reduce-device-size の値を --offset % (セクタ) の倍にします。\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "暗号化は LUKS2 形式でしか使えません。" -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "テンポラリヘッダファイル %s は既に存在しているので、中止します。" -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "テンポラリヘッダファイル %s を作成できません。" -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "再暗号化に必要な空きキースロットがありません。" -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "キースロット %d のパスフレーズを入力してください: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "キースロット %u のパスフレーズを入力してください: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "コマンドはデバイスを引数として必要とします。" -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "整合性プロファイルつきのデバイスの再暗号化はサポートされていません。" -#: src/cryptsetup.c:3315 +#: src/cryptsetup.c:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "LUKS2 再暗号化が既に初期化済なので操作を中止します。" -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "LUKS2 デバイスは再暗号化中ではありません。" -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr "<デバイス> [--type <タイプ>] [<名前>]" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "<名前>" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "デバイスをクローズします (マッピングを削除します)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "アクティブデバイスをリサイズ" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "デバイスステータスを表示" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher <暗号>]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "<デバイス>" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "on-disk メタデータを修復しようとしています" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "LUKS2 デバイスを再暗号化" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "全てのキースロットを消去します (暗号鍵も削除します)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "LUKS2 から LUKS もしくは LUKS から LUKS2 形式に変換します" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 msgid "set permanent configuration options for LUKS2" msgstr "LUKS2 の permanent configuration オプションを設定します" -#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 +#: src/cryptsetup.c:3376 src/cryptsetup.c:3377 msgid " []" msgstr "<デバイス> [<新しいキーファイル>]" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "LUKS デバイスをフォーマットします" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 msgid "add key to LUKS device" msgstr "LUKS デバイスにキーを追加します" -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr "<デバイス> [<キーファイル>]" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 msgid "removes supplied key or key file from LUKS device" msgstr "与えられたキーかキーファイルを LUKS デバイスから削除します。" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3379 msgid "changes supplied key or key file of LUKS device" msgstr "与えられた LUKS デバイスのキーかキーファイルを変更します" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3380 msgid "converts a key to new pbkdf parameters" msgstr "キーを新しい pbkdf パラメータに変換します" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr "<デバイス> <キースロット>" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "<キースロット>のキーを LUKS デバイスから削除します" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "LUKS デバイスの UUID を表示" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "<デバイス> の LUKS パーティションヘッダをテストします" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "LUKS パーティション情報をダンプします" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "TCRYPT デバイス情報をダンプします" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "BITLK デバイス情報をダンプします" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "LUKS デバイスを停止してキーを削除します (全てのI/Oは停止します)" -#: src/cryptsetup.c:3368 +#: src/cryptsetup.c:3388 msgid "Resume suspended LUKS device" msgstr "停止していた LUKS デバイスを再開します" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "LUKS デバイスヘッダとキースロットをバックアップします" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "LUKS デバイスヘッダとキースロットをリストアします" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr " <デバイス>" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "LUKS2 トークンを操作します" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2322,7 +2328,7 @@ msgstr "" "\n" " は以下のうちの一つです:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2334,7 +2340,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:3419 #, c-format msgid "" "\n" @@ -2349,7 +2355,7 @@ msgstr "" "<キースロット> は変更する LUKS キースロット番号\n" "<キーファイル> は luskAddKey でオプションで与えられる新しいキーのキーファイル\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2358,7 +2364,7 @@ msgstr "" "\n" "デフォルトのコンパイル時に決められたメタデータ形式は %s です(luksFormat で使われます)。\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2375,7 +2381,7 @@ msgstr "" "デフォルト LUKS2 向け PBKDF: %s\n" "\t繰り返す時間: %d, 使うメモリ: %dkB, 並列スレッド: %d\n" -#: src/cryptsetup.c:3422 +#: src/cryptsetup.c:3442 #, c-format msgid "" "\n" @@ -2390,443 +2396,451 @@ msgstr "" "\tplain: %s, キー: %d ビット, パスワードハッシュ: %s\n" "\tLUKS: %s, キー: %d ビット, LUKS ヘッダハッシュ: %s, 乱数生成: %s\n" -#: src/cryptsetup.c:3431 +#: src/cryptsetup.c:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "このヘルプを表示します" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "コンパクトな使用法表示をします" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "パッケージのバージョンを表示" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "ヘルプオプション:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "より詳細なエラーメッセージを表示" -#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "デバッグメッセージを表示" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 msgid "Show debug messages including JSON metadata" msgstr "JSON メタデータを含むデバッグメッセージを表示" -#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "パスフレーズから暗号鍵を作るのに使われるハッシュ" -#: src/cryptsetup.c:3492 +#: src/cryptsetup.c:3512 msgid "Verifies the passphrase by asking for it twice" msgstr "パスフレーズは2回入力してもらって検証します" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "ファイルからキーを読む" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "ボリューム(マスター)キーをファイルから読む。" -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 msgid "Dump volume (master) key instead of keyslots info" msgstr "ボリューム(マスター)キーをキースロット情報の代わりにダンプします" -#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3516 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "暗号鍵のサイズ" -#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562 +#: src/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "ビット" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "バイト" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "キーファイルでスキップするバイト数" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 msgid "Limits the read from newly added keyfile" msgstr "新しく追加するキーファイルの読み込みの制限" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 msgid "Number of bytes to skip in newly added keyfile" msgstr "新しく追加するキーファイルでスキップするバイト数" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3521 msgid "Slot number for new key (default is first free)" msgstr "新しいキーのスロット番号 (デフォルトは最初の空き)" -#: src/cryptsetup.c:3502 +#: src/cryptsetup.c:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "セクタ" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "指定されたデバイスサイズ分だけ使います (デバイスの残りは無視します). 危険!" -#: src/cryptsetup.c:3504 +#: src/cryptsetup.c:3524 msgid "The start offset in the backend device" msgstr "バックエンドデバイスの開始オフセット" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "最初の暗号化データのセクタを何セクタスキップするか" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3526 msgid "Create a readonly mapping" msgstr "読み込み専用のマッピングを作成" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "確認をしません" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "パスフレーズの対話的入力のタイムアウト (秒単位)" -#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "秒" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "進捗線の更新(秒単位)" -#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "パスフレーズの再試行の回数" -#: src/cryptsetup.c:3511 +#: src/cryptsetup.c:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "luksFormat 向けにペイロードを セクタ境界に合わせます" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 msgid "File with LUKS header and keyslots backup" msgstr "LUKS ヘッダとキースロットバックアップのファイル" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "ボリュームキーの生成に /dev/random を使います" -#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "ボリュームキーの生成に /dev/urandom (擬似乱数)を使います" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 msgid "Share device with another non-overlapping crypt segment" msgstr "オーバーラップしない暗号セグメントのあるデバイスと共有します" -#: src/cryptsetup.c:3516 src/veritysetup.c:477 +#: src/cryptsetup.c:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "使用するデバイスの UUID" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "デバイスに discards (TRIM) 処理を許可します" -#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "デバイスかファイルにある分離された LUKS ヘッダ" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "デバイスをアクティベートせず、パスフレーズだけ確認する" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "隠されたヘッダを使う (隠された TCRYPT デバイス)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "デバイスはシステム TCRYPT ドライブ (ブートローダの対応が必要)" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "バックアップ (セカンダリ) TCRYPT ヘッダを使います" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "VeraCrypt 互換デバイスも探します" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "VeraCrypt 互換デバイス向けの Personal Iteration Multiplier" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "VeraCrypt互換デバイス向けの Query Personal Iteration Multiplier" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "パスワードの質の確認を無効にする (もし有効なら)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 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:3549 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:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "dm-crypt の workqueue をバイパスし読み込み要求を同期処理する" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "dm-crypt の workqueue をバイパスし書き込み要求を同期処理する" + +#: src/cryptsetup.c:3552 msgid "Device removal is deferred until the last user closes it" msgstr "デバイスの削除はデバイス上のリソースを使う人がいなくなるまで遅延されます" -#: src/cryptsetup.c:3531 +#: src/cryptsetup.c:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "OOM Killer を回避するために PBKDF メモリのシリアライズにグローバルロックを使います" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "LUKS 向けの PBKDF の繰り返し時間 (ms単位)" -#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ミリ秒" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "PBKDF メモリコスト制限" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "キロバイト" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "PBKDF 並列コスト" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "スレッド" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "PBKDF 繰り返しコスト (強制する, ベンチマークしない)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "キースロット優先度: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "ディスク上のメタデータのロックをしない" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 msgid "Disable loading volume keys via kernel keyring" msgstr "ボリュームキーの読み込みをカーネルキーリング経由で行わない" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "データ改ざん検出アルゴリズム (LUKS2 のみ)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "データ改ざん検出が有効なデバイスのジャーナリングを禁止します" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "フォーマット後にデバイスのデータを消去しない" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "非効率的なレガシーパディングを使う (古いカーネル)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 msgid "Do not ask for passphrase if activation by token fails" msgstr "トークンによるアクティベーションが失敗したらパスフレーズを入力させません" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3567 msgid "Token number (default: any)" msgstr "トークンナンバー (デフォルト: 任意)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "キーデスクリプション" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "暗号化セクタサイズ (デフォルト: 512 バイト)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "セクタサイズ (512バイトとは限らない) のIVを使う" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "デバイスのアクティベーションフラグを持続的にします" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "LUKS2 デバイスのラベルを設定" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "LUKS2 デバイスにサブシステムレベルを設定します" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "unbound (データセグメントが割り当てられていない) LUKS2 キースロットを作成またはダンプ" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 msgid "Read or write the json from or to a file" msgstr "json をファイルに読み書きする" -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3576 msgid "LUKS2 header metadata area size" msgstr "LUKS2 ヘッダメタデータ領域サイズ" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "LUKS2 ヘッダキースロット領域サイズ" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "デバイスを新しいパラメータデリフレッシュ(再アクティベート)する" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "LUKS2 キースロット: 暗号鍵のサイズ" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "LUKS2 キースロット: キースロットの暗号化に使う暗号" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "LUKS2 デバイスを暗号化 (in-place で暗号化)" -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "LUKS2 デバイスを復号 (つまり暗号化をやめる)" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "LUKS2 再暗号化をメタデータだけ初期化。" -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "初期化済 LUKS2 再暗号化だけ再開。" -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "データデバイスサイズを減らす (データオフセットを移動する). 危険!" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "最大再暗号化ホットゾーンサイズ" -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "再暗号化ホットゾーン弾性(resilience)タイプe (checksum,journal,none)" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "再暗号化ホットゾーンチェックサムハッシュ" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[オプション...] <アクション> <アクション特有>" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "<アクション> がありません。" -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "未知のアクションです。" -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "--refresh と --test-passphrase は同時には使えません。" -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "--deferred は close でしか使えません。" -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 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:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "--allow-discards は open でしか使えません。" -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "--persistent は open でしか使えません。" -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 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:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "--persistent は --test-passphrase と一緒には使えません。" -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 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,255 +2848,259 @@ msgstr "" "--key-size は luksFormat か luksAddKey で --unbound をつけた場合か、\n" "open, benchmark の時しか使えません。キーファイルについて制限をつけたい場合は --keyfile-size=(バイト) を使ってください。" -#: src/cryptsetup.c:3759 +#: src/cryptsetup.c:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "--integrity は luksFormat (LUKS2) でしか使えません。" -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "キーサイズは 8bit の倍数でなければなりません" -#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "キースロットは不正です。" -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "オプションに負の数を与えられません。" -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 msgid "Only one --key-file argument is allowed." msgstr "--key-file は一つしか使えません。" -#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "--use-[u]random は一つしか使えません。" -#: src/cryptsetup.c:3813 +#: src/cryptsetup.c:3835 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "--use-[u]random は luksFormat にしか使えません。" -#: src/cryptsetup.c:3817 +#: src/cryptsetup.c:3839 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "--uuid は luksFormat か luksUUID でしか使えません。" -#: src/cryptsetup.c:3821 +#: src/cryptsetup.c:3843 msgid "Option --align-payload is allowed only for luksFormat." msgstr "--align-payload は luksFormat でしか使えません。" -#: src/cryptsetup.c:3825 +#: src/cryptsetup.c:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "不正なLUKS2 メタデータサイズです。" -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "不正な LUKS2 キースロットサイズです。" -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "--align-payload と --offset は一緒に使えません。" -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 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:3873 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:3879 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:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "--tcrypt-hidden は --allow-discards と一緒に使えません。" -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "--veracrypt は TCRYPT デバイスでしか使えません。" -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "--veracrypt-pim の引数が不正です。" -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "--veracrypt-pim は VeraCrypt 互換デバイスにしか使えません。" -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices." msgstr "--veracrypt-query-pim は VeraCrypt 互換デバイスにしか使えません。" -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "キースロットの指定が必要です。" -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "PBKDF の繰り返し回数の強制と繰り返し時間指定オプションは共存できません。" -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "このコマンドでセクタサイズオプションはサポートされていません。" -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "--unbound にはキーサイズが必要です。" -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "--unbound は luksAddKey か luksDump でしか使えません。" -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "--refresh は open でしか使えません。" -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "メタデータロックを禁止できません。" -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "再暗号化ホットゾーン最大サイズの指定が不正です。" -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "デバイスサイズの指定が不正です。" -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "デバイスを減らせる最大値は 1 GiB です。" -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "減らすサイズは 512 バイトセクタの倍数である必要があります。" -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "データサイズの指定が不正です。" -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "減らすサイズのオーバーフロー。" -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "LUKS2 復号には --header が必要です。" -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "デバイスサイズは 512 バイトセクタの倍数である必要があります。" -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "--reduce-device-size と --data-size は一緒に使えません。" -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "--device-size と --size は一緒に使えません。" -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "--keyslot-cipher と --keyslot-key-size は同時に使う必要があります。" + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "不正なソルト文字列が指定されました。" -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, c-format msgid "Cannot create hash image %s for writing." msgstr "ハッシュイメージ %s を書けるように作成できませんでした。" -#: src/veritysetup.c:107 +#: src/veritysetup.c:108 #, c-format msgid "Cannot create FEC image %s for writing." msgstr "FEC イメージ %s を書けるように作成できませんでした。" -#: src/veritysetup.c:179 +#: src/veritysetup.c:182 msgid "Invalid root hash string specified." msgstr "不正なルートハッシュ文字列が指定されました。" -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "署名ファイル %s が不正です。" -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "署名ファイル %s を読み込めませんでした。" -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr "<データデバイス> <ハッシュデバイス>" -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "デバイスをフォーマット" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr "<データデバイス> <ハッシュデバイス> <ルートハッシュ>" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "デバイスを検証" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr "<データデバイス> <名前> <ハッシュデバイス> <ルートハッシュ>" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "アクティブデバイスのステータスを表示" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "<ハッシュデバイス>" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "ディスク上の情報を表示" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3097,7 +3115,7 @@ msgstr "" "<ハッシュデバイス> は検証用データが入るデバイス\n" "<ルートハッシュ> は <ハッシュデバイス> のルートノードのハッシュ\n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3108,102 +3126,110 @@ msgstr "" "コンパイル時に決めた dm-verity のデフォルトパラメータ:\n" "\tハッシュ: %s, データブロック (バイト): %u, ハッシュブロック (バイト): %u, ソルトサイズ: %u, ハッシュフォーマット: %u\n" -#: src/veritysetup.c:466 +#: src/veritysetup.c:471 msgid "Do not use verity superblock" msgstr "verity スーパーブロックを使いません" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "フォーマットタイプ (1 - ノーマル, 0 - Chrome OS 形式)" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "数字" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "データデバイスのブロックサイズ" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "ハッシュデバイスのブロックサイズ" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "FEC パリティバイト" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "データファイルのブロック数" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "ブロック" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 msgid "Path to device with error correction data" msgstr "誤り訂正用データが格納されるデバイスのパス" -#: src/veritysetup.c:472 src/integritysetup.c:549 +#: src/veritysetup.c:477 src/integritysetup.c:549 msgid "path" msgstr "パス" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "ハッシュデバイスの開始オフセット" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "FEC デバイスの開始オフセット" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "ハッシュアルゴリズム" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "文字列" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "ソルト" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "16進数文字列" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "ルートハッシュ署名ファイルのパス" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "破損が検出されたらカーネルを再起動する" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "破損が検出されたらカーネルパニックさせる" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "破損はログするだけで再起動まではしない" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "0 埋めされたブロックは検証しない" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 msgid "Verify data block only the first time it is read" msgstr "最初に読む時一度だけデータブロックを検証する" -#: src/veritysetup.c:582 +#: src/veritysetup.c:588 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:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "--root-hash-signature は open でしか使えません。" -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together." msgstr "--ignore-corruption と --restart-on-corruption は同時に使えません。" +#: src/veritysetup.c:603 +msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together." +msgstr "--panic-on-corruption と --restart-on-corruption は同時に使えません。" + #: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." From 6f6b54a5fd3adad32da9bf5cc38b0ff4cd00c9fc Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 037/149] po: update pl.po (from translationproject.org) --- po/pl.po | 974 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 500 insertions(+), 474 deletions(-) diff --git a/po/pl.po b/po/pl.po index 3f0889e9..64ac1b41 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-15 19:02+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-01 18:30+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \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:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "Żądana flaga odroczona nie jest obsługiwana." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, 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:1547 msgid "Unknown dm target type." msgstr "Nieznany typ celu dm." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 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:1686 msgid "Requested sector_size option is not supported." msgstr "Żądana opcja sector_size nie jest obsługiwana." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Porzucenie/TRIM nie jest obsługiwane." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 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:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Nie udało się odpytać segmentu dm-%s." @@ -177,7 +178,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Urządzenie %s nie jest aktywne." @@ -200,7 +201,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Nieobsługiwany rozmiar sektora szyfrowania." @@ -248,7 +249,7 @@ msgstr "UWAGA: rozmiar metadanych LUKS2 zmienił się na % (w bajtach).\ msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "UWAGA: rozmiar obszaru kluczy LUKS2 zmienił się na % (w bajtach).\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -411,8 +412,8 @@ msgstr "Wznawianie nie jest obsługiwane dla urządzenia %s." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Klucz wolumenu nie pasuje do wolumenu." @@ -429,7 +430,7 @@ msgstr "Nie udało się podstawić nowego klucza." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Klucz %d nie jest aktywny." @@ -442,7 +443,7 @@ msgstr "Nagłówek urządzenia zachodzi na obszar danych." 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/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Nie udało się uzyskać blokady ponownego szyfrowania." @@ -451,106 +452,106 @@ msgstr "Nie udało się uzyskać blokady ponownego szyfrowania." 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:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Urządzenie %s już istnieje." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 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:4410 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:4417 msgid "Root hash signature required." msgstr "Wymagany podpis hasza głównego." -#: lib/setup.c:4421 +#: lib/setup.c:4426 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, 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:4521 #, c-format msgid "Invalid device %s." msgstr "Błędne urządzenie %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Bufor klucza wolumenu zbyt mały." -#: lib/setup.c:4640 +#: lib/setup.c:4645 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:4662 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:4664 #, 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:4870 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:5195 #, 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:5480 #, 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:5777 #, 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:5850 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:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 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." @@ -610,40 +611,45 @@ msgstr "Urządzenie %s nie istnieje lub dostęp jest zabroniony." msgid "Device %s is not compatible." msgstr "Urządzenie %s nie jest zgodne." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Urządzenie %s jest zbyt małe. Wymagane przynajmniej % bajtów." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "Urządzenie %s ma zerowy rozmiar." @@ -754,7 +760,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Nie można zapisać na urządzenie %s, brak uprawnień." @@ -777,7 +783,7 @@ msgstr "Błąd we/wy podczas szyfrowania klucza." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -800,42 +806,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Nie można odczytać pliku kopii zapasowej nagłówka %s." @@ -857,7 +863,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -910,7 +916,7 @@ msgstr "Naprawa nie powiodła się." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "W nagłówku LUKS nie wykryto żadnych znanych problemów." @@ -929,8 +935,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Podano zły format LUKS UUID." @@ -999,11 +1005,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Proszę upewnić się, że moduł jądra algif_skcipher został załadowany." @@ -1016,16 +1022,16 @@ 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." @@ -1048,73 +1054,73 @@ msgstr "Przy analizie obsługiwanego Głównego Klucza Wolumenu napotkano nieocz 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:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Nie udało się odczytać sygnatury BITLK z %s." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK w wersji 1 nie jest obecnie obsługiwany." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Błędna lub nieznana sygnatura rozruchowa urządzenia BITLK." -#: lib/bitlk/bitlk.c:502 +#: 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:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Nieobsługiwany rozmiar sektora %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, 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:542 +#: lib/bitlk/bitlk.c:548 #, 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:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Nieznany lub nieobsługiwany rodzaj szyfrowania." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, 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:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Ta operacja nie jest obsługiwana." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Błędny rozmiar klucza." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Nieoczekiwany rozmiar danych klucza." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 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:986 +#: lib/bitlk/bitlk.c:994 #, 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:1068 +#: lib/bitlk/bitlk.c:1076 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:1204 +#: lib/bitlk/bitlk.c:1212 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:1208 +#: lib/bitlk/bitlk.c:1216 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." @@ -1265,8 +1271,8 @@ msgstr "Jądro nie obsługuje odwzorowań dm-integrity." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Nie udało się uzyskać blokady dla zapisu na urządzeniu %s." @@ -1292,40 +1298,40 @@ msgstr "Żądany offset danych jest zbyt mały." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "UWAGA: obszar kluczy (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1335,7 +1341,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1345,50 +1351,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 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:2165 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:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 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:2349 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:2357 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:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Operacja niezgodna z urządzeniem oznaczonym do ponownego szyfrowania LUKS2. Przerwano." @@ -1426,7 +1432,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." @@ -1675,69 +1681,69 @@ msgstr "Brak wolnego miejsca na token." msgid "Failed to create builtin token %s." msgstr "Nie udało się utworzyć wbudowanego tokenu %s." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Nie wykryto znanego wzorca określającego szyfr." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Operacja przerwana.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Wymagana jest opcja --key-file." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Proszę wprowadzić PIM VeraCrypt: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Błędna wartość PIM: błąd składni." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Błędna wartość PIM: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Błędna wartość PIM: poza zakresem." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 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:549 #, 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:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1748,68 +1754,68 @@ msgstr "" "Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n" "w bezpiecznym miejscu." -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Test szybkości przerwany." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s N/D\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s N/D\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Wynik testu wydajności nie jest wiarygodny." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algorytm | Klucz | Szyfrowanie | Odszyfrowywanie\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algorytm | Klucz | Szyfrowanie | Odszyfrowywanie\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "N/D" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1817,19 +1823,19 @@ 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:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Naprawdę kontynuować odtwarzanie ponownego szyfrowania LUKS2?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Hasło do odtwarzania ponownego szyfrowania: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 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:1172 src/integritysetup.c:146 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 +1843,104 @@ 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:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Nie można dezaktywować urządzenia tymczasowego %s." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 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:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Nieobsługiwane opcje rozmiaru metadanych LUKS2." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Nie wykryto znanego wzorca określającego integralność." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Nie udało się ustawić parametrów PBKDF." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "Offset zmniejszonych danych jest dozwolony tylko dla osobnego nagłówka LUKS." -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Dowolne pozostałe hasło: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Operacja przerwana, klucz NIE został wymazany.\n" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Dowolne istniejące hasło: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 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:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Nowe hasło: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "Hasło dla klucza do konwersji: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 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:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1945,12 +1951,12 @@ msgstr "" "Zrzut ten powinien być zawsze zapisywany w postaci zaszyfrowanej\n" "w bezpiecznym miejscu." -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, 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:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1959,30 +1965,30 @@ 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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Wymagana jest opcja --header-backup-file." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, 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:2281 #, 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:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Nie rozpoznany typ urządzenia metadanych %s." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1991,95 +1997,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:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Operacja przerwana, klucze NIE zostały wymazane.\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 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:2410 #, c-format msgid "Device is already %s type." msgstr "Urządzenie już ma typ %s." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, 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:2421 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:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Token %d jest błędny." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Token %d jest w użyciu." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "Token %d nie jest w użyciu." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Nie udało się zaimportować tokenu z pliku." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "Błędna operacja na tokenie %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, 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:2686 #, 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:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2093,233 +2099,233 @@ msgstr "" "Aby uruchomić ponowne szyfrowanie w trybie online, należy użyć parametru\n" "--active-name.\n" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "Błędny typ urządzenia LUKS." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Modyfikowanie wartości --reduce-device-size do dwukrotności parametru --offset % (w sektorach).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "Szyfrowanie jest obsługiwane tylko w formacie LUKS2." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, 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:2830 src/cryptsetup.c:2837 #, 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:2901 #, 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:3065 src/cryptsetup.c:3071 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:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Hasło dla klucza %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Hasło dla klucza %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Polecenie wymaga urządzenia jako argumentu." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "Ponowne szyfrowanie LUKS2 jest już zainicjowane. Przerywanie operacji." -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "Urządzenie LUKS2 nie jest w trakcie ponownego szyfrowania." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "otwarcie urządzenia jako " -#: 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "zamknięcie urządzenia (usunięcie odwzorowania)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "zmiana rozmiaru aktywnego urządzenia" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "pokazanie stanu urządzenia" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher ]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "próba naprawy metadanych na dysku" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "ponowne szyfrowanie urządzenia LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "usunięcie wszystkich kluczy (usunięcie klucza szyfrującego)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "przekonwertowanie formatu LUKS z/do LUKS2" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "sformatowanie urządzenia LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 msgid "converts a key to new pbkdf parameters" msgstr "konwersja klucza na nowe parametry pbkdf" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "wymazanie klucza o numerze z urządzenia LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "wypisanie UUID-a urządzenia LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "sprawdzenie pod kątem nagłówka partycji LUKS" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "zrzut informacji o partycji LUKS" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "zrzut informacji o urządzeniu TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "zrzut informacji o urządzeniu BITLK" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "Wznowienie zatrzymanego urządzenia LUKS" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "Kopia zapasowa nagłówka i kluczy urządzenia LUKS" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 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:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Operacja na tokenach LUKS2" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2327,7 +2333,7 @@ msgstr "" "\n" " to jedno z:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2339,7 +2345,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:3419 #, c-format msgid "" "\n" @@ -2354,7 +2360,7 @@ msgstr "" " to numer klucza LUKS do zmiany\n" " to opcjonalny plik nowego klucza dla akcji luksAddKey\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2363,7 +2369,7 @@ msgstr "" "\n" "Domyślny wkompilowany format metadanych to %s (dla akcji luksFormat).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2380,7 +2386,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:3442 #, c-format msgid "" "\n" @@ -2395,443 +2401,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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Wyświetlenie tego opisu" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 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.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Wypisanie wersji pakietu" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Opcje pomocnicze:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Wyświetlanie informacji diagnostycznych" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Odczyt klucza z pliku" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Odczyt klucza wolumenu (klucza głównego) z pliku." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITÓW" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "bajty" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 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:3519 msgid "Limits the read from newly added keyfile" msgstr "Ograniczenie odczytu z nowo dodanego pliku klucza" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SEKTORÓW" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 msgid "The start offset in the backend device" msgstr "Offset początku na urządzeniu przechowującym" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 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:3526 msgid "Create a readonly mapping" msgstr "Utworzenie odwzorowania tylko do odczytu" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Bez pytań o potwierdzenie" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "s" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Wyrównanie danych do granicy sektorów - dla luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Użycie /dev/urandom do wygenerowania klucza wolumenu" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 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:3536 src/veritysetup.c:482 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:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 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:3539 msgid "Do not activate device, just check passphrase" msgstr "Sprawdzenie hasła bez uaktywniania urządzenia" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Użycie nagłówka ukrytego (ukrytego urządzenia TCRYPT)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 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:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Użycie zapasowego (drugiego) nagłówka TCRYPT" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Wyszukiwanie także urządzeń zgodnych z VeraCryptem" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 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:3545 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:3546 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:3547 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:3548 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:3549 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:3550 +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:3551 +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:3552 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:3553 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:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ms" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Limit kosztu pamięciowego PBKDF" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilobajty" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Koszt zrównoleglenia PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "wątki" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Koszt iteracji PBKDF (wymuszony, wyłącza test wydajności)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Priorytet klucza: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Wyłączenie blokowania metadanych na dysku" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 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:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Algorytm integralności danych (tylko LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 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:3564 src/integritysetup.c:547 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:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Użycie niewydajnego starego wyrównania (stare jądra)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 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:3567 msgid "Token number (default: any)" msgstr "Numer tokenu (domyślnie: dowolny)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Opis klucza" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Rozmiar sektora szyfrowania (domyślnie: 512 bajtów)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 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:3571 msgid "Set activation flags persistent for device" msgstr "Trwałe ustawienie flag uaktywniania dla urządzenia" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Ustawienie etykiety dla urządzenia LUKS2" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Ustawienie etykiety podsystemu dla urządzenia LUKS2" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 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:3575 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:3576 msgid "LUKS2 header metadata area size" msgstr "Rozmiar obszaru metadanych nagłówka LUKS2" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Rozmiar obszaru kluczy nagłówka LUKS2" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 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:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "Klucz LUKS2: rozmiar klucza szyfrującego" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 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:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Szyfrowanie urządzenia LUKS2 (w miejscu)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Odszyfrowanie urządzenia LUKS2 (usunięcie szyfrowania)." -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Zainicjowanie ponownego szyfrowania LUKS2 wyłącznie w metadanych." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 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:3585 src/cryptsetup_reencrypt.c:1635 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:3586 msgid "Maximal reencryption hotzone size." msgstr "Maksymalny rozmiar strefy hotzone ponownego szyfrowania." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 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:3588 msgid "Reencryption hotzone checksums hash" msgstr "Skrót sum kontrolknych strefy hotzone ponownego szyfrowania" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[OPCJA...] " -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Brak argumentu ." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Nieznana akcja." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 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:3740 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:3745 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:3750 src/integritysetup.c:654 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:3755 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:3760 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:3765 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:3775 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,255 +2854,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:3781 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:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Numer klucza jest nieprawidłowy." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Liczba ujemna nie jest dozwolona dla tej opcji." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Błędne określenie rozmiaru metadanych LUKS2." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Błędne określenie rozmiaru kluczy LUKS2." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 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:3866 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:3873 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:3879 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:3884 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:3889 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:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Podano błędny argument dla parametru --veracrypt-pim." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 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:3907 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:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Wymagane jest określenie klucza." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 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:3939 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:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "Przy opcji --unbound wymagany jest rozmiar klucza." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 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:3971 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:3982 msgid "Cannot disable metadata locking." msgstr "Nie można wyłączyć blokowania metadanych." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 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.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Błędne określenie rozmiaru urządzenia." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 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:4006 src/cryptsetup_reencrypt.c:1733 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:4011 msgid "Invalid data size specification." msgstr "Błędne określenie rozmiaru danych." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Zmniejszenie przepełnienia rozmiaru." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "Odszyfrowanie LUKS2 wymaga opcji --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 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:4028 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:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Opcji --device-size i --size nie można łączyć." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Opcje --keyslot-cipher i --keyslot-key-size muszą być użyte łącznie." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Podano błędny łańcuch zarodka." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 msgid "Invalid root hash string specified." msgstr "Podano błędny łańcuch głównego hasza." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Błędny plik podpisu %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Nie można odczytać pliku klucza %s." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "sformatowanie urządzenia" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " " -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "weryfikacja urządzenia" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " " -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "pokazanie stanu aktywnego urządzenia" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "wyświetlenie informacji z dysku" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3103,7 +3121,7 @@ msgstr "" " to urządzenie zawierające dane weryfikacyjne\n" " to hasz głównego węzła na \n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3114,102 +3132,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "Nieużywanie superbloku VERITY" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 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:472 msgid "number" msgstr "liczba" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Rozmiar bloku na urządzeniu z danymi" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Rozmiar bloku na urządzeniu z haszami" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "bajty parzystości FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Liczba bloków w pliku danych" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "bloki" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "ścieżka" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Offset początku na urządzeniu z haszami" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Offset początku na urządzeniu FEC" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Algorytm skrótu" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "łańcuch" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Zarodek" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "Łańcuch szesnastkowy" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Ścieżka pliku podpisu hasza głównego" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Restart jądra po wykryciu uszkodzenia" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Panika jądra po wykryciu uszkodzenia" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Zignotowanie uszkodzenia, jedynie logowanie" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Bez weryfikacji wyzerowanych bloków" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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:588 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:593 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:598 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/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." From 284672c081c4abd4b7ef2ce2b23c58be07ad7c30 Mon Sep 17 00:00:00 2001 From: Yuri Kozlov Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 038/149] po: update ru.po (from translationproject.org) --- po/ru.po | 981 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 505 insertions(+), 476 deletions(-) diff --git a/po/ru.po b/po/ru.po index 3c0a5ccd..8c220cbd 100644 --- a/po/ru.po +++ b/po/ru.po @@ -7,10 +7,10 @@ # Yuri Kozlov , 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-21 07:25+0300\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-02 08:03+0300\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \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.04.3\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:405 msgid "Cannot initialize device-mapper, running as non-root user." msgstr "Не удалось инициализировать device-mapper, выполняется без прав суперпользователя." -#: lib/libdevmapper.c:402 +#: lib/libdevmapper.c:408 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "Не удалось инициализировать device-mapper. Загружен ли модуль ядра dm_mod?" -#: lib/libdevmapper.c:1131 +#: lib/libdevmapper.c:1149 msgid "Requested deferred flag is not supported." msgstr "Запрошенный флаг отсрочки не поддерживается." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "У устройства %s был обрезан DM-UUID." -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "Неизвестный тип цели dm." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 msgid "Requested dm-crypt performance options are not supported." msgstr "Запрошенные параметры производительности dm-crypt не поддерживаются." -#: lib/libdevmapper.c:1630 +#: lib/libdevmapper.c:1672 lib/libdevmapper.c:1676 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "Запрошенные параметры обработки повреждённых данных dm-verify не поддерживаются." -#: lib/libdevmapper.c:1634 +#: lib/libdevmapper.c:1680 msgid "Requested dm-verity FEC options are not supported." msgstr "Запрошенные параметры FEC dm-verify не поддерживаются." -#: lib/libdevmapper.c:1638 +#: lib/libdevmapper.c:1684 msgid "Requested data integrity options are not supported." msgstr "Запрошенные параметры целостности данных не поддерживаются." -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "Запрошенный параметр sector_size не поддерживается." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Discard/TRIM не поддерживается." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "Запрошенный режим битовой карты dm-integrity не поддерживается." -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Ошибка при запросе сегмента dm-%s." @@ -181,7 +182,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Устройство %s не активно." @@ -204,7 +205,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Неподдерживаемый размер сектора шифрования." @@ -252,7 +253,7 @@ msgstr "ПРЕДУПРЕЖДЕНИЕ: размер метаданных LUKS2 и msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: размер слотов ключа LUKS2 изменился и стал % байт.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -415,8 +416,8 @@ msgstr "Возобновление не поддерживается устро 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Ключ тома не подходит к тому." @@ -433,7 +434,7 @@ msgstr "Ошибка при переключении на новый слот к msgid "Key slot %d is invalid." msgstr "Некорректный слот ключа %d." -#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 +#: lib/setup.c:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Слот ключа %d не активен." @@ -446,7 +447,7 @@ msgstr "Заголовок устройства перекрывает обла msgid "Reencryption in-progress. Cannot activate device." msgstr "Выполняется перешифрование. Невозможно активировать устройство." -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Ошибка при получении блокировки перешифрования." @@ -455,106 +456,106 @@ msgstr "Ошибка при получении блокировки переши msgid "LUKS2 reencryption recovery failed." msgstr "Ошибка восстановления перешифрования LUKS2." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Устройство %s уже существует." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Невозможно использовать устройство %s, некорректное имя или оно всё ещё используется." + +#: lib/setup.c:4301 msgid "Incorrect volume key specified for plain device." msgstr "Для устройства plain указан некорректный ключ тома." -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "Некорректный корневой хэш для указанного устройства verity." -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "Требуется подпись корневого хэша." -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." msgstr "Отсутствует связка ключей ядра: требуется для передачи подписи в ядро." -#: lib/setup.c:4438 lib/setup.c:5915 +#: lib/setup.c:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "Устройство %s всё ещё используется." -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "Неверное устройство %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Буфер ключа тома слишком мал." -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "Невозможно получить ключ тома для устройства plain." -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "Невозможно получить корневой хэш для устройства verity." -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, c-format msgid "This operation is not supported for %s crypt device." msgstr "Эта операция не поддерживается для устройства crypt %s." -#: lib/setup.c:4865 +#: lib/setup.c:4870 msgid "Dump operation is not supported for this device type." msgstr "Операция дампа не поддерживается для устройства этого типа." -#: lib/setup.c:5190 +#: lib/setup.c:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "Смещение данных не кратно %u байтам." -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, c-format msgid "Cannot convert device %s which is still in use." msgstr "Невозможно преобразовать устройство %s, которое всё ещё используется." -#: lib/setup.c:5772 +#: lib/setup.c:5777 #, c-format msgid "Failed to assign keyslot %u as the new volume key." msgstr "Ошибка при назначении слота ключа %u в качестве нового ключа тома." -#: lib/setup.c:5845 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "Ошибка при инициализации параметров слота ключа по умолчанию LUKS2." -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "Ошибка при назначении слота ключа %d дайджесту." -#: lib/setup.c:5982 +#: lib/setup.c:5987 msgid "Kernel keyring is not supported by the kernel." msgstr "Связка ключей ядра не поддерживается ядром." -#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 +#: lib/setup.c:5997 lib/luks2/luks2_reencrypt.c:2952 #, c-format msgid "Failed to read passphrase from keyring (error %d)." msgstr "Не удалось прочитать парольную фразу из связки ключей (ошибка %d)." -#: lib/setup.c:6016 +#: lib/setup.c:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "Не удалось захватить глобальную блокировку сериализации доступа на скорости памяти (memory-hard)." @@ -614,40 +615,45 @@ msgstr "Устройство %s не существует или отказан msgid "Device %s is not compatible." msgstr "Устройство %s несовместимо." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, c-format +msgid "Ignoring bogus optimal-io size for data device (%u bytes)." +msgstr "Игнорируется фиктивный размер optimal-io для устройства данных (%u байт)." + +#: lib/utils_device.c:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Устройство %s слишком маленькое. Требуется не менее % байт." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, c-format msgid "Cannot use device %s, permission denied." msgstr "Невозможно использовать устройство %s, недостаточно прав." -#: lib/utils_device.c:730 +#: lib/utils_device.c:736 #, c-format msgid "Cannot get info about device %s." msgstr "Невозможно получить информацию об устройстве %s." -#: lib/utils_device.c:753 +#: lib/utils_device.c:759 msgid "Cannot use a loopback device, running as non-root user." msgstr "Невозможно использовать закольцованное устройство, выполняется без прав суперпользователя." -#: lib/utils_device.c:763 +#: lib/utils_device.c:769 msgid "Attaching loopback device failed (loop device with autoclear flag is required)." msgstr "Ошибка при присоединении закольцованного устройства (требуется закольцованное устройство с флагом autoclear)." -#: lib/utils_device.c:809 +#: lib/utils_device.c:815 #, c-format msgid "Requested offset is beyond real size of device %s." msgstr "Запрошенный размер вне реального размера устройства %s." -#: lib/utils_device.c:817 +#: lib/utils_device.c:823 #, c-format msgid "Device %s has zero size." msgstr "Устройство %s имеет нулевой размер." @@ -758,7 +764,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Невозможно записать на устройство %s, недостаточно прав." @@ -781,7 +787,7 @@ msgstr "Ошибка ввода-вывода при шифровании сло #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -804,42 +810,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Невозможно прочитать файл резервного заголовка %s." @@ -861,7 +867,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -914,7 +920,7 @@ msgstr "Ошибка при исправлении." msgid "Requested LUKS hash %s is not supported." msgstr "Запрошенный хэш LUKS %s не поддерживается." -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "Известных неполадок в заголовке LUKS не обнаружено." @@ -933,8 +939,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Указан неправильный формат LUKS UUID." @@ -1003,11 +1009,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Убедитесь, что загружен ядерный модуль algif_skcipher." @@ -1020,16 +1026,16 @@ 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." @@ -1052,73 +1058,73 @@ msgstr "При анализе поддерживаемого главного к msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "При анализе поддерживаемого главного ключа тома обнаружено неожиданное значение элемента метаданных «%u»." -#: lib/bitlk/bitlk.c:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Ошибка чтения подписи BITLK из %s." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK версии 1 пока не поддерживается." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Некорректная или неизвестная подпись загрузчика устройства BITLK." -#: lib/bitlk/bitlk.c:502 +#: lib/bitlk/bitlk.c:503 msgid "Invalid or unknown signature for BITLK device." msgstr "Некорректная или неизвестная подпись устройства BITLK." -#: lib/bitlk/bitlk.c:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Неподдерживаемый размер сектора %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "Ошибка чтения заголовка BITLK из %s." -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "Ошибка чтения метаданных BITLK FVE из %s." -#: lib/bitlk/bitlk.c:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Неизвестный или неподдерживаемый тип шифрования." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Ошибка чтения элементов метаданных BITLK из %s." -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Эта операция не поддерживается." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Неверный размер ключа." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Неожиданный размер ключа данных." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "Данное устройство BITLK находится в неподдерживаемом состоянии и не может быть включено." -#: lib/bitlk/bitlk.c:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "Устройства BITLK с типом «%s» не могут быть включены." -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "Активация частично расширенного устройства BITLK не поддерживается." -#: lib/bitlk/bitlk.c:1204 +#: lib/bitlk/bitlk.c:1212 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "Невозможно активировать устройство, в ядерном dm-crypt отсутствует поддержка BITLK IV." -#: lib/bitlk/bitlk.c:1208 +#: lib/bitlk/bitlk.c:1216 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "Невозможно активировать устройство, в ядерном dm-crypt отсутствует поддержка BITLK Elephant diffuser." @@ -1269,8 +1275,8 @@ msgstr "Ядро не поддерживает отображение dm-integri 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Не удалось захватить блокировку на запись на устройстве %s." @@ -1296,40 +1302,40 @@ msgstr "Запрошенное смещение данных слишком ма msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: очень маленькая область слотов ключа (% байт), количество доступных слотов ключа 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 msgid "Data offset differ on device and backup, restore failed." msgstr "Смещение данных различается на устройстве и в резервной копии, восстановление невозможно." -#: lib/luks2/luks2_json_metadata.c:1214 +#: lib/luks2/luks2_json_metadata.c:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1340,7 +1346,7 @@ msgstr "" "действующего устройства! Замена заголовка из резервной копии может повредить\n" "данные на этом устройстве!" -#: lib/luks2/luks2_json_metadata.c:1227 +#: lib/luks2/luks2_json_metadata.c:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1350,50 +1356,50 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: на устройстве обнаружено незаконченное внесистемное (offline)\n" "перешифрование! Замена заголовка из резервной копии может повредить данные." -#: lib/luks2/luks2_json_metadata.c:1323 +#: lib/luks2/luks2_json_metadata.c:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "Ошибка при задании сегмента dm-linear." -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "Неподдерживаемые настройки целостности устройства." -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 msgid "Failed to read LUKS2 requirements." msgstr "Ошибка при чтении требований LUKS2." -#: lib/luks2/luks2_json_metadata.c:2339 +#: lib/luks2/luks2_json_metadata.c:2349 msgid "Unmet LUKS2 requirements detected." msgstr "Обнаружены неудовлетворяемые требования LUKS2." -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "Operation incompatible with device marked for legacy reencryption. Aborting." msgstr "Операция не совместима с устройством, отмеченным для устаревшего перешифрования. Прерываемся." -#: lib/luks2/luks2_json_metadata.c:2349 +#: lib/luks2/luks2_json_metadata.c:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Операция не совместима с устройством, отмеченным для перешифрования LUKS2. Прерываемся." @@ -1431,7 +1437,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 "Невозможно переместить область слота ключа." @@ -1680,69 +1686,69 @@ msgstr "Нет свободного слота под токен." msgid "Failed to create builtin token %s." msgstr "Ошибка при создании встроенного токена %s." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 msgid "Can't do passphrase verification on non-tty inputs." msgstr "Невозможно проверить парольную фразу не с входных tty." -#: src/cryptsetup.c:221 +#: src/cryptsetup.c:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Обнаружено указание неизвестного шаблона шифра." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Операция прервана.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Параметр --key-file является обязательным." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Введите VeraCrypt PIM: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Недопустимое значение PIM: ошибка при разборе." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Недопустимое значение PIM: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Недопустимое значение PIM: вышло за границы диапазона." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "С этой парольной фразой заголовка устройства не обнаружено." -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "Устройство %s не является корректным устройством BITLK." -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1752,70 +1758,70 @@ msgstr "" "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n" "Этот дамп следует всегда хранить зашифрованным в надёжном месте." -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "Устройство %s всё ещё активно и запланировано к отложенному удалению.\n" -#: src/cryptsetup.c:701 +#: src/cryptsetup.c:709 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:850 msgid "Benchmark interrupted." msgstr "Оценка производительности прервана." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s Н/Д\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s Н/Д\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Результат оценки производительности ненадёжен." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Алгоритм | Ключ | Шифрование | Расшифровка\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "" "# Algorithm | Key | Encryption | Decryption\n" "# Алгоритм | Ключ | Шифрование | Расшифровка\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "Н/Д" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1823,19 +1829,19 @@ msgstr "" "Кажется, что устройству не требуется восстановление перешифрования.\n" "Продолжить?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Действительно продолжить восстановление перешифрования LUKS2?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Введите пароль для восстановления перешифрования: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 msgid "Really try to repair LUKS device header?" msgstr "Действительно попробовать восстановить заголовок устройства LUKS?" -#: src/cryptsetup.c:1160 src/integritysetup.c:146 +#: src/cryptsetup.c:1172 src/integritysetup.c:146 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 +1849,104 @@ msgstr "" "Затирается устройство для инициализации целостности контрольной суммы.\n" "Вы можете прервать процесс нажав CTRL+c (остаток незатёртого устройства будет содержать некорректную контрольную сумму).\n" -#: src/cryptsetup.c:1182 src/integritysetup.c:168 +#: src/cryptsetup.c:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Невозможно деактивировать временное устройство %s." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 msgid "Integrity option can be used only for LUKS2 format." msgstr "Параметр целостности можно использовать только в формате LUKS2." -#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 +#: src/cryptsetup.c:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Неподдерживаемый размер параметров метаданных LUKS2." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, c-format msgid "Cannot create header file %s." msgstr "Невозможно создать файл заголовка %s." -#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204 +#: src/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Обнаружено указание неизвестного шаблона целостности." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, c-format msgid "Cannot use %s as on-disk header." msgstr "Невозможно использовать %s в качестве заголовка для диска." -#: src/cryptsetup.c:1313 src/integritysetup.c:227 +#: src/cryptsetup.c:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Ошибка при задании параметров pbkdf." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "Сокращение смещения данных допускается только для отсоединённого заголовка LUKS." -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 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:1500 msgid "Device activated but cannot make flags persistent." msgstr "Устройство активировано, но нельзя сделать флаги постоянными." -#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1651 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "Для удаления выбран слот ключа %d." -#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 +#: src/cryptsetup.c:1593 src/cryptsetup.c:1654 msgid "This is the last keyslot. Device will become unusable after purging this key." msgstr "Это последний слот ключа. Устройство станет неработоспособным после вычистки этого ключа." -#: src/cryptsetup.c:1582 +#: src/cryptsetup.c:1594 msgid "Enter any remaining passphrase: " msgstr "Введите любую оставшуюся парольную фразу: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Операция прервана, слот ключа НЕ затёрт.\n" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 msgid "Enter passphrase to be deleted: " msgstr "Введите удаляемую парольную фразу: " -#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 +#: src/cryptsetup.c:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 msgid "Enter new passphrase for key slot: " msgstr "Введите новую парольную фразу для слота ключа: " -#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Введите любую существующую парольную фразу: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "Введите изменяемую парольную фразу: " -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Введите новую парольную фразу: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "Введите парольную фразу для преобразуемого слота ключа: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "Только одно устройство можно указать для операции isLuks." -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1950,12 +1956,12 @@ msgstr "" "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n" "Этот дамп нужно хранить зашифрованным в надёжном месте." -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "Слот ключа %d не содержит непривязанного ключа." -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1964,30 +1970,30 @@ msgstr "" "обеспечивающей доступ к зашифрованному разделу без парольной фразы.\n" "Этот дамп нужно хранить зашифрованным в надёжном месте." -#: src/cryptsetup.c:2207 src/cryptsetup.c:2228 +#: src/cryptsetup.c:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Параметр --header-backup-file является обязательным." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "%s не является управляемым устройством cryptsetup." -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, c-format msgid "Refresh is not supported for device type %s" msgstr "Обновление не поддерживается для устройств типа %s" -#: src/cryptsetup.c:2311 +#: src/cryptsetup.c:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Нераспознанный тип метаданных устройства %s." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 msgid "Command requires device and mapped name as arguments." msgstr "Для команды требуется задать устройство и имя отображения." -#: src/cryptsetup.c:2336 +#: src/cryptsetup.c:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1996,95 +2002,95 @@ msgstr "" "Эта операция сотрёт все слоты ключей на устройстве %s.\n" "Устройство станет неработоспособным после этой операции." -#: src/cryptsetup.c:2343 +#: src/cryptsetup.c:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Операция прервана, слоты ключа НЕ затёрты.\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "Некорректный тип LUKS, поддерживаются только luks1 и luks2." -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2410 #, c-format msgid "Device is already %s type." msgstr "Устройство уже имеет тип %s." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "Данная операция преобразует формат %s в %s.\n" -#: src/cryptsetup.c:2409 +#: src/cryptsetup.c:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "Операция прервана, устройство НЕ преобразовано.\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Некорректный токен %d." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Используется токен %d." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "Ошибка при назначении токена %d слоту ключа %d." -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:2531 #, c-format msgid "Token %d is not in use." msgstr "Токен %d не используется." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Ошибка при импорте токена из файла." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, c-format msgid "Failed to get token %d for export." msgstr "Ошибка при получении токена %d для экспорта." -#: src/cryptsetup.c:2594 +#: src/cryptsetup.c:2606 msgid "--key-description parameter is mandatory for token add action." msgstr "Для добавления токена требуется параметр --key-description." -#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 +#: src/cryptsetup.c:2612 src/cryptsetup.c:2620 msgid "Action requires specific token. Use --token-id parameter." msgstr "Для действия требуется указать токен. Используйте параметр --token-id." -#: src/cryptsetup.c:2613 +#: src/cryptsetup.c:2625 #, c-format msgid "Invalid token operation %s." msgstr "Некорректная операция с токеном %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "Устройство %s не является блочным.\n" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "Не удалось автоматически обнаружить держателей устройства %s." -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2097,233 +2103,233 @@ msgstr "" "Это может привести к потере данных, если устройство всё же активно.\n" "Для запуска перешифрования в оперативном режиме укажите параметр --active-name.\n" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "Неверный тип устройства LUKS." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Подгоняется значение --reduce-device-size под двукратный размер --offset % (секторов).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "Шифрование поддерживается только для формата LUKS2." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "Временный файл заголовка %s уже существует. Прекращение работы." -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "Невозможно создать временный файл заголовка %s." -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "Для шифрования недостаточно свободных слотов ключей." -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Введите парольную фразу для слота ключа %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Введите парольную фразу для слота ключа %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Для команды требуется в аргументе указать устройство." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "Перешифрование устройства с профилем целостности не поддерживается." -#: src/cryptsetup.c:3315 +#: src/cryptsetup.c:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "Перешифрование LUKS2 уже инициализировано. Прекращение работы." -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "Устройство LUKS2 не перешифровывается." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr "<устройство> [--type <тип>] [<имя>]" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "<имя>" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "закрыть устройство (удалить отображение)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "изменить размер активного устройства" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "показать состояние устройства" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher <шифр>]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "<устройство>" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "попытаться исправить метаданные на диске" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "перешифровать устройство LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "стереть все слоты ключей (удалить ключ шифрования)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "преобразовать LUKS из/в формат LUKS2" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 msgid "set permanent configuration options for LUKS2" msgstr "задать постоянные параметры настройки LUKS2" -#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 +#: src/cryptsetup.c:3376 src/cryptsetup.c:3377 msgid " []" msgstr "<устройство> [<новый файл ключа>]" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "форматировать устройство LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 msgid "add key to LUKS device" msgstr "добавить ключ к устройству LUKS" -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr "<устройство> [<файл ключа>]" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 msgid "removes supplied key or key file from LUKS device" msgstr "удалить заданный ключ или файл ключа с устройства LUKS" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3379 msgid "changes supplied key or key file of LUKS device" msgstr "изменить заданный ключ или файл ключа устройства LUKS" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3380 msgid "converts a key to new pbkdf parameters" msgstr "преобразовать ключ в новые параметры pbkdf" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr "<устройство> <слот ключа>" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "затереть ключ с номером <слот ключа> с устройства LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "напечатать UUID устройства LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "проверить <устройство> на наличие заголовка раздела LUKS" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "выгрузить в дамп информацию о разделе LUKS" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "выгрузить в дамп информацию об устройстве TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "выгрузить в дамп информацию об устройстве BITLK" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "Приостановить устройство LUKS и затереть ключ (заморозка операций ввода-вывода)" -#: src/cryptsetup.c:3368 +#: src/cryptsetup.c:3388 msgid "Resume suspended LUKS device" msgstr "Возобновить работу приостановленного устройства LUKS" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "Сделать резервную копию заголовка и слотов ключей устройства LUKS" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "Восстановить заголовок и слоты ключей устройства LUKS" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr " <устройство>" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Управление токенами LUKS2" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2331,7 +2337,7 @@ msgstr "" "\n" "<действие> может быть:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2343,7 +2349,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:3419 #, c-format msgid "" "\n" @@ -2358,7 +2364,7 @@ msgstr "" "<слот ключа> - номер слота ключа LUKS для изменения\n" "<файл ключа> - необязательный файл ключа для нового ключа для действия luksAddKey\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2367,7 +2373,7 @@ msgstr "" "\n" "Встроенным форматом по умолчанию для метаданных является %s (для действия luksFormat).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2384,7 +2390,7 @@ msgstr "" "PBKDF по умолчанию для LUKS2: %s\n" "\tВремя итерации: %d, Требуемая память: %dКБ, Кол-во параллельных нитей: %d\n" -#: src/cryptsetup.c:3422 +#: src/cryptsetup.c:3442 #, c-format msgid "" "\n" @@ -2399,443 +2405,451 @@ msgstr "" "\tplain: %s, Ключ: %d бит, хэширование пароля: %s\n" "\tLUKS: %s, Ключ: %d бит, хэширование заголовка LUKS: %s, RNG: %s\n" -#: src/cryptsetup.c:3431 +#: src/cryptsetup.c:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Показать это сообщение" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Показать краткие инструкции" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Показать версию пакета" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Параметры справки:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "Показывать подробные сообщения об ошибках" -#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Показывать отладочные сообщения" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 msgid "Show debug messages including JSON metadata" msgstr "Показывать отладочные сообщения включая метаданные JSON" -#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "Хэш, используемый для создания ключа шифрования из парольной фразы" -#: src/cryptsetup.c:3492 +#: src/cryptsetup.c:3512 msgid "Verifies the passphrase by asking for it twice" msgstr "Проверить правильность парольной фразы, запрашивая её дважды" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Прочитать ключ из файла" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Прочитать (главный) ключ тома из файла." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 msgid "Dump volume (master) key instead of keyslots info" msgstr "Создать дамп (главного) ключа, а не информации слотов ключей" -#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3516 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "Размер ключа шифрования" -#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562 +#: src/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "БИТ" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "байт" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Количество пропускаемых байтов в файле ключа" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 msgid "Limits the read from newly added keyfile" msgstr "Ограничить чтение из только что добавленного файла ключа" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 msgid "Number of bytes to skip in newly added keyfile" msgstr "Количество пропускаемых байтов в только что добавленном файле ключа" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3521 msgid "Slot number for new key (default is first free)" msgstr "Номер слота для нового ключа (по умолчанию первый свободный)" -#: src/cryptsetup.c:3502 +#: src/cryptsetup.c:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "СЕКТОРОВ" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "Использовать только заданный размер устройства (игнорировать остаток устройства). ОПАСНО!" -#: src/cryptsetup.c:3504 +#: src/cryptsetup.c:3524 msgid "The start offset in the backend device" msgstr "Начальное смещение в нижележащем (backend) устройстве" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "Сколько секторов зашифрованных данных пропускать от начала" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3526 msgid "Create a readonly mapping" msgstr "Создать отображение в режиме только для чтения" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Не запрашивать подтверждение" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "Время ожидания при ручном вводе парольной фразы (в секундах)" -#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "сек" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "Обновление строки хода выполнения (в секундах)" -#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "Как часто можно повторять попытку ввода парольной фразы" -#: src/cryptsetup.c:3511 +#: src/cryptsetup.c:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Выравнивать полезные данные по границам секторов — для luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 msgid "File with LUKS header and keyslots backup" msgstr "Файл резервной копии заголовка и слотов ключей LUKS" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "Использовать /dev/random для генерации ключа тома" -#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Использовать /dev/urandom для генерации ключа тома" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 msgid "Share device with another non-overlapping crypt segment" msgstr "Совместно использовать устройство с другим неперекрывающимся шифрованным сегментом" -#: src/cryptsetup.c:3516 src/veritysetup.c:477 +#: src/cryptsetup.c:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "Используемый для устройства UUID" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "Разрешить отбрасывать запросы (так называемые TRIM) к устройству" -#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Устройство или файл с отдельным заголовком LUKS" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "Не активировать устройство, только проверить парольную фразу" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Использовать скрытый заголовок (спрятанное устройство TCRYPT)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Устройство является системным диском TCRYPT (с загрузчиком)" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Использовать резервный (вторичный) заголовок TCRYPT" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Также искать устройство совместимое с VeraCrypt" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Персональный умножитель итерации для устройства, совместимого с VeraCrypt" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Запрос персонального умножителя итерации для устройства, совместимого с VeraCrypt" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "Выключить проверку качество пароля (если включена)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 msgid "Use dm-crypt same_cpu_crypt performance compatibility option" msgstr "Использовать параметр производительности same_cpu_crypt для dm-crypt" -#: src/cryptsetup.c:3529 +#: src/cryptsetup.c:3549 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:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "Пропускать dm-crypt workqueue и обрабатывать запросы чтения одновременно" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "Пропускать dm-crypt workqueue и обрабатывать запросы записи одновременно" + +#: src/cryptsetup.c:3552 msgid "Device removal is deferred until the last user closes it" msgstr "Удаление устройства отложено, пока его не закроет последний пользователь" -#: src/cryptsetup.c:3531 +#: src/cryptsetup.c:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "Использовать глобальную блокировку для сериализации доступа на скорости памяти (memory-hard) PBKDF (для обхода OOM)" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "Время итерации PBKDF для LUKS (в мс)" -#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "мс" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Ограничение стоимости памяти PBKDF" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "килобайт" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Стоимость параллельности PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "нити" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Стоимость итераций PBKDF (принудительная, оценка производительности отключена)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Приоритет слота ключа: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Выключить блокировку метаданных на диске" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 msgid "Disable loading volume keys via kernel keyring" msgstr "Выключить загрузку ключей томов через связку ключей ядра" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Алгоритм целостности данных (только для LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Выключить журналирование для устройства целостности" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Не затирать устройство после форматирования" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Использовать неэффективное устаревшее дополнение (старые ядра)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 msgid "Do not ask for passphrase if activation by token fails" msgstr "Не запрашивать парольную фразу, если активация токеном завершилась ошибкой" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3567 msgid "Token number (default: any)" msgstr "Номер токена (по умолчанию: любой)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Описание ключа" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Размер сектора шифрования (по умолчанию: 512 байт)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "Использовать вычисленное IV как размер сектора (не 512 байт)" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "Задать набор постоянных флагов активации устройства" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Задать метку устройства LUKS2" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Задать метку подсистемы устройства LUKS2" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "Создать или сделать дапм непривязанного (без назначенного сегмента данных) слота ключа LUKS2" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 msgid "Read or write the json from or to a file" msgstr "Прочитать или записать json в файл" -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3576 msgid "LUKS2 header metadata area size" msgstr "Размер области метаданных заголовка LUKS2" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Размер области слотов ключей заголовка LUKS2" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Обновить (реактивировать) устройство с новыми параметрами" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "Слот ключа LUKS2: Размер ключа шифрования" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "Слот ключа LUKS2: Шифр, используемый для шифрования слота ключа" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Зашифровать устройство LUKS2 (шифрование по месту (in-place))" -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Расшифровать устройство LUKS2 (удалить шифрование)" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Инициализировать перешифрование LUKS2 только метаданных." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "Возобновить только инициализированное перешифрование LUKS2." -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "Сократить размер данных устройства (переместить смещение данных). ОПАСНО!" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "Максимальный размер hotzone перешифрования." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "Тип устойчивости перешифрования hotzone (checksum,journal,none)" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "Контрольные хэш-суммы hotzone перешифрования" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[ПАРАМЕТР…] <действие> <данные для действия>" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Не задан параметр <действие>." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Неизвестное действие." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "Параметры --refresh и --test-passphrase взаимно исключают друг друга." -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "Параметр --deferred допускается только для команды close." -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 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:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "Параметр --allow-discards допускается только для операции open." -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "Параметр --persistent допускается только для операции open." -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 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:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "Параметр --persistent не допускается одновременно указывать с --test-passphrase." -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 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,255 +2857,259 @@ msgstr "" "Параметр --key-size допускается только для luksFormat, luksAddKey,\n" "действий open и benchmark. Для ограничения чтения из файла ключа используйте --keyfile-size=(байт)." -#: src/cryptsetup.c:3759 +#: src/cryptsetup.c:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "Параметр --integrity допускается только для luksFormat (LUKS2)." -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "Размер ключа должен быть кратен 8-ми битам" -#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Некорректный слот ключа." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "В параметре нельзя использовать отрицательные числа." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 msgid "Only one --key-file argument is allowed." msgstr "Разрешено указывать только один параметр --key-file." -#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "Разрешено использовать только один параметр --use-[u]random." -#: src/cryptsetup.c:3813 +#: src/cryptsetup.c:3835 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "Параметр --use-[u]random допускается только для luksFormat." -#: src/cryptsetup.c:3817 +#: src/cryptsetup.c:3839 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "Параметр --uuid допускается только для luksFormat и luksUUID." -#: src/cryptsetup.c:3821 +#: src/cryptsetup.c:3843 msgid "Option --align-payload is allowed only for luksFormat." msgstr "Параметр --align-payload допускается только для luksFormat." -#: src/cryptsetup.c:3825 +#: src/cryptsetup.c:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Неправильно указан размер метаданных LUKS2." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Неправильно указан размер слота ключа LUKS2." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "Параметры --align-payload и --offset не допускается указывать вместе." -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 msgid "Option --skip is supported only for open of plain and loopaes devices." msgstr "Параметр --skip поддерживается только для открытия устройств plain и loopaes." -#: src/cryptsetup.c:3851 +#: src/cryptsetup.c:3873 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:3879 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:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "Параметр --tcrypt-hidden нельзя указывать вместе с --allow-discards." -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "Параметр --veracrypt поддерживается только для устройств TCRYPT." -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Указано некорректное значение параметра --veracrypt-pim." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "Параметр --veracrypt-pim поддерживается только для устройств, совместимых с VeraCrypt." -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices." msgstr "Параметр --veracrypt-query-pim поддерживается только для устройств, совместимых с VeraCrypt." -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Требуется указать слот ключа." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "Принудительные итерации PBKDF нельзя объединять вместе с параметром времени итерации." -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "Параметр размера сектора не поддерживается этой командой." -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "С параметром --unbound требуется задать размер ключа." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "Параметр --unbound можно использовать только в действиях luksAddKey и luksDump." -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "Параметр --refresh можно использовать только при действии open." -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "Невозможно выключить блокировку метаданных." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "Неправильный максимальный размер перешифрования hotzone." -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Неправильно указан размер устройства." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "Максимальный размер сокращения устройства равен 1 ГиБ." -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "Размер сокращения должен быть кратен 512 байтовому сектору." -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "Неправильный размер устройства данных." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Переполнение размера сокращения." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "Для расшифровки LUKS2 требуется параметр --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "Размер устройства должен быть кратен 512 байтовому сектору." -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "Параметры ---reduce-device-size и --data-size не допускается указывать вместе." -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Параметры --device-size и --size не допускается указывать вместе." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Параметры --keyslot-cipher и --keyslot-key-size нельзя использовать вместе." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Указана недопустимая строка соли." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, c-format msgid "Cannot create hash image %s for writing." msgstr "Невозможно создать образ хэша %s для записи." -#: src/veritysetup.c:107 +#: src/veritysetup.c:108 #, c-format msgid "Cannot create FEC image %s for writing." msgstr "Невозможно создать образ FEC %s для записи." -#: src/veritysetup.c:179 +#: src/veritysetup.c:182 msgid "Invalid root hash string specified." msgstr "Указана недопустимая строка корневого хэша." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Неверный файл подписи %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Невозможно прочитать файл подписи %s." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr "<устройство_данных> <устройство_хэша>" -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "отформатировать устройство" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr "<устройство_данных> <устройство_хэша> <корневой_хэш>" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "проверить устройство" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr "<устройство_данных> <имя> <устройство_хэша> <корневой_хэш>" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "показать состояние активного устройства" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "<устройство_хэша>" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "показать информацию на диске" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3106,7 +3124,7 @@ msgstr "" "<устройство_хэша> — устройство, содержащее проверочные данные\n" "<корневой_хэш> — хэш корневого узла на <устройстве_хэша>\n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3117,102 +3135,110 @@ msgstr "" "Встроенные параметры dm-verity по умолчанию:\n" "\tХэш: %s, Блок данных (байт): %u, Блок хэша (байт): %u, Размер соли: %u, Формат хэша: %u\n" -#: src/veritysetup.c:466 +#: src/veritysetup.c:471 msgid "Do not use verity superblock" msgstr "Не использовать проверочный суперблок" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "Тип форматирования (1 - обычное, 0 - как в Chrome OS)" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "число" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Размер блока устройства данных" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Размер блока устройства хэша" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "байты чётности FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Количество блоков в файле данных" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "блоков" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 msgid "Path to device with error correction data" msgstr "Путь к устройству с данными коррекции ошибок" -#: src/veritysetup.c:472 src/integritysetup.c:549 +#: src/veritysetup.c:477 src/integritysetup.c:549 msgid "path" msgstr "путь" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Начальное смещение на устройстве хэша" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Начальное смещение на устройстве FEC" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Алгоритм хэширования" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "строка" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Соль" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "шестн. строка" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Путь к файлу с подписью корневого хэша" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" -msgstr "Перезапустить ядро, если обнаружится ошибка" +msgstr "Перезапустить ядро, если обнаружится повреждение" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Включить панику в ядре, если обнаружится повреждение" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Игнорировать повреждение, только запротоколировать" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Не проверять обнулённые блоки" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 msgid "Verify data block only the first time it is read" msgstr "Проверять блок данных только при первом чтении" -#: src/veritysetup.c:582 +#: src/veritysetup.c:588 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:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "Параметр --root-hash-signature можно использовать только для действия open." -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together." msgstr "Параметры --ignore-corruption и --restart-on-corruption нельзя использовать вместе." +#: src/veritysetup.c:603 +msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together." +msgstr "Параметры ---panic-on-corruption и --restart-on-corruption нельзя использовать вместе." + #: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3874,6 +3900,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Ошибка записи в файл JSON." +#~ msgid "Wrong key size." +#~ msgstr "Неверный размер ключа." + #~ msgid "Parameter --refresh is only allowed with open or refresh commands." #~ msgstr "Параметр --refresh допускается только с командами open и refresh." From 56f47d389947190df132896bd65723d1da73a3ac Mon Sep 17 00:00:00 2001 From: Yuri Chornoivan Date: Thu, 3 Sep 2020 16:19:28 +0200 Subject: [PATCH 039/149] po: update uk.po (from translationproject.org) --- po/uk.po | 979 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 504 insertions(+), 475 deletions(-) diff --git a/po/uk.po b/po/uk.po index 2ef9aa71..787f92de 100644 --- a/po/uk.po +++ b/po/uk.po @@ -5,10 +5,10 @@ # Yuri Chornoivan , 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-15 15:17+0300\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-01 10:55+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \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.11.70\n" -#: lib/libdevmapper.c:399 +#: lib/libdevmapper.c:405 msgid "Cannot initialize device-mapper, running as non-root user." msgstr "Не можна ініціалізувати device-mapper, якщо програму запущено не від імені адміністратора (root)." -#: lib/libdevmapper.c:402 +#: lib/libdevmapper.c:408 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "Не вдалося ініціалізувати device-mapper. Чи завантажено модуль ядра dm_mod?" -#: lib/libdevmapper.c:1131 +#: lib/libdevmapper.c:1149 msgid "Requested deferred flag is not supported." msgstr "Підтримки бажаного прапорця відкладення, %s, не передбачено." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "DM-UUID для пристрою %s було обрізано." -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "Невідомий тип призначення dm." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 msgid "Requested dm-crypt performance options are not supported." msgstr "Підтримки вказаних параметрів швидкодії dm-crypt не передбачено." -#: lib/libdevmapper.c:1630 +#: lib/libdevmapper.c:1672 lib/libdevmapper.c:1676 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "Підтримки вказаних параметрів обробки пошкоджених даних за допомогою dm-verity не передбачено." -#: lib/libdevmapper.c:1634 +#: lib/libdevmapper.c:1680 msgid "Requested dm-verity FEC options are not supported." msgstr "Підтримки вказаних параметрів FEC за допомогою dm-verity не передбачено." -#: lib/libdevmapper.c:1638 +#: lib/libdevmapper.c:1684 msgid "Requested data integrity options are not supported." msgstr "Підтримки вказаних параметрів цілісності даних не передбачено." -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "Підтримки вказаного параметра sector_size не передбачено." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Підтримки відкидання або обрізання не передбачено." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "Підтримки вказаного режиму бітової карти цілісності dm не передбачено." -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Не вдалося опитати сегмент dm-%s." @@ -178,7 +179,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Пристрій %s є неактивним." @@ -201,7 +202,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Непідтримуваний розмір сектора шифрування." @@ -249,7 +250,7 @@ msgstr "Увага: розмір метаданих LUKS2 змінено до %< msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "Увага: розмір області слотів ключів LUKS2 змінено до % байтів.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -412,8 +413,8 @@ msgstr "Підтримки дії з пробудження для пристр 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Ключ тому не відповідає тому." @@ -430,7 +431,7 @@ msgstr "Не вдалося зарезервувати новий слот кл msgid "Key slot %d is invalid." msgstr "Слот ключа %d є некоректним." -#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 +#: lib/setup.c:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Слот ключа %d не є активним." @@ -443,7 +444,7 @@ msgstr "Заголовок пристрою перекривається із о msgid "Reencryption in-progress. Cannot activate device." msgstr "Виконуємо повторне шифрування. Не можна активувати пристрій." -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Не вдалося отримати стан блокування для повторного шифрування." @@ -452,106 +453,106 @@ msgstr "Не вдалося отримати стан блокування дл msgid "LUKS2 reencryption recovery failed." msgstr "Не вдалося виконати відновлення даних повторного шифрування LUKS2." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Пристрій %s вже існує." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Неможливо скористатися пристроєм %s, некоректна назва або пристрій усе ще використовується." + +#: lib/setup.c:4301 msgid "Incorrect volume key specified for plain device." msgstr "Для пристрою зі звичайним шифруванням вказано помилковий ключ тому." -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "Для пристрою перевірки вказано помилковий кореневий хеш." -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "Потрібен хеш-підпис кореневої теки." -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." msgstr "Немає сховища ключів ядра: це сховище потрібне для передавання підпису ядру." -#: lib/setup.c:4438 lib/setup.c:5915 +#: lib/setup.c:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "Пристрій %s все ще використовується." -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "Некоректний пристрій %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Буфер ключів тому є занадто малим." -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "Неможливо отримати ключ тому для пристрою зі звичайним шифруванням." -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "Не вдалося отримати кореневий хеш для пристрою VERITY." -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, c-format msgid "This operation is not supported for %s crypt device." msgstr "Підтримки цієї дії для шифрованого пристрою %s не передбачено." -#: lib/setup.c:4865 +#: lib/setup.c:4870 msgid "Dump operation is not supported for this device type." msgstr "Підтримки дії зі створення дампу для цього типу пристроїв не передбачено." -#: lib/setup.c:5190 +#: lib/setup.c:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "Зсув у даних не є кратним до %u байтів." -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, c-format msgid "Cannot convert device %s which is still in use." msgstr "Не можна перетворити пристрій %s, який перебуває у користуванні." -#: lib/setup.c:5772 +#: lib/setup.c:5777 #, c-format msgid "Failed to assign keyslot %u as the new volume key." msgstr "Не вдалося прив'язати слот ключа %u як новий ключ тому." -#: lib/setup.c:5845 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "Не вдалося ініціалізувати типові параметри слоту ключів LUKS2." -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "Не вдалося прив'язати слот ключа %d до контрольної суми." -#: lib/setup.c:5982 +#: lib/setup.c:5987 msgid "Kernel keyring is not supported by the kernel." msgstr "У ядрі не передбачено підтримки сховища ключів ядра." -#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 +#: lib/setup.c:5997 lib/luks2/luks2_reencrypt.c:2952 #, c-format msgid "Failed to read passphrase from keyring (error %d)." msgstr "Не вдалося прочитати пароль із ключа зі сховища ключів (помилка %d)." -#: lib/setup.c:6016 +#: lib/setup.c:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "Не вдалося створити загальне блокування серіалізації доступу до пам'яті." @@ -611,40 +612,45 @@ msgstr "Пристрою %s не існує або доступ до цього msgid "Device %s is not compatible." msgstr "Пристрій %s є сумісним." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, c-format +msgid "Ignoring bogus optimal-io size for data device (%u bytes)." +msgstr "Ігноруємо фіктивний розмір optimal-io для пристрою даних (%u байтів)." + +#: lib/utils_device.c:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Обсяг пристрою %s є надто малим. Потрібно принаймні % байтів." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, c-format msgid "Cannot use device %s, permission denied." msgstr "Не можна скористатися пристроєм %s, недостатні права доступу." -#: lib/utils_device.c:730 +#: lib/utils_device.c:736 #, c-format msgid "Cannot get info about device %s." msgstr "Не вдалося отримати дані щодо пристрою %s." -#: lib/utils_device.c:753 +#: lib/utils_device.c:759 msgid "Cannot use a loopback device, running as non-root user." msgstr "Не можна використовувати петльовий пристрій, програму запущено не від імені адміністративного користувача (root)." -#: lib/utils_device.c:763 +#: lib/utils_device.c:769 msgid "Attaching loopback device failed (loop device with autoclear flag is required)." msgstr "Спроба долучення петльового пристрою зазнала невдачі (потрібен петльовий пристрій з встановленим прапорцем автоматичного спорожнення)." -#: lib/utils_device.c:809 +#: lib/utils_device.c:815 #, c-format msgid "Requested offset is beyond real size of device %s." msgstr "Бажана точка відступу перебуває за межами об’єму пристрою %s." -#: lib/utils_device.c:817 +#: lib/utils_device.c:823 #, c-format msgid "Device %s has zero size." msgstr "Об’єм пристрою %s є нульовим." @@ -755,7 +761,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Не вдалося виконати запис на пристрій %s, недостатні права доступу." @@ -778,7 +784,7 @@ msgstr "Помилка введення-виведення під час шиф #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -801,42 +807,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Не вдалося прочитати дані з файла резервної копії заголовка, %s." @@ -858,7 +864,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -911,7 +917,7 @@ msgstr "Спроба виправлення зазнала невдачі." msgid "Requested LUKS hash %s is not supported." msgstr "Підтримки бажаного хешування LUKS, %s, не передбачено." -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "У заголовку LUKS не виявлено жодних проблем." @@ -930,8 +936,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Вказано UUID LUKS у помилковому форматі." @@ -1000,11 +1006,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Переконайтеся, що завантажено модуль ядра algif_skcipher." @@ -1017,16 +1023,16 @@ 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." @@ -1049,73 +1055,73 @@ msgstr "Під час обробки підтримуваного основно msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "Під час обробки підтримуваного основного ключа тому виявлено неочікуване значення запису метаданих «%u»." -#: lib/bitlk/bitlk.c:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Не вдалося прочитати підпис BITLK з %s." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "Підтримки BITLK версії 1 у поточній версії не передбачено." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Некоректний або невідомий підпис завантаження для пристрою BITLK." -#: lib/bitlk/bitlk.c:502 +#: lib/bitlk/bitlk.c:503 msgid "Invalid or unknown signature for BITLK device." msgstr "Некоректний або невідомий підпис для пристрою BITLK." -#: lib/bitlk/bitlk.c:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Непідтримуваний розмір сектора %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "Не вдалося прочитати заголовок BITLK з %s." -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "Не вдалося прочитати метадані FVE BITLK з %s." -#: lib/bitlk/bitlk.c:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Невідомий або непідтримуваний тип шифрування." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Не вдалося прочитати записи метаданих BITLK з %s." -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Підтримки цієї дії не передбачено." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Помилковий розмір ключа." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Неочікуваний розмір даних ключа." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "Цей пристрій BITLK перебуває у непідтримуваному стані — його неможливо активувати." -#: lib/bitlk/bitlk.c:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "Пристрої BITLK типу «%s» неможливо активувати." -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "Активації частково розшифрованого пристрою BITLK не передбачено." -#: lib/bitlk/bitlk.c:1204 +#: lib/bitlk/bitlk.c:1212 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "Не вдалося активувати пристрій — у dm-crypt ядра немає підтримки BITLK IV." -#: lib/bitlk/bitlk.c:1208 +#: lib/bitlk/bitlk.c:1216 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "Не вдалося активувати пристрій — у dm-crypt ядра немає підтримки дифузера Elephant BITLK." @@ -1266,8 +1272,8 @@ msgstr "У ядрі не передбачено підтримки прив'яз 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Не вдалося отримати блокування запису на пристрої %s." @@ -1293,40 +1299,40 @@ msgstr "Вказаний відступ у даних є надто малим." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "Увага: область слоту ключів є надто малою (% байтів), доступна кількість слотів ключів 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 msgid "Data offset differ on device and backup, restore failed." msgstr "Зсуви даних на пристрої і на резервній копії різняться, не вдалося відновити." -#: lib/luks2/luks2_json_metadata.c:1214 +#: lib/luks2/luks2_json_metadata.c:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1336,7 +1342,7 @@ msgstr "" "ПОПЕРЕДЖЕННЯ: виявлено невідомі вимоги LUKS2 у справжньому заголовку пристрою!\n" "Заміна заголовка резервною копією може пошкодити дані на пристрої!" -#: lib/luks2/luks2_json_metadata.c:1227 +#: lib/luks2/luks2_json_metadata.c:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1346,50 +1352,50 @@ msgstr "" "ПОПЕРЕДЖЕННЯ: на пристрої виявлено дані незавершеного повторного шифрування!\n" "Заміна заголовка заголовком із резервної копії може пошкодити дані." -#: lib/luks2/luks2_json_metadata.c:1323 +#: lib/luks2/luks2_json_metadata.c:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "Не вдалося встановити сегмент dm-linear." -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "Непідтримувані налаштування цілісності даних на пристрої." -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 msgid "Failed to read LUKS2 requirements." msgstr "Не вдалося прочитати вимоги LUKS2." -#: lib/luks2/luks2_json_metadata.c:2339 +#: lib/luks2/luks2_json_metadata.c:2349 msgid "Unmet LUKS2 requirements detected." msgstr "Виявлено невідповідність вимог LUKS2." -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "Operation incompatible with device marked for legacy reencryption. Aborting." msgstr "Дія є несумісною із пристроєм, який позначено для перешифрування застарілого варіанта. Перериваємо дію." -#: lib/luks2/luks2_json_metadata.c:2349 +#: lib/luks2/luks2_json_metadata.c:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Дія є несумісною із пристроєм, який позначено для перешифрування LUKS2. Перериваємо дію." @@ -1427,7 +1433,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 "Не вдалося пересунути область слотів ключів." @@ -1676,69 +1682,69 @@ msgstr "Немає вільного слоту ключів." msgid "Failed to create builtin token %s." msgstr "Не вдалося створити вбудований ключ %s." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 msgid "Can't do passphrase verification on non-tty inputs." msgstr "Перевірку паролів не можна виконувати на основі вхідних даних, які надходять не з tty." -#: src/cryptsetup.c:221 +#: src/cryptsetup.c:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Не виявлено жодного відомого зразка специфікації шифрування." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Дію перервано.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Слід вказати параметр --key-file." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Введіть PIM VeraCrypt: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Некоректне значення PIM: помилка обробки." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Некоректне значення PIM: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Некоректне значення PIM: поза межами діапазону." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "Для цього пароля не виявлено заголовка пристрою." -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "Пристрій %s не є коректним пристроєм BITLK." -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1749,68 +1755,68 @@ msgstr "" "без пароля. Цей дамп слід зберігати у зашифрованому форматі\n" "у безпечному місці." -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "Пристрій %s усе ще є активним, його заплановано для відкладеного вилучення.\n" -#: src/cryptsetup.c:701 +#: src/cryptsetup.c:709 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:850 msgid "Benchmark interrupted." msgstr "Тестування перервано." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s н/д\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s н/д\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Результат тестування є ненадійним." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "№%*s Алгоритм | Ключ | Шифрування | Розшифрування\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "№ Алгоритм | Ключ | Шифрування | Розшифрування\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "н/д" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1818,19 +1824,19 @@ msgstr "" "Здається, пристрій не потребує відновлення повторного шифрування.\n" "Хочете виконати цю дію попри це?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Ви справді хочете продовжити процедуру відновлення повторного шифрування LUKS2?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Вкажіть пароль для відновлення повторного шифрування: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 msgid "Really try to repair LUKS device header?" msgstr "Спробувати відновити заголовок пристрою LUKS?" -#: src/cryptsetup.c:1160 src/integritysetup.c:146 +#: src/cryptsetup.c:1172 src/integritysetup.c:146 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 +1844,104 @@ msgstr "" "Витираємо пристрій для ініціалізації контрольних сум для цілісності.\n" "Ви можете перервати цей процес натисканням комбінації клавіш CTRL+C (решта невитертого пристрою міститиме некоректну контрольну суму).\n" -#: src/cryptsetup.c:1182 src/integritysetup.c:168 +#: src/cryptsetup.c:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Не можна скасувати активацію тимчасового пристрою %s." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 msgid "Integrity option can be used only for LUKS2 format." msgstr "Параметр цілісності може бути використано лише для формату LUKS2." -#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 +#: src/cryptsetup.c:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Непідтримувані параметри розміру метаданих LUKS2." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, c-format msgid "Cannot create header file %s." msgstr "Не вдалося створити файл заголовка %s." -#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204 +#: src/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Не виявлено жодного відомого зразка специфікації цілісності." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, c-format msgid "Cannot use %s as on-disk header." msgstr "Не можна використовувати %s як заголовок на диску." -#: src/cryptsetup.c:1313 src/integritysetup.c:227 +#: src/cryptsetup.c:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Не вдалося встановити параметри pbkdf." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "Зменшений відступ даних можна використовувати лише для від’єднаних заголовків LUKS." -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 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:1500 msgid "Device activated but cannot make flags persistent." msgstr "Пристрій задіяно, але не вдалося зробити прапорці сталими." -#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1651 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "Слот ключа %d позначено для вилучення." -#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 +#: src/cryptsetup.c:1593 src/cryptsetup.c:1654 msgid "This is the last keyslot. Device will become unusable after purging this key." msgstr "Це останній слот ключа. Пристрій стане непридатним для використання після спорожнення цього ключа." -#: src/cryptsetup.c:1582 +#: src/cryptsetup.c:1594 msgid "Enter any remaining passphrase: " msgstr "Введіть будь-який інший пароль: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Дію перервано, слот ключів НЕ витерто.\n" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 msgid "Enter passphrase to be deleted: " msgstr "Введіть пароль, який слід вилучити: " -#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 +#: src/cryptsetup.c:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 msgid "Enter new passphrase for key slot: " msgstr "Введіть новий пароль для слота ключа: " -#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Введіть будь-який пароль: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "Введіть пароль, який слід змінити: " -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Введіть новий пароль: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "Вкажіть пароль для слоту ключа, який буде перетворено: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "У команді isLuks можна використовувати лише один аргумент назви пристрою." -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1946,12 +1952,12 @@ msgstr "" "без пароля. Цей дамп слід зберігати у зашифрованому форматі\n" "у безпечному місці." -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "Слот ключа %d не містить непов'язаного ключа." -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1959,30 +1965,30 @@ msgstr "" "Дамп заголовка з непов'язаним ключем є конфіденційними даними.\n" "Цей дамп слід зберігати у зашифрованому форматі у безпечному місці." -#: src/cryptsetup.c:2207 src/cryptsetup.c:2228 +#: src/cryptsetup.c:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Слід вказати параметр --header-backup-file." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "%s не є керованим cryptsetup пристроєм." -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, c-format msgid "Refresh is not supported for device type %s" msgstr "Підтримки дії з оновлення для пристрою типу %s не передбачено." -#: src/cryptsetup.c:2311 +#: src/cryptsetup.c:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Нерозпізнаний тип пристрою метаданих, %s." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 msgid "Command requires device and mapped name as arguments." msgstr "Аргументами команди мають бути назва пристрою та призначена до нього назва." -#: src/cryptsetup.c:2336 +#: src/cryptsetup.c:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1991,95 +1997,95 @@ msgstr "" "У результаті виконання цієї операції буде витерто усі слоти ключів на пристрої %s.\n" "Після виконання цієї дії пристроєм не можна буде скористатися." -#: src/cryptsetup.c:2343 +#: src/cryptsetup.c:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Дію перервано, слоти ключів НЕ витерто.\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "Некоректний тип LUKS. Передбачено підтримку лише luks1 і luks2." -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2410 #, c-format msgid "Device is already %s type." msgstr "Пристрій вже належить до типу %s." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "Ця дія перетворить %s до формату %s.\n" -#: src/cryptsetup.c:2409 +#: src/cryptsetup.c:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "Дію перервано, дані пристрою НЕ перетворено.\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Ключ %d є некоректним." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Ключ %d використовується." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, c-format msgid "Failed to add luks2-keyring token %d." msgstr "Не вдалося додати ключ %d зі сховища ключів luks2." -#: src/cryptsetup.c:2502 src/cryptsetup.c:2564 +#: src/cryptsetup.c:2514 src/cryptsetup.c:2576 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "Не вдалося прив'язати ключ %d до слоту ключа %d." -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:2531 #, c-format msgid "Token %d is not in use." msgstr "Ключ %d не використовується." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Не вдалося імпортувати ключ з файла." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, c-format msgid "Failed to get token %d for export." msgstr "Не вдалося отримати ключ %d для експортування." -#: src/cryptsetup.c:2594 +#: src/cryptsetup.c:2606 msgid "--key-description parameter is mandatory for token add action." msgstr "Параметр --key-description є обов'язковим для дій із додавання ключів." -#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 +#: src/cryptsetup.c:2612 src/cryptsetup.c:2620 msgid "Action requires specific token. Use --token-id parameter." msgstr "Для виконання дії потрібен специфічний ключ. Скористайтеся параметром --token-id." -#: src/cryptsetup.c:2613 +#: src/cryptsetup.c:2625 #, c-format msgid "Invalid token operation %s." msgstr "Некоректна дія з ключем %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "Пристрій %s не є блоковим пристроєм.\n" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "Не вдалося автоматично визначити утримувачів пристрою %s." -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2092,233 +2098,233 @@ msgstr "" "Таке шифрування може призвести до пошкодження даних, якщо пристрій задіяно.\n" "Щоб запустити повторне шифрування у режимі без від'єднання, скористайтеся параметром --active-name.\n" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "Некоректний тип пристрою LUKS." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Коригуємо значення --reduce-device-size до подвійного значення --offset % (у секторах).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "Підтримку шифрування передбачено лише для формату LUKS2." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "Файл тимчасового заголовка %s вже існує. Перериваємо обробку." -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "Не вдалося створити файл тимчасового заголовка %s." -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "Недостатньо вільних слотів ключів для повторного шифрування." -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Вкажіть пароль для слоту ключа %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Вкажіть пароль для слоту ключа %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Комарні слід передати аргумент пристрою." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "Підтримки повторного шифрування пристрою із профілем цілісності не передбачено." -#: src/cryptsetup.c:3315 +#: src/cryptsetup.c:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "Вже ініційовано повторне шифрування LUKS2. Перериваємо виконання дії." -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "Пристрій LUKS2 не перебуває у стані повторного шифрування." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr "<пристрій> [--type <тип>] [<назва>]" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "<назва>" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "закрити пристрій (вилучити призначення)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "змінити розмір активного пристрою" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "показати стан пристрою" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher <шифр>]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "<пристрій>" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "спробувати виправити метадані на диску" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "повторно зашифрувати пристрій LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "витерти усі слоти ключів (вилучити ключ шифрування)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "перетворити LUKS із формату LUKS2 або навпаки" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 msgid "set permanent configuration options for LUKS2" msgstr "встановити сталі параметри налаштування для LUKS2" -#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 +#: src/cryptsetup.c:3376 src/cryptsetup.c:3377 msgid " []" msgstr "<пристрій> [<новий файл ключа>]" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "форматує пристрій LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 msgid "add key to LUKS device" msgstr "додати ключ до пристрою LUKS" -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr "<пристрій> [<файл ключа>]" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 msgid "removes supplied key or key file from LUKS device" msgstr "вилучає наданий ключ або файл ключа з пристрою LUKS" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3379 msgid "changes supplied key or key file of LUKS device" msgstr "змінює наданий ключ або файл ключа пристрою LUKS" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3380 msgid "converts a key to new pbkdf parameters" msgstr "перетворює ключ до нових параметрів pbkdf" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr "<пристрій> <слот ключа>" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "вилучає ключ з номером <слот ключа> з пристрою LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "вивести UUID пристрою LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "виконати спробу виявлення заголовка розділу LUKS на пристрої <пристрій>" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "створити дамп даних щодо розділу LUKS" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "створити дамп даних пристрою TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "створити дамп даних пристрою BITLK" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "Приспати пристрій LUKS і витерти ключ (роботу всіх каналів введення-виведення буде заморожено)" -#: src/cryptsetup.c:3368 +#: src/cryptsetup.c:3388 msgid "Resume suspended LUKS device" msgstr "Відновити роботу приспаного пристрою LUKS" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "Створити резервну копію заголовка пристрою LUKS і слотів ключів" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "Відновити заголовок пристрою LUKS і слоти ключів" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr " <пристрій>" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Керування ключами LUKS2" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2326,7 +2332,7 @@ msgstr "" "\n" "<дія> є однією з таких:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2339,7 +2345,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:3419 #, c-format msgid "" "\n" @@ -2354,7 +2360,7 @@ msgstr "" "<слот ключа> — номер слота ключа LUKS, який слід змінити\n" "<файл ключа> — необов’язковий файл ключа для нового ключа для дії luksAddKey\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2363,7 +2369,7 @@ msgstr "" "\n" "Типовий укомпільований формат метаданих — %s (для дії luksFormat).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2380,7 +2386,7 @@ msgstr "" "Типовий PBKDF для LUKS2: %s\n" "\tЧас ітерації: %d, потрібний обсяг пам'яті: %d кБ, паралельних потоків: %d\n" -#: src/cryptsetup.c:3422 +#: src/cryptsetup.c:3442 #, c-format msgid "" "\n" @@ -2395,443 +2401,451 @@ msgstr "" "\tзвичайне: %s, ключ: %d-бітовий, хешування пароля: %s\n" "\tLUKS: %s, ключ: %d-бітовий, хешування заголовка LUKS: %s, RNG: %s\n" -#: src/cryptsetup.c:3431 +#: src/cryptsetup.c:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Показати цю довідку" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Показати короткі настанови щодо користування" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Вивести дані щодо версії пакунка" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Пункти довідки:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "Показувати докладні повідомлення про помилки" -#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Показувати діагностичні повідомлення" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 msgid "Show debug messages including JSON metadata" msgstr "Показувати діагностичні повідомлення, зокрема метадані JSON" -#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "Хеш, використаний для створення ключа шифрування на основі пароля" -#: src/cryptsetup.c:3492 +#: src/cryptsetup.c:3512 msgid "Verifies the passphrase by asking for it twice" msgstr "Перевіряє пароль повторним запитом щодо нього" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Прочитати ключ з файла" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Прочитати ключ тому (основний ключ) з файла." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 msgid "Dump volume (master) key instead of keyslots info" msgstr "Створити дамп ключа тому (основного ключа) замість показу даних щодо слотів ключів" -#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3516 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "Розмір ключа шифрування" -#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562 +#: src/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "БІТИ" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "байти" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Кількість байтів, які слід пропустити у файлі ключа" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 msgid "Limits the read from newly added keyfile" msgstr "Обмежує читання з щойно доданого файла ключа" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 msgid "Number of bytes to skip in newly added keyfile" msgstr "Кількість байтів, які слід пропустити у щойно доданому файлі ключа" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3521 msgid "Slot number for new key (default is first free)" msgstr "Номер слоту для нового ключа (типовим слотом є перший вільний слот)" -#: src/cryptsetup.c:3502 +#: src/cryptsetup.c:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "СЕКТОРИ" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "Використовувати лише вказаний розмір пристрою (ігнорувати решту об’єму). НЕБЕЗПЕЧНО!" -#: src/cryptsetup.c:3504 +#: src/cryptsetup.c:3524 msgid "The start offset in the backend device" msgstr "Початковий відступ на допоміжному пристрої" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "Кількість секторів зашифрованих даних, які слід пропустити на початку" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3526 msgid "Create a readonly mapping" msgstr "Створити призначення у режимі лише читання" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Не питати про підтвердження" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "Час очікування у інтерактивному запиті щодо пароля (у секундах)" -#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "секунди" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "Оновлення лінії поступу (у секундах)" -#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "Частота повторень спроб отримання вхідних даних пароля" -#: src/cryptsetup.c:3511 +#: src/cryptsetup.c:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Вирівняти дані за областями у секторів, для luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 msgid "File with LUKS header and keyslots backup" msgstr "Файл з заголовком LUKS та резервною копію слотів ключів" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "Використовувати для створення ключа тому /dev/random" -#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Використовувати для створення ключа тому /dev/urandom" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 msgid "Share device with another non-overlapping crypt segment" msgstr "Використовувати пристрій спільно з іншим сегментом шифрування, без перекриття" -#: src/cryptsetup.c:3516 src/veritysetup.c:477 +#: src/cryptsetup.c:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "UUID пристрою, який слід використати" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "Дозволити запити відкидання (або TRIM) до пристрою" -#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Пристрій або файл з окремим заголовком LUKS" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "Не задіювати пристрій, просто перевірити пароль" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Використовувати прихований заголовок (прихований пристрій TCRYPT)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Пристрій є системним диском TCRYPT (диском з завантажувачем)" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Використовувати резервний (вторинний) заголовок TCRYPT" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Виконати також пошук сумісних із VeraCrypt пристроїв" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) для сумісного з VeraCrypt пристрою" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Особистий множник ітерації (Personal Iteration Multiplier або PIM) запису для сумісного з VeraCrypt пристрою" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "Вимкнути перевірку якості пароля (якщо її увімкнено)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 msgid "Use dm-crypt same_cpu_crypt performance compatibility option" msgstr "Скористатися параметром сумісності швидкодії dm-crypt same_cpu_crypt" -#: src/cryptsetup.c:3529 +#: src/cryptsetup.c:3549 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:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "Обійти чергу обробки dm-crypt і обробляти запити щодо читання синхронно" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "Обійти чергу обробки dm-crypt і обробляти запити щодо запису синхронно" + +#: src/cryptsetup.c:3552 msgid "Device removal is deferred until the last user closes it" msgstr "Вилучення пристрою відкладено до часу, коли останній користувач закриє його" -#: src/cryptsetup.c:3531 +#: src/cryptsetup.c:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "Скористатися загальним блокуванням для перетворення у послідовну форму «жорсткого» PBKDF у пам'яті (обхід OOM)" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "Тривалість ітерації PBKDF для LUKS (у мс)" -#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "мс" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Обмеження вартості пам'яті PBKDF" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "кілобайти" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Вартість розпаралелювання PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "threads" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Вартість ітерацій PBKDF (примусово, вимикає тестування)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Пріоритетність слотів ключів: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Вимкнути блокування метаданих на диску" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 msgid "Disable loading volume keys via kernel keyring" msgstr "Вимкнути завантаження ключів тому за допомогою сховища ключів ядра" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Алгоритм перевірки цілісності даних (лише LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Вимкнути журнал для пристрою забезпечення цілісності" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Не витирати пристрій після форматування" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Скористатися неефективним застарілим відступом (застарілі ядра)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 msgid "Do not ask for passphrase if activation by token fails" msgstr "Не просити ввести пароль, якщо не вдасться скористатися активацією за ключем" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3567 msgid "Token number (default: any)" msgstr "Номер ключа (типове значення: будь-який)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Опис ключа" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Розмір сектора шифрування (типове значення: 512 байтів)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "Використовувати обчислення за IV у розмірі сектора (не за блоками у 512 байтів)" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "Встановити сталі прапорці активації для пристрою" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Встановити мітку для пристрою LUKS2" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Встановити мітку підтому для пристрою LUKS2" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "Створити непов'язаний (без пов'язаного сегмента даних) слот ключів LUKS2 або його дамп" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 msgid "Read or write the json from or to a file" msgstr "Прочитати json з файла або записати json до файла" -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3576 msgid "LUKS2 header metadata area size" msgstr "Розмір області метаданих у заголовку LUKS2" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Розмір області слотів ключів у заголовку LUKS2" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Оновити (повторно активувати) пристрій згідно з новими параметрами" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "Слот ключів LUKS2: розмір ключа шифрування" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "Слот ключа LUKS2: шифрування, яке використано для слоту ключів" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Зашифрувати пристрій LUKS2 (шифрування на місці)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Розшифрувати пристрій LUKS2 (усунути шифрування)." -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Ініціалізувати повторне шифрування LUKS2 лише у метаданих." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "Відновлювати лише ініціалізоване повторне шифрування LUKS2." -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "Зменшити розмір пристрою зберігання даних (змістити відступ даних). НЕБЕЗПЕЧНО!" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "Максимальний розмір «гарячої» ділянки повторного шифрування." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "Тип стійкості «гарячої» ділянки повторного шифрування (checksum (контрольна сума), journal (журнал), none (немає))" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "Хеш контрольних сум «гарячої» ділянки повторного шифрування" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[ПАРАМЕТР...] <дія> <параметри_дії>" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Не вказано аргумент <дія>." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Невідома дія." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "Не можна поєднувати параметри --refresh і --test-passphrase." -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "Параметр --deferred можна використовувати лише для команди закриття (close)." -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 msgid "Option --shared is allowed only for open of plain device." msgstr "Параметр --shared можна використовувати лише для відкриття незашифрованого пристрою." -#: src/cryptsetup.c:3728 src/integritysetup.c:654 +#: src/cryptsetup.c:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "Параметр --shared можна використовувати лише для дії з відкриття." -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "Параметр --persistent можна використовувати лише для дії з відкриття." -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation." msgstr "Параметр --serialize-memory-hard-pbkdf можна використовувати лише для дії з відкриття." -#: src/cryptsetup.c:3743 +#: src/cryptsetup.c:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "Параметр --persistent не можна використовувати разом із --test-passphrase." -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 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,255 +2853,259 @@ msgstr "" "Параметр --key-size можна використовувати лише для luksFormat, luksAddKey,\n" "дій open і benchmark. Щоб обмежити читання з файла ключа, скористайтеся параметром --keyfile-size=(об’єм у байтах)." -#: src/cryptsetup.c:3759 +#: src/cryptsetup.c:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "Параметр --integrity можна використовувати лише для luksFormat (LUKS2)." -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "Розмір ключа має бути кратним 8 бітам" -#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Некоректний слот ключа." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Не можна використовувати від’ємні значення для параметра." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 msgid "Only one --key-file argument is allowed." msgstr "Можна використовувати лише один аргумент --key-file." -#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "Можна використовувати лише один з параметрів --use-[u]random." -#: src/cryptsetup.c:3813 +#: src/cryptsetup.c:3835 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "Параметр --use-[u]random можна використовувати лише для дії luksFormat." -#: src/cryptsetup.c:3817 +#: src/cryptsetup.c:3839 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "Параметр --uuid можна використовувати лише для дій luksFormat і luksUUID." -#: src/cryptsetup.c:3821 +#: src/cryptsetup.c:3843 msgid "Option --align-payload is allowed only for luksFormat." msgstr "Параметр --align-payload можна використовувати лише для дії luksFormat." -#: src/cryptsetup.c:3825 +#: src/cryptsetup.c:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Некоректна специфікація розміру метаданих LUKS2." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Некоректна специфікація розміру слоту ключів LUKS2." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "Не можна одночасно використовувати параметри --align-payload і --offset." -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 msgid "Option --skip is supported only for open of plain and loopaes devices." msgstr "Підтримку параметра --skip передбачено лише для відкриття незашифрованих пристроїв та пристроїв loopaes." -#: src/cryptsetup.c:3851 +#: src/cryptsetup.c:3873 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:3879 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:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "Параметр --tcrypt-hidden не можна поєднувати з --allow-discards." -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "Підтримку параметра --veracrypt передбачено лише для пристроїв TCRYPT." -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Надано некоректний аргумент для параметра --veracrypt-pim." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "Параметр --veracrypt-pim можна використовувати лише для сумісних із VeraCrypt пристроїв." -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices." msgstr "Параметр --veracrypt-query-pim можна використовувати лише для сумісних із VeraCrypt пристроїв." -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Слід вказати специфікація слотів ключів." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "Примусові ітерації PBKDF не можна поєднувати із параметром тривалості ітерацій." -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "У цій команді не передбачено підтримки параметра розміру сектора." -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "Разом із параметром --unbound слід вказувати розмір ключа." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "Параметр --unbound можна використовувати лише з діями luksAddKey і luksDump." -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "Параметр --refresh можна використовувати лише під час дії з відкриття (open)." -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "Не вдалося вимкнути блокування метаданих." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "Некоректна специфікація розміру «гарячої» ділянки повторного шифрування." -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Некоректна специфікація розміру пристрою." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "Максимальний розмір зменшення розміру пристрою дорівнює 1 ГіБ." -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "Розмір зменшення має бути кратним до 512-байтового сектора." -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "Некоректна специфікація розміру даних." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Переповнення розміру зменшення." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "Розшифрування LUKS2 потребує параметра --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "Розмір пристрою має бути кратним до 512-байтового сектора." -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "Не можна одночасно використовувати параметри --reduce-device-size і --data-size." -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Не можна одночасно використовувати параметри --device-size і --size." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Параметри --keyslot-cipher і --keyslot-key-size має бути використано разом." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Вказано некоректний рядок солі." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, c-format msgid "Cannot create hash image %s for writing." msgstr "Не вдалося створити образ хешу %s для запису." -#: src/veritysetup.c:107 +#: src/veritysetup.c:108 #, c-format msgid "Cannot create FEC image %s for writing." msgstr "Не вдалося створити образ FEC %s для запису." -#: src/veritysetup.c:179 +#: src/veritysetup.c:182 msgid "Invalid root hash string specified." msgstr "Вказано некоректний рядок кореневого хешу." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Некоректний файл підпису %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Не вдалося прочитати файл підпису %s." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr "<пристрій_даних> <пристрій_хешу>" -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "форматувати пристрій" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr "<пристрій_даних> <пристрій_хешу> <кореневий_хеш>" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "перевірити пристрій" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr "<пристрій_даних> <назва> <пристрій_хешу> <кореневий_хеш>" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "показати стан активного пристрою" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "<пристрій_хешу>" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "показати вбудовані дані" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3102,7 +3120,7 @@ msgstr "" "<пристрій_хешу> — пристрій, на якому зберігаються дані для перевірки\n" "<кореневий_хеш> — хеш кореневого вузла на пристрої <пристрій_хешу>\n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3113,102 +3131,110 @@ msgstr "" "Типові вбудовані параметри dm-verity:\n" "\tхеш: %s, блок даних (у байтах): %u, блок хешу (у байтах): %u, розмір солі: %u, формат хешування: %u\n" -#: src/veritysetup.c:466 +#: src/veritysetup.c:471 msgid "Do not use verity superblock" msgstr "Не використовувати суперблок verity" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "Тип форматування (1 — звичайне, 0 — початкове Chrome OS)" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "номер" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Розмір блоку на пристрої даних" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Розмір блоку на пристрої хешу" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "Байти парності FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Кількість блоків у файлі даних" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "блоки" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 msgid "Path to device with error correction data" msgstr "Шлях до пристрою із даними для виправлення помилок" -#: src/veritysetup.c:472 src/integritysetup.c:549 +#: src/veritysetup.c:477 src/integritysetup.c:549 msgid "path" msgstr "шлях" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Початковий відступ на пристрої хешу" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Початковий відступ на пристрої FEC" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Алгоритм хешування" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "рядок" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Сіль" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "шістнадцятковий рядок" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Шлях до файла підпису кореневого хешу" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Перезапустити ядро, якщо виявлено пошкодження" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Запустити паніку ядра, якщо виявлено пошкодження" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Ігнорувати пошкодження, лише записати повідомлення до журналу" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Не перевіряти занулені блоки" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 msgid "Verify data block only the first time it is read" msgstr "Перевіряти блок даних лише під час його першого читання" -#: src/veritysetup.c:582 +#: src/veritysetup.c:588 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:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "Параметром --root-hash-signature можна користуватися лише для дії з відкриття." -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together." msgstr "Параметри --ignore-corruption і --restart-on-corruption не можна використовувати одночасно." +#: src/veritysetup.c:603 +msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together." +msgstr "Параметри --panic-on-corruption і --restart-on-corruption не можна використовувати одночасно." + #: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3869,3 +3895,6 @@ msgstr "" #: src/utils_luks2.c:126 msgid "Failed to write JSON file." msgstr "Не вдалося записати файл JSON." + +#~ msgid "Wrong key size." +#~ msgstr "Помилковий розмір ключа." From b86c51afebc486fbd2333e25953e468d13e45ec1 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 3 Sep 2020 19:10:02 +0200 Subject: [PATCH 040/149] Add stable version release notes. --- docs/v2.3.4-ReleaseNotes | 112 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 docs/v2.3.4-ReleaseNotes diff --git a/docs/v2.3.4-ReleaseNotes b/docs/v2.3.4-ReleaseNotes new file mode 100644 index 00000000..fb5a4113 --- /dev/null +++ b/docs/v2.3.4-ReleaseNotes @@ -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. From bd888e30a623e52043ed68fdba13b62b57d3b41f Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 3 Sep 2020 19:11:40 +0200 Subject: [PATCH 041/149] Prepare version 2.3.4. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7810f029..4c62c75a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.67]) -AC_INIT([cryptsetup],[2.3.4-git]) +AC_INIT([cryptsetup],[2.3.4]) dnl library version from ..[-] LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-) From 569b485d025b02be85728c87ad47cd2debffdebf Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 3 Sep 2020 20:40:54 +0200 Subject: [PATCH 042/149] Update Readme.md. --- README.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2d69ceba..b4130672 100644 --- a/README.md +++ b/README.md @@ -44,19 +44,13 @@ Download -------- All release tarballs and release notes are hosted on [kernel.org](https://www.kernel.org/pub/linux/utils/cryptsetup/). -**The latest stable cryptsetup version is 2.3.2** - * [cryptsetup-2.3.2.tar.xz](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.2.tar.xz) - * Signature [cryptsetup-2.3.2.tar.sign](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.2.tar.sign) +**The latest stable cryptsetup version is 2.3.4** + * [cryptsetup-2.3.4.tar.xz](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.4.tar.xz) + * Signature [cryptsetup-2.3.4.tar.sign](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.4.tar.sign) _(You need to decompress file first to check signature.)_ - * [Cryptsetup 2.3.2 Release Notes](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/v2.3.2-ReleaseNotes). + * [Cryptsetup 2.3.4 Release Notes](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/v2.3.4-ReleaseNotes). Previous versions - * [Version 2.3.1](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.1.tar.xz) - - [Signature](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.1.tar.sign) - - [Release Notes](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/v2.3.1-ReleaseNotes). - * [Version 2.2.2](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.2/cryptsetup-2.2.2.tar.xz) - - [Signature](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.2/cryptsetup-2.2.2.tar.sign) - - [Release Notes](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.2/v2.2.2-ReleaseNotes). * [Version 2.0.6](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/cryptsetup-2.0.6.tar.xz) - [Signature](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/cryptsetup-2.0.6.tar.sign) - [Release Notes](https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/v2.0.6-ReleaseNotes). From b56a450a314e121dcdc391016ef1ff2583800685 Mon Sep 17 00:00:00 2001 From: Roland Illig Date: Sat, 19 Sep 2020 17:21:51 +0200 Subject: [PATCH 043/149] po: update de.po (from translationproject.org) --- po/de.po | 977 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 503 insertions(+), 474 deletions(-) diff --git a/po/de.po b/po/de.po index 516dd8ad..fb9a2a61 100644 --- 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.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-15 15:19+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-05 07:17+0200\n" "Last-Translator: Roland Illig \n" "Language-Team: German \n" "Language: de\n" @@ -19,61 +19,62 @@ msgstr "" "X-Generator: Poedit 2.3.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/libdevmapper.c:399 +#: lib/libdevmapper.c:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "Verlangter »deferred«-Schalter wird nicht unterstützt." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, 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:1547 msgid "Unknown dm target type." msgstr "Unbekannte Art des dm-Ziels." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 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:1686 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:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "»Discard/TRIM« wird nicht unterstützt." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 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:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Fehler beim Abfragen des »dm-%s«-Segments." @@ -178,7 +179,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Gerät »%s« ist nicht aktiv." @@ -201,7 +202,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Nicht unterstützte Sektorengröße für Verschlüsselung." @@ -249,7 +250,7 @@ msgstr "Warnung: Größe der LUKS2-Metadaten wurde auf % geändert.\n" msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "Warnung: Größe des LUKS2-Schlüsselfachbereichs wurde auf % Bytes geändert.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -412,8 +413,8 @@ msgstr "Das Gerät »%s« kann nicht aus dem Ruhezustand aufgeweckt werden." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Der Laufwerksschlüssel passt nicht zum Laufwerk." @@ -430,7 +431,7 @@ msgstr "Neues Schlüsselfach konnte nicht ausgewechselt werden." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Schlüsselfach %d ist nicht aktiv." @@ -443,7 +444,7 @@ msgstr "Geräteheader und Datenbereich überlappen sich." 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/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Fehler beim Zugriff auf die Sperre zur Wiederverschlüsselung." @@ -452,106 +453,106 @@ msgstr "Fehler beim Zugriff auf die Sperre zur Wiederverschlüsselung." msgid "LUKS2 reencryption recovery failed." msgstr "Fehler beim Wiederherstellen der LUKS2-Wiederverschlüsselung." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Das Gerät »%s« existiert bereits." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 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:4410 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:4417 msgid "Root hash signature required." msgstr "Signatur des Stammhashes erforderlich." -#: lib/setup.c:4421 +#: lib/setup.c:4426 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "Gerät »%s« wird gerade benutzt." -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "Ungültiges Gerät »%s«." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Laufwerks-Schlüsselpuffer zu klein." -#: lib/setup.c:4640 +#: lib/setup.c:4645 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:4662 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:4664 #, 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:4870 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:5195 #, 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:5480 #, 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:5777 #, 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:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "Fehler beim Initialisieren der LUKS2-Schlüsselfach-Parameter." -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "Globale Speicherzugriffsserialisierungssperre konnte nicht angefordert werden." @@ -611,40 +612,45 @@ msgstr "Gerät »%s« existiert nicht oder Zugriff verweigert." msgid "Device %s is not compatible." msgstr "Gerät »%s« ist nicht kompatibel." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Gerät »%s« ist zu klein. Mindestens % Bytes erforderlich." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "Gerät »%s« hat die Größe 0." @@ -756,7 +762,7 @@ msgstr "Verschlüsselungsverfahren sollte im Format [Verfahren]-[Modus]-[IV] sei #: 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Fehler beim Schreiben auf Gerät »%s«, Zugriff verweigert." @@ -779,7 +785,7 @@ msgstr "E/A-Fehler beim Verschlüsseln des Schlüsselfachs." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -802,42 +808,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Fehler beim Einlesen der Header-Backupdatei »%s«." @@ -859,7 +865,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -913,7 +919,7 @@ msgstr "Fehler beim Reparieren." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "Keine bekannten Probleme im LUKS-Header erkannt." @@ -932,8 +938,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Falsches LUKS-UUID-Format angegeben." @@ -1003,11 +1009,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Stellen Sie sicher, dass das Kernelmodul »algif_skcipher« geladen ist." @@ -1020,16 +1026,16 @@ 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." @@ -1052,73 +1058,73 @@ msgstr "Unerwartete Zeichenkette »%s« beim Parsen des Volume Master Key gefund 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:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Fehler beim Lesen der BITLK-Signatur von »%s«." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK Version 1 wird derzeit nicht unterstützt." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Ungültige oder unbekannte Bootsignatur für BITLK-Gerät." -#: lib/bitlk/bitlk.c:502 +#: 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:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Nicht unterstützte Sektorengröße %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "Fehler beim Lesen des BITLK-Headers von »%s«." -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, 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:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Unbekannte oder nicht unterstützte Verschlüsselungsart." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Fehler beim Lesen der BITLK-Metadaten von »%s«." -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Diese Operation wird nicht unterstützt." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Falsche Schlüsselgröße." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Unerwartete Größe des Datenschlüssels." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 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:986 +#: lib/bitlk/bitlk.c:994 #, 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:1068 +#: lib/bitlk/bitlk.c:1076 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:1204 +#: lib/bitlk/bitlk.c:1212 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:1208 +#: lib/bitlk/bitlk.c:1216 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." @@ -1269,8 +1275,8 @@ msgstr "Kernel unterstützt dm-integrity-Zuordnung nicht." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Fehler beim exklusiven Schreibzugriff auf Gerät »%s«." @@ -1296,40 +1302,40 @@ msgstr "Verlangter Daten-Offset ist zu klein." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "WARNING: Der Schlüsselfach-Bereich (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1339,7 +1345,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1349,50 +1355,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 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:2165 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:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 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:2349 msgid "Unmet LUKS2 requirements detected." msgstr "Unerfüllte LUKS2-Anforderungen entdeckt." -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 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:2359 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." @@ -1430,7 +1436,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." @@ -1680,69 +1686,69 @@ msgstr "Kein freies Fach für Token." msgid "Failed to create builtin token %s." msgstr "Fehler beim Erzeugen des eingebauten Tokens »%s«." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Kein bekanntes Verschlüsselungsmuster entdeckt." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Vorgang abgebrochen.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Die Option »--key-file« muss angegeben werden." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "VeraCrypt-PIM eingeben: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Ungültiger PIM-Wert: Formatfehler." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Ungültiger PIM-Wert: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 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:480 msgid "No device header detected with this passphrase." msgstr "Kein Geräte-Header mit dieser Passphrase gefunden." -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, 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:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1754,56 +1760,56 @@ msgstr "" "daher ausschließlich an einem sicheren Ort und verschlüsselt\n" "aufbewahrt werden." -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Benchmark unterbrochen." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s (nicht zutreffend)\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s (nicht zutreffend)\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Das Ergebnis des Benchmarks ist nicht zuverlässig." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, 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:987 #, 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,15 +1817,15 @@ 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "N/A" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1827,19 +1833,19 @@ msgstr "" "Es scheint, dass das Gerät keine Wiederherstellung der Wiederverschlüsselung braucht.\n" "Trotzdem fortsetzen?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Wirklich mit der Wiederherstellung der LUKS2-Wiederverschlüsselung fortfahren?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 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:1153 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:1172 src/integritysetup.c:146 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 +1854,104 @@ 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:1194 src/integritysetup.c:168 #, 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:1243 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:1248 src/cryptsetup.c:1308 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:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Kein bekanntes Integritätsspezifikationsmuster entdeckt." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Fehler beim Festlegen der PBKDF-Parameter." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 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:1462 src/cryptsetup.c:1773 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Geben Sie irgendeine verbleibende Passphrase ein: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 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:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Geben Sie irgendeine bestehende Passphrase ein: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 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:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Geben Sie die neue Passphrase ein: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 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:1963 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:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1957,12 +1963,12 @@ msgstr "" "daher ausschließlich an einem sicheren Ort und verschlüsselt\n" "aufbewahrt werden." -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, 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:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1971,30 +1977,30 @@ 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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Option »--header-backup-file« muss angegeben werden." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, 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:2281 #, 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:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Unbekannte Art »%s« des Metadaten-Geräts." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -2003,95 +2009,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:2355 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:2392 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:2410 #, c-format msgid "Device is already %s type." msgstr "Das Gerät hat bereits den Typ »%s«." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, 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:2421 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:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Token %d ist ungültig." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Token %d ist in Benutzung." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "Token %d wird gerade nicht verwendet." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Token konnte nicht aus der Datei importiert werden." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "Ungültige Token-Operation »%s«." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, 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:2686 #, 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:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2104,233 +2110,233 @@ 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:2768 msgid "Invalid LUKS device type." msgstr "Ungültige LUKS-Geräteart." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Der Wert von --reduce-device-size wird auf das Doppelte von --offset % (in Sektoren) angepasst.\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 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:2813 #, 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:2828 #, 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:2830 src/cryptsetup.c:2837 #, 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:2901 #, 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:3065 src/cryptsetup.c:3071 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:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, 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:3108 #, 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:3283 msgid "Command requires device as argument." msgstr "Dieser Befehl benötigt den Gerätenamen als Argument." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 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:3339 msgid "LUKS2 device is not in reencryption." msgstr "LUKS2-Gerät wird derzeit nicht wiederverschlüsselt." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "Gerät als ö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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "Gerät schließen (Zuordnung entfernen)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "Größe des aktiven Geräts ändern" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "Gerätestatus anzeigen" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher ]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "Versuchen, die Metadaten auf dem Datenträger zu reparieren" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "LUKS2-Gerät wiederverschlüsseln" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 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:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "Zwischen den Formaten LUKS und LUKS2 umwandeln" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "Ein LUKS-Gerät formatieren" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 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:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "Löscht Schlüssel mit Nummer vom LUKS-Gerät" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "UUID des LUKS-Geräts ausgeben" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "Testet auf Header einer LUKS-Partition" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "LUKS-Partitionsinformationen ausgeben" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "TCRYPT-Geräteinformationen ausgeben" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "BITLK-Geräteinformationen ausgeben" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "LUKS-Gerät aus dem Ruhezustand aufwecken" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 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:3390 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:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "LUKS2-Token manipulieren" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2338,7 +2344,7 @@ msgstr "" "\n" " ist eine von:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2350,7 +2356,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:3419 #, c-format msgid "" "\n" @@ -2365,7 +2371,7 @@ msgstr "" " ist die Nummer des zu verändernden LUKS-Schlüsselfachs\n" " optionale Schlüsseldatei für den neuen Schlüssel der »luksAddKey«-Aktion\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2374,7 +2380,7 @@ msgstr "" "\n" "Vorgegebenes festeingebautes Metadatenformat ist %s (für luksFormat-Aktion).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2391,7 +2397,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:3442 #, c-format msgid "" "\n" @@ -2406,444 +2412,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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Diese Hilfe anzeigen" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Kurze Aufrufsyntax anzeigen" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Paketversion ausgeben" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Hilfe-Optionen:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Zeigt Debugging-Meldungen an" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Schlüssel aus einer Datei lesen" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Laufwerks-(Master-)Schlüssel aus Datei lesen." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITS" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "Bytes" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 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:3519 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:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SEKTOREN" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 msgid "The start offset in the backend device" msgstr "Der Startoffset im Backend-Gerät" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 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:3526 msgid "Create a readonly mapping" msgstr "Eine schreibgeschützte Zuordnung erzeugen" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Nicht nach Bestätigung fragen" # XXX -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "sek" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Nutzdaten an Grenzen von Sektoren ausrichten - für luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "/dev/urandom zum Generieren des Laufwerksschlüssels benutzen" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 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:3536 src/veritysetup.c:482 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:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Gerät oder Datei mit separatem LUKS-Header" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "Gerät nicht aktivieren, nur Passphrase überprüfen" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Versteckten Header benutzen (verstecktes TCRYPT-Gerät)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 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:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Backup-(Zweit-)-TCRYPT-Header benutzen" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Auch nach VeryCrypt-kompatiblen Geräten suchen" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 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:3545 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:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "Passwort-Qualitätsprüfung deaktivieren (wenn sie aktiviert ist)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 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:3549 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:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "Arbeitswarteschlangen von dm-crypt umgehen und Leseanfragen synchron abarbeiten" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "Arbeitswarteschlangen von dm-crypt umgehen und Schreibanfragen synchron abarbeiten" + +#: src/cryptsetup.c:3552 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:3553 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:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "msek" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "PBKDF-Speicherkostengrenze" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "Kilobytes" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "PBKDF-Parallelitätskosten" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "Threads" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "PBKDF-Iterationskosten (erzwungen, deaktiviert Benchmark)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Schlüsselfach-Priorität: ignore (ignorieren), normal, prefer (bevorzugen)" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Dateisperrung von Metadaten auf der Platte deaktivieren" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 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:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Datenintegritätsalgorithmus (nur LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 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:3564 src/integritysetup.c:547 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:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Ineffizientes Altlasten-Padding verwenden (für alte Kernel)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 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:3567 msgid "Token number (default: any)" msgstr "Token-Nummer (Vorgabe: eine beliebige)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Schlüsselbeschreibung" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Verschlüsselungs-Sektorgröße (Vorgabe: 512 Bytes)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 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:3571 msgid "Set activation flags persistent for device" msgstr "Aktivierungsschalter für Gerät permanent festlegen" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Beschriftung für das LUKS2-Gerät festlegen" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 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:3574 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:3575 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:3576 msgid "LUKS2 header metadata area size" msgstr "Größe des Bereichs für LUKS2-Header-Metadaten" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 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:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Gerät mit neuen Parametern auffrischen (reaktivieren)" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 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:3580 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:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "LUKS2-Gerät verschlüsseln (direkt am Ort)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "LUKS2-Gerät entschlüsseln (Verschlüsselung entfernen)." -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "LUKS2-Wiederverschlüsselung nur in Metadaten beginnen." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 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:3585 src/cryptsetup_reencrypt.c:1635 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:3586 msgid "Maximal reencryption hotzone size." msgstr "Maximalgröße der Wiederverschlüsselungs-Hotzone." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 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:3588 msgid "Reencryption hotzone checksums hash" msgstr "Hash für Prüfsummen der Wiederverschlüsselungs-Hotzone" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[OPTION...] " -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Argument fehlt." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Unbekannte Aktion." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 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:3740 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:3745 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:3750 src/integritysetup.c:654 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:3755 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:3760 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:3765 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:3775 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,255 +2866,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:3781 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:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Schlüsselfach ist ungültig." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Negative Zahl für die Option nicht erlaubt." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 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:3856 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:3860 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:3866 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:3873 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:3879 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:3884 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:3889 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:3895 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:3899 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:3907 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:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Das Schlüsselfach muss angegeben werden." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 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:3939 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:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "Die Option »--unbound« erfordert die Schlüsselgröße." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 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:3971 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:3982 msgid "Cannot disable metadata locking." msgstr "Fehler beim Deaktivieren der Metadaten-Dateisperre." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 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.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Ungültige Angabe der Gerätegröße." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 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:4006 src/cryptsetup_reencrypt.c:1733 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:4011 msgid "Invalid data size specification." msgstr "Ungültige Angabe der Datengröße." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Überlauf bei der Verringerungsgröße." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "LUKS2-Entschlüsselung erfordert die Option --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 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:4028 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:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Die Optionen --device-size und --size können nicht kombiniert werden." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Die Optionen --keyslot-cipher und --keyslot-keysize können nur zusammen benutzt werden." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Ungültiger Salt-String angegeben." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 msgid "Invalid root hash string specified." msgstr "Ungültiger Root-Hash-String angegeben." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Ungültige Signaturdatei »%s«." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Fehler beim Einlesen der Signaturdatei »%s«." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "Gerät formatieren" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " " -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "Gerät verifizieren" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " " -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "Status der aktiven Geräte anzeigen" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "Auf dem Datenträger gespeicherte Informationen anzeigen" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3115,7 +3133,7 @@ msgstr "" " ist das Gerät, das die Verifikationsdaten enthält\n" " ist der Hash des Rootknotens auf \n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3126,102 +3144,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "Verity-Superblock nicht benutzen" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 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:472 msgid "number" msgstr "Zahl" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Blockgröße auf dem Datengerät" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Blockgröße auf dem Hash-Gerät" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "FEC-Paritätsbytes" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 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:476 msgid "blocks" msgstr "Blöcke" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "Pfad" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Start-Offset auf dem Hash-Gerät" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Start-Offset auf dem FEC-Gerät" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Hash-Algorithmus" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "Zeichenkette" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Salt" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "Hex-Zeichenkette" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Pfad zur Signaturdatei des Stammhashes" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Kernel neustarten wenn Beschädigung festgestellt wird" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Kernel-Abbruch, wenn Beschädigung festgestellt wird" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Beschädigung ignorieren, nur mitloggen" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Ausgenullte Blöcke nicht überprüfen" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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:588 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:593 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:598 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/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3883,6 +3909,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "JSON-Datei konnte nicht geschrieben 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." From 8360a85169e8dfdd8d86db052e85a4fec9deb864 Mon Sep 17 00:00:00 2001 From: Antonio Ceballos Date: Sat, 19 Sep 2020 17:21:51 +0200 Subject: [PATCH 044/149] po: update es.po (from translationproject.org) --- po/es.po | 977 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 503 insertions(+), 474 deletions(-) diff --git a/po/es.po b/po/es.po index e2fb940e..ff06f68c 100644 --- a/po/es.po +++ b/po/es.po @@ -73,10 +73,10 @@ # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-05-16 08:46+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-09-04 07:00+0200\n" "Last-Translator: Antonio Ceballos \n" "Language-Team: Spanish \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:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "El indicador diferido solicitado no está disponible." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, 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:1547 msgid "Unknown dm target type." msgstr "Tipo de objetivo dm desconocido." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 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:1686 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:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Descartar/TRIM no disponible." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 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:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "No se ha podido consultar el segmento de dm-%s." @@ -245,7 +246,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "El dispositivo %s no está activo." @@ -268,7 +269,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Tamaño de sector de cifrado no admitido." @@ -316,7 +317,7 @@ msgstr "ATENCIÓN: el tamaño de los metadatos LUKS2 ha cambiado a % byt msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "ATENCIÓN: el tamaño de la zona de ranuras de claves LUKS2 ha cambiado a % bytes.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -479,8 +480,8 @@ msgstr "La reanudación no está disponible para el dispositivo %s." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "La clave de volumen no corresponde a este volumen." @@ -497,7 +498,7 @@ msgstr "No se ha logrado intercambiar la nueva ranura de claves." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "La ranura de claves %d no está activa." @@ -510,7 +511,7 @@ msgstr "La cabecera del dispositivo se solapa con la zona de datos." 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/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "No se ha podido conseguir el bloqueo de recifrado." @@ -519,106 +520,106 @@ msgstr "No se ha podido conseguir el bloqueo de recifrado." 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:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "El dispositivo %s ya existe." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 msgid "Incorrect volume key specified for plain device." msgstr "Clave de volumen incorrecta para dispositivo no cifrado." -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "«Hash» raíz incorrecta para dispositivo «verity»." -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "Se requiere la firma «hash» raíz." -#: lib/setup.c:4421 +#: lib/setup.c:4426 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, 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:4521 #, c-format msgid "Invalid device %s." msgstr "Dispositivo inválido %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 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:4645 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:4662 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:4664 #, 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:4870 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:5195 #, 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:5480 #, 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:5777 #, 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:5850 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:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 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." @@ -678,40 +679,45 @@ msgstr "El dispositivo %s no existe o el acceso al mismo ha sido denegado." msgid "Device %s is not compatible." msgstr "El dispositivo %s no es compatible." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "El dispositivo %s es demasiado pequeño. Se necesitan % bytes como mínimo." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "El dispositivo %s tiene tamaño cero." @@ -823,7 +829,7 @@ msgstr "La especificación de cifrado debería estar en formato [cipher]-[mode]- #: 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "No se puede escribir en el dispositivo %s; permiso denegado." @@ -846,7 +852,7 @@ msgstr "Error de entrada/salida mientras se cifraba una ranura de claves." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -869,42 +875,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, 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 +932,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -979,7 +985,7 @@ msgstr "La reparación ha fallado." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "No se ha detectado ningún problema en la cabecera LUKS." @@ -998,8 +1004,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "El formato de UUID LUKS proporcionado es incorrecto." @@ -1068,11 +1074,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:1022 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:1024 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,16 +1091,16 @@ 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." @@ -1117,73 +1123,73 @@ msgstr "Se ha encontrado una cadena no esperada ('%s') mientras se analizaba la 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:478 +#: lib/bitlk/bitlk.c:479 #, 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:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK versión 1 no está admitido actualmente." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 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:502 +#: 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:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Tamaño de sector no admitido %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, 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:542 +#: lib/bitlk/bitlk.c:548 #, 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:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Tipo de cifrado desconocido o no admitido." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, 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:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Esta operación no está disponible." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Tamaño de clave incorrecto." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Tamaño de datos de la clave no esperado." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 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:986 +#: lib/bitlk/bitlk.c:994 #, 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:1068 +#: lib/bitlk/bitlk.c:1076 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:1204 +#: lib/bitlk/bitlk.c:1212 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:1208 +#: lib/bitlk/bitlk.c:1216 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»." @@ -1334,8 +1340,8 @@ msgstr "El núcleo no dispone de asociación «dm-integrity»." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "No se ha podido adquirir el bloqueo de escritura del dispositivo %s." @@ -1361,40 +1367,40 @@ msgstr "El desplazamiento de datos solicitado es demasiado pequeño." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "ATENCIÓN: la zona de ranuras de claves (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1405,7 +1411,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1415,50 +1421,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 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:2165 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:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 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:2349 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:2357 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:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Operación incompatible con dispositivo marcado para recifrado LUKS2. Se aborta." @@ -1496,7 +1502,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." @@ -1746,69 +1752,69 @@ msgstr "No hay ninguna ranura de «token» libre." msgid "Failed to create builtin token %s." msgstr "No se ha podido crear el «token» interno %s." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 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:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Operación abortada.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Es necesaria la opción --key-file." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Introduzca PIM de VeraCrypt: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Valor de PIM no válido: error de análisis." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Valor de PIM no válido: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Valor de PIM no válido: fuera de rango." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 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:549 #, 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:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1818,68 +1824,68 @@ 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:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Comparativa interrumpida." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s N/A\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s N/A\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "El resultado de la comparativa no es fiable." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algoritmo | Clave | Cifrado | Descifrado\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algoritmo | Clave | Cifrado | Descifrado\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "/N/A" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1887,19 +1893,19 @@ msgstr "" "Parece que el dispositivo no necesita recuperación del recifrado.\n" "¿Desea continuar de todos modos?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 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:1110 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:1153 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:1172 src/integritysetup.c:146 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 +1913,104 @@ 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:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "No se puede desactivar el dispositivo temporal %s." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 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:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Opciones de tamaño de metadatos LUKS2 no admitidas." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 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:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "No se han podido establecer los parámetros pbkdf." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 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:1462 src/cryptsetup.c:1773 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Introduzca cualquier frase contraseña que quede: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 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:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Introduzca cualquier frase contraseña que exista: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 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:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Introduzca una nueva frase contraseña: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 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:1963 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:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -2014,12 +2020,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:2078 #, 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:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -2027,30 +2033,30 @@ 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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Es necesaria la opción --header-backup-file." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, 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:2281 #, 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:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Tipo de dispositivo de metadatos %s no reconocido." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -2059,95 +2065,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:2355 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:2392 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:2410 #, c-format msgid "Device is already %s type." msgstr "El dispositivo ya es de tipo %s." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, 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:2421 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:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, 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:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "El «token» %d está en uso." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "El «token» %d no está en uso." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "No se ha podido importar el «token» del fichero." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "Operación de «token» no válida %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, 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:2686 #, 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:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2161,233 +2167,233 @@ 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:2768 msgid "Invalid LUKS device type." msgstr "Tipo de dispositivo LUKS no válido." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Ajustando el valor de --reduce-device-size al doble de --offset % (sectores).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "El cifrado solo puede hacerse con formato LUKS2." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, 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:2830 src/cryptsetup.c:2837 #, 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:2901 #, 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:3065 src/cryptsetup.c:3071 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:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, 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:3108 #, 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:3283 msgid "Command requires device as argument." msgstr "Esta orden necesita un dispositivo como argumento." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 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:3339 msgid "LUKS2 device is not in reencryption." msgstr "El dispositivo LUKS2 no está en recifrado." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr " [--type []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "abrir el dispositivo como " -#: 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "cerrar dispositivo (eliminar asociación)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "cambiar el tamaño del dispositivo activo" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "mostrar el estado del dispositivo" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cypher ]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "intentar reparar metadatos en disco" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "recifrar dispositivo LUKS2" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 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:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "convertir formato LUKS de/en LUKS2" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "da formato a un dispositivo LUKS" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 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:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "borra la clave con el número del dispositivo LUKS" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "imprimir el UUID del dispositivo LUKS" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "comprueba si tiene cabecera de partición LUKS" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "volcar información sobre la partición LUKS" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "volcar información sobre el dispositivo TCRYPT" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "volcar información sobre el dispositivo BITLK" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "Reanudar el dispositivo LUKS suspendido." -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 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:3390 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:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Manipular «tokens» LUKS2" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2395,7 +2401,7 @@ msgstr "" "\n" " es una de:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2407,7 +2413,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:3419 #, c-format msgid "" "\n" @@ -2422,7 +2428,7 @@ msgstr "" " es el número de la ranura de claves que se va a modificar\n" " fichero de claves opcional para la nueva clave para la acción 'luksAddKey'\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2431,7 +2437,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:3431 #, c-format msgid "" "\n" @@ -2448,7 +2454,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:3442 #, c-format msgid "" "\n" @@ -2463,443 +2469,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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 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.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 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.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Imprimir versión del paquete" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Opciones de ayuda:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Mostrar mensajes de depuración" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Leer la clave de un fichero." -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Leer la clave (maestra) del volumen desde fichero." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITS" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "bytes" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 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:3519 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:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SECTORES" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 msgid "The start offset in the backend device" msgstr "iPosición de comienzo en el dispositivo «backend»" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 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:3526 msgid "Create a readonly mapping" msgstr "Crear una asignación alatoria" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "No pedir confirmación" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "s" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Alinear los datos a bordes de sector - para luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 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:3535 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:3536 src/veritysetup.c:482 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:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Dispositivo o fichero con cabecera LUKS separada" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "No activar dispositivo; comprobar frase contraseña solamente" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Utilizar cabecera oculta (dispositivo TCRYPT oculto)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 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:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Utilizar la cabecera TCRYPT de respaldo (secundaria)" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 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:3544 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:3545 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:3546 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:3547 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:3548 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:3549 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:3550 +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:3551 +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:3552 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:3553 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:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ms" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilobytes" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Coste del paralelismo PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "hilos" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 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:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Prioridad de la ranura de claves: ignorada, normal, preferente" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Desactiva el bloqueo de metadatos en disco" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 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:3562 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:3563 src/integritysetup.c:573 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:3564 src/integritysetup.c:547 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:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Utilizar relleno obsoleto ineficiente (núcleos antiguos)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 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:3567 msgid "Token number (default: any)" msgstr "Número de «token» (predefinido: cualquiera)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Descripción de la clave" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Tamaño de sector de cifrado (predeterminado: 512 bytes)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 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:3571 msgid "Set activation flags persistent for device" msgstr "Establecer indicadores de activación persistentes para el dispositivo" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Poner etiqueta al dispositivo LUKS2" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Poner etiqueta de subsistema al dispositivo LUKS2" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 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:3575 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:3576 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:3577 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:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Refrescar (reactivar) el dispositivo con los nuevos parámetros" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 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:3580 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:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Crifrar el dispositivo LUKS2 (cifrado in situ)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Descifrar el dispositivo LUKS2 (elimina cifrado)" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Inicializar solamente recifrado LUKS2 de los metadatos." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "Reanudar solamente recifrado LUKS2 inicializado." -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 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:3586 msgid "Maximal reencryption hotzone size." msgstr "Tamaño de zona activa de recifrado máximo." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 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:3588 msgid "Reencryption hotzone checksums hash" msgstr "«Hash» de suma de comprobación de zona activa de recifrado" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[OPCIÓN...] " -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "El argumento no se ha proporcionado." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Acción desconocida." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 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:3740 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:3745 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:3750 src/integritysetup.c:654 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:3755 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:3760 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:3765 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:3775 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,255 +2921,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:3781 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:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "La ranura de claves no es válida." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 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:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 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:3856 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:3860 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:3866 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:3873 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:3879 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:3884 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:3889 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:3895 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:3899 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:3907 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:3911 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:3918 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:3923 src/cryptsetup.c:3961 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:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 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:3939 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:3951 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:3956 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:3966 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:3971 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:3982 msgid "Cannot disable metadata locking." msgstr "No se puede desactivar el bloqueo de metadatos." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 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.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 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:4003 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:4006 src/cryptsetup_reencrypt.c:1733 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:4011 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:4016 msgid "Reduce size overflow." msgstr "Desbordamiento del tamaño de la reducción." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "El descifrado LUKS2 requiere la opción --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 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:4028 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:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Las opciones --device-size y --size no pueden combinarse." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Las opciones --keyslot-cipher y --keyslot-key-size deben utilizarse juntas." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "La cadena «salt» especificada no es válida." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 msgid "Invalid root hash string specified." msgstr "La cadena «hash» raíz especificada no es válida." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Fichero de firmas inválido %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, 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:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "dar formato al dispositivo" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " <«hash»_raíz>" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "verificar dispositivo" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " <«hash»_raíz>" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "mostrar el estado del dispositivo activo" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "mostrar información sobre el disco" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3170,7 +3188,7 @@ msgstr "" " 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:428 #, c-format msgid "" "\n" @@ -3181,102 +3199,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "No utilizar superbloque «verity»" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 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:472 msgid "number" msgstr "número" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Tamaño de bloque en el dispositivo de datos" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Tamaño de bloque en el dispositivo «hash»" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "Bytes de paridad FEC" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 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:476 msgid "blocks" msgstr "bloques" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "ruta" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Posición inicial en el dispositivo «hash»" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Posición inicial en el dispositivo FEC" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Algoritmo «hash»" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "cadena" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "«Salt»" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "cadena hexadecimal" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Ruta al fichero de firmas «hash» raíz" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Reiniciar el núcleo si se detecta corrupción" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Poner en pánico al núcleo si se detecta corrupción" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Ignorar corrupción, tomar nota únicamente" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "No verificar bloques con zeros" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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:588 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:593 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:598 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/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3938,6 +3964,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "No se ha podido escribir el fichero JSON." +#~ 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." From 513e88fd774f7227f24deef394706984897ad371 Mon Sep 17 00:00:00 2001 From: Antonio Ceballos Date: Sat, 17 Oct 2020 12:53:20 +0200 Subject: [PATCH 045/149] po: update es.po (from translationproject.org) --- po/es.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/es.po b/po/es.po index ff06f68c..76ea03e7 100644 --- a/po/es.po +++ b/po/es.po @@ -76,7 +76,7 @@ msgstr "" "Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" "POT-Creation-Date: 2020-08-27 21:34+0200\n" -"PO-Revision-Date: 2020-09-04 07:00+0200\n" +"PO-Revision-Date: 2020-10-12 19:33+0200\n" "Last-Translator: Antonio Ceballos \n" "Language-Team: Spanish \n" "Language: es\n" @@ -3815,7 +3815,7 @@ msgstr "AVISO: El dispositivo %s ya contiene una firma de partición '%s'.\n" #: src/utils_tools.c:483 #, 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 msgid "Failed to initialize device signature probes." From 8dbb72e296add8d04d769aac58b591dbed141081 Mon Sep 17 00:00:00 2001 From: Josef Andersson Date: Sat, 15 Aug 2020 11:30:09 +0200 Subject: [PATCH 046/149] po: update sv.po (from translationproject.org) --- po/sv.po | 2588 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 1680 insertions(+), 908 deletions(-) diff --git a/po/sv.po b/po/sv.po index 62bc29f9..c475db70 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,79 +1,84 @@ # 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 , 2009. -# Josef Andersson , 2016, 2017, 2019. +# Josef Andersson , 2016, 2017, 2019, 2020 # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.1.0\n" +"Project-Id-Version: cryptsetup 2.3.3-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2019-01-26 19:02+0100\n" -"PO-Revision-Date: 2019-05-17 16:51+0200\n" +"POT-Creation-Date: 2020-05-15 10:45+0200\n" +"PO-Revision-Date: 2020-06-10 11:00+0200\n" "Last-Translator: Josef Andersson \n" -"Language-Team: Swedish \n" +"Language-Team: Swedish \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:336 +#: lib/libdevmapper.c:399 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:339 +#: lib/libdevmapper.c:402 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:1010 +#: lib/libdevmapper.c:1131 msgid "Requested deferred flag is not supported." msgstr "Begärd flagga deferred stöds inte." -#: lib/libdevmapper.c:1077 +#: lib/libdevmapper.c:1198 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "DM-UUID för enheten %s förkortades." -#: lib/libdevmapper.c:1486 +#: lib/libdevmapper.c:1520 +msgid "Unknown dm target type." +msgstr "Okänd måltyp dm." + +#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 msgid "Requested dm-crypt performance options are not supported." msgstr "Begärd flagga för dm-crypt-prestanda stöds inte." -#: lib/libdevmapper.c:1493 +#: lib/libdevmapper.c:1630 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:1497 +#: lib/libdevmapper.c:1634 msgid "Requested dm-verity FEC options are not supported." msgstr "Begärd flagga dm-verity FEC stöds inte." -#: lib/libdevmapper.c:1501 +#: lib/libdevmapper.c:1638 msgid "Requested data integrity options are not supported." msgstr "Begärd flagga för dataintegritet stöds inte." -#: lib/libdevmapper.c:1503 +#: lib/libdevmapper.c:1640 msgid "Requested sector_size option is not supported." msgstr "Begärd flagga sector_size stöds inte." -#: lib/libdevmapper.c:1508 +#: lib/libdevmapper.c:1645 msgid "Requested automatic recalculation of integrity tags is not supported." msgstr "Begärd automatisk beräkning av integritetstaggar stöds inte." -#: lib/libdevmapper.c:1534 -msgid "Requested dmcrypt performance options are not supported." -msgstr "Begärda flaggor för dmcrypt-prestanda stöds inte." - -#: lib/libdevmapper.c:1537 +#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685 +#: lib/luks2/luks2_json_metadata.c:2160 msgid "Discard/TRIM is not supported." msgstr "Discard/TRIM stöds inte." -#: lib/libdevmapper.c:2413 +#: lib/libdevmapper.c:1653 +msgid "Requested dm-integrity bitmap mode is not supported." +msgstr "Begärt dm-integrity bitmap-läge stöds inte." + +#: lib/libdevmapper.c:2607 #, c-format msgid "Failed to query dm-%s segment." msgstr "Misslyckades med att läsa dm-%s-segment." -#: lib/random.c:80 +#: lib/random.c:75 msgid "" "System is out of entropy while generating volume key.\n" "Please move mouse or type some text in another window to gather some random events.\n" @@ -81,489 +86,569 @@ msgstr "" "Systemet fick slut på entropi under generering av volymnyckeln.\n" "Flytta musen eller skriv in text i ett annat fönster för att samla några slumpmässiga händelser.\n" -#: lib/random.c:84 +#: lib/random.c:79 #, c-format msgid "Generating key (%d%% done).\n" msgstr "Genererar nyckel (%d%% done).\n" -#: lib/random.c:170 +#: lib/random.c:165 msgid "Running in FIPS mode." msgstr "Kör i FIPS-läge." -#: lib/random.c:176 +#: lib/random.c:171 msgid "Fatal error during RNG initialisation." msgstr "Ödesdigert fel under RNG-initiering." -#: lib/random.c:213 +#: lib/random.c:208 msgid "Unknown RNG quality requested." msgstr "Okänd RNG-kvalitet begärd." -#: lib/random.c:218 +#: lib/random.c:213 msgid "Error reading from RNG." msgstr "Fel vid läsning från RNG." -#: lib/setup.c:214 +#: lib/setup.c:229 msgid "Cannot initialize crypto RNG backend." msgstr "Det går inte att initiera RNG-krypteringsbakände." -#: lib/setup.c:220 +#: lib/setup.c:235 msgid "Cannot initialize crypto backend." msgstr "Det går inte att initiera krypteringsbakände." -#: lib/setup.c:251 lib/setup.c:1899 lib/verity/verity.c:123 +#: lib/setup.c:266 lib/setup.c:2046 lib/verity/verity.c:119 #, c-format msgid "Hash algorithm %s not supported." msgstr "Hashalgoritmen %s stöds inte." -#: lib/setup.c:254 lib/loopaes/loopaes.c:90 +#: lib/setup.c:269 lib/loopaes/loopaes.c:90 #, c-format msgid "Key processing error (using hash %s)." msgstr "Fel vid nyckelbearbetning (använder hash %s)." -#: lib/setup.c:315 lib/setup.c:342 +#: lib/setup.c:335 lib/setup.c:362 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:321 lib/setup.c:2892 +#: lib/setup.c:341 lib/setup.c:3050 msgid "This operation is supported only for LUKS device." msgstr "Denna åtgärd stöds endast av LUKS-enheter." -#: lib/setup.c:348 +#: lib/setup.c:368 msgid "This operation is supported only for LUKS2 device." msgstr "Denna åtgärd stöds endast av LUKS2-enheter." -#: lib/setup.c:396 +#: lib/setup.c:423 lib/luks2/luks2_reencrypt.c:2345 msgid "All key slots full." msgstr "Alla nyckelplatser är upptagna." -#: lib/setup.c:407 +#: lib/setup.c:434 #, c-format msgid "Key slot %d is invalid, please select between 0 and %d." msgstr "Nyckelplats %d är ogiltig. Välj mellan 0 och %d." -#: lib/setup.c:413 +#: lib/setup.c:440 #, c-format msgid "Key slot %d is full, please select another one." msgstr "Nyckelplats %d är full. Välj en annan." -#: lib/setup.c:589 +#: lib/setup.c:525 lib/setup.c:2824 +msgid "Device size is not aligned to device logical block size." +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:626 +#: lib/setup.c:661 msgid "This operation is not supported for this device type." msgstr "Denna åtgärd stöds inte för denna enhetstyp." -#: lib/setup.c:791 lib/luks1/keymanage.c:481 +#: lib/setup.c:666 +msgid "Illegal operation with reencryption in-progress." +msgstr "Ogiltig åtgärd under pågående omkryptering." + +#: lib/setup.c:832 lib/luks1/keymanage.c:475 #, c-format msgid "Unsupported LUKS version %d." msgstr "LUKS-versionen %d stöds inte." -#: lib/setup.c:808 lib/setup.c:1403 lib/setup.c:1812 +#: 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:1288 lib/setup.c:2392 lib/setup.c:2464 lib/setup.c:2476 -#: lib/setup.c:2625 lib/setup.c:4021 +#: lib/setup.c:1427 lib/setup.c:2544 lib/setup.c:2616 lib/setup.c:2628 +#: lib/setup.c:2777 lib/setup.c:4512 #, c-format msgid "Device %s is not active." msgstr "Enheten %s är inte aktiv." -#: lib/setup.c:1310 +#: lib/setup.c:1444 #, c-format msgid "Underlying device for crypt device %s disappeared." msgstr "Underliggande enhet för krypteringsenhet %s försvann." -#: lib/setup.c:1388 +#: lib/setup.c:1524 msgid "Invalid plain crypt parameters." msgstr "Ogiltiga parametrar för vanlig kryptering." -#: lib/setup.c:1393 lib/setup.c:1802 src/integritysetup.c:72 +#: lib/setup.c:1529 lib/setup.c:1949 src/integritysetup.c:74 msgid "Invalid key size." msgstr "Ogiltig nyckelstorlek." -#: lib/setup.c:1398 lib/setup.c:1807 lib/setup.c:2009 +#: lib/setup.c:1534 lib/setup.c:1954 lib/setup.c:2157 msgid "UUID is not supported for this crypt type." msgstr "UUID stöds inte för denna krypteringstyp." -#: lib/setup.c:1413 lib/setup.c:1603 src/cryptsetup.c:1045 +#: lib/setup.c:1549 lib/setup.c:1739 lib/luks2/luks2_reencrypt.c:2308 +#: src/cryptsetup.c:1226 src/cryptsetup.c:3923 msgid "Unsupported encryption sector size." msgstr "Stöder inte sektorstorleken för kryptering." -#: lib/setup.c:1421 lib/setup.c:1720 +#: lib/setup.c:1557 lib/setup.c:1864 lib/setup.c:2818 msgid "Device size is not aligned to requested sector size." msgstr "Storlek på enhet är inte justerad till begärd sektorstorlek." -#: lib/setup.c:1472 lib/setup.c:1591 +#: lib/setup.c:1608 lib/setup.c:1727 msgid "Can't format LUKS without device." msgstr "Det går inte att formatera LUKS utan enhet." -#: lib/setup.c:1478 lib/setup.c:1597 +#: lib/setup.c:1614 lib/setup.c:1733 msgid "Requested data alignment is not compatible with data offset." msgstr "Begärd datajustering är inte kompatibel med dataoffset." -#: lib/setup.c:1546 lib/setup.c:1715 +#: lib/setup.c:1682 lib/setup.c:1851 msgid "WARNING: Data offset is outside of currently available data device.\n" msgstr "VARNING: Dataoffset ligger utanför aktuell dataenhet.\n" -#: lib/setup.c:1556 lib/setup.c:1735 lib/setup.c:1754 lib/setup.c:2021 +#: lib/setup.c:1692 lib/setup.c:1879 lib/setup.c:1900 lib/setup.c:2169 #, c-format msgid "Cannot wipe header on device %s." msgstr "Det går inte att rensa huvudet på enheten %s." -#: lib/setup.c:1608 +#: lib/setup.c:1744 msgid "WARNING: The device activation will fail, dm-crypt is missing support for requested encryption sector size.\n" msgstr "VARNING: Enhetsaktiveringen kommer att misslyckas, dm-crypt saknar stöd för begärd krypteringsektorstorlek.\n" -#: lib/setup.c:1630 +#: lib/setup.c:1766 msgid "Volume key is too small for encryption with integrity extensions." msgstr "Volymnyckeln är för liten för kryptering med integritetstillägg." -#: lib/setup.c:1685 +#: lib/setup.c:1821 #, c-format msgid "Cipher %s-%s (key size %zd bits) is not available." msgstr "Chiffret %s-%s (nyckelstorlek %zd bitar) är inte tillgängligt." -#: lib/setup.c:1747 +#: lib/setup.c:1854 +#, c-format +msgid "WARNING: LUKS2 metadata size changed to % bytes.\n" +msgstr "VARNING: storlek på LUKS2-metadata ändrades till % byte.\n" + +#: lib/setup.c:1858 +#, c-format +msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" +msgstr "VARNING: storlek på LUKS2-nyckelplatsområde ändrades till % 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 +#, c-format +msgid "Device %s is too small." +msgstr "Enheten %s är för liten." + +#: lib/setup.c:1893 lib/setup.c:1919 #, c-format -msgid "Cannot format device %s which is still in use." +msgid "Cannot format device %s in use." msgstr "Det går inte att formatera enheten %s då den används." -#: lib/setup.c:1750 lib/setup.c:1775 +#: lib/setup.c:1896 lib/setup.c:1922 #, c-format msgid "Cannot format device %s, permission denied." msgstr "Det går inte att formatera enheten %s, behörighet nekad." -#: lib/setup.c:1762 lib/setup.c:2073 +#: lib/setup.c:1908 lib/setup.c:2229 #, c-format msgid "Cannot format integrity for device %s." msgstr "Det går inte att formatera integritet för enheten %s." -#: lib/setup.c:1772 -#, c-format -msgid "Cannot format device %s in use." -msgstr "Det går inte att formatera enheten %s då den används." - -#: lib/setup.c:1779 +#: lib/setup.c:1926 #, c-format msgid "Cannot format device %s." msgstr "Det går inte att formatera enheten %s." -#: lib/setup.c:1797 +#: lib/setup.c:1944 msgid "Can't format LOOPAES without device." msgstr "Kan inte formatera LOOPAES utan enhet." -#: lib/setup.c:1842 +#: lib/setup.c:1989 msgid "Can't format VERITY without device." msgstr "Det går inte att formatera VERITY utan enhet." -#: lib/setup.c:1853 lib/verity/verity.c:106 +#: lib/setup.c:2000 lib/verity/verity.c:102 #, c-format msgid "Unsupported VERITY hash type %d." msgstr "VERITY-hashtyp %d stöds inte." -#: lib/setup.c:1859 lib/verity/verity.c:114 +#: lib/setup.c:2006 lib/verity/verity.c:110 msgid "Unsupported VERITY block size." msgstr "VERITY-blockstorlek som inte stöds." -#: lib/setup.c:1864 lib/verity/verity.c:75 +#: lib/setup.c:2011 lib/verity/verity.c:74 msgid "Unsupported VERITY hash offset." msgstr "VERITY-hashoffset som inte stöds." -#: lib/setup.c:1869 +#: lib/setup.c:2016 msgid "Unsupported VERITY FEC offset." msgstr "VERITY-FEC-offset som inte stöds." -#: lib/setup.c:1893 +#: lib/setup.c:2040 msgid "Data area overlaps with hash area." msgstr "Dataområde spiller över på hashområdet." -#: lib/setup.c:1918 +#: lib/setup.c:2065 msgid "Hash area overlaps with FEC area." msgstr "Hashområde spiller över på FEC-mrådet." -#: lib/setup.c:1925 +#: lib/setup.c:2072 msgid "Data area overlaps with FEC area." msgstr "Dataområde spiller över på FEC-mrådet." -#: lib/setup.c:2130 +#: lib/setup.c:2208 +#, c-format +msgid "WARNING: Requested tag size %d bytes differs from %s size output (%d bytes).\n" +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:2398 lib/setup.c:2470 lib/setup.c:2483 +#: lib/setup.c:2550 lib/setup.c:2622 lib/setup.c:2635 #, c-format msgid "Unsupported parameters on device %s." msgstr "Parametrar som inte stöds på enheten %s." -#: lib/setup.c:2404 lib/setup.c:2489 +#: lib/setup.c:2556 lib/setup.c:2641 lib/luks2/luks2_reencrypt.c:2408 +#: lib/luks2/luks2_reencrypt.c:2737 #, c-format msgid "Mismatching parameters on device %s." msgstr "Kan inte rensa huvudet på enheten %s." -#: lib/setup.c:2657 -msgid "Cannot resize loop device." -msgstr "Det går inte att ändra storlek på loop-enhet." +#: lib/setup.c:2661 +msgid "Crypt devices mismatch." +msgstr "Krypteringsenheter har matchningsfel." + +#: lib/setup.c:2698 lib/setup.c:2703 lib/luks2/luks2_reencrypt.c:2054 +#: lib/luks2/luks2_reencrypt.c:3145 +#, c-format +msgid "Failed to reload device %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 +#, c-format +msgid "Failed to suspend device %s." +msgstr "Misslyckades med att försätta enhet %s i vänteläge." -#: lib/setup.c:2666 +#: lib/setup.c:2718 lib/luks2/luks2_reencrypt.c:2039 +#: lib/luks2/luks2_reencrypt.c:3080 lib/luks2/luks2_reencrypt.c:3149 #, c-format -msgid "Device %s size is not aligned to requested sector size (%u bytes)." -msgstr "Storlek på enhet %s är inte justerad till begärd sektorstorlek (%u byte)." +msgid "Failed to resume device %s." +msgstr "Misslyckades med att återuppta enhet %s." -#: lib/setup.c:2725 +#: lib/setup.c:2732 +#, c-format +msgid "Fatal error while reloading device %s (on top of device %s)." +msgstr "Ödesdigert fel vid omläsning av enhet %s (ovanpå enhet %s)." + +#: lib/setup.c:2735 lib/setup.c:2737 +#, c-format +msgid "Failed to switch device %s to dm-error." +msgstr "Misslyckades med att växla enhet %s till dm-error." + +#: lib/setup.c:2809 +msgid "Cannot resize loop device." +msgstr "Det går inte att ändra storlek på loop-enhet." + +#: lib/setup.c:2882 msgid "Do you really want to change UUID of device?" msgstr "Vill du verkligen ändra UUID för en enhet?" -#: lib/setup.c:2801 +#: lib/setup.c:2958 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:2900 +#: lib/setup.c:3058 #, c-format msgid "Volume %s is not active." msgstr "Volymen %s är inte aktiv." -#: lib/setup.c:2911 +#: lib/setup.c:3069 #, c-format msgid "Volume %s is already suspended." msgstr "Volymen %s är redan i vänteläge." -#: lib/setup.c:2925 +#: lib/setup.c:3082 #, c-format msgid "Suspend is not supported for device %s." msgstr "Vänteläge stöds inte för enhet %s." -#: lib/setup.c:2927 +#: lib/setup.c:3084 #, c-format msgid "Error during suspending device %s." msgstr "Fel då enheten %s försattes i vänteläge." -#: lib/setup.c:2960 lib/setup.c:3027 +#: 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:2989 +#: lib/setup.c:3146 #, c-format msgid "Resume is not supported for device %s." msgstr "Att återuppta stöds inte för enhet %s." -#: lib/setup.c:2991 lib/setup.c:3059 +#: lib/setup.c:3148 lib/setup.c:3216 lib/setup.c:3297 #, c-format msgid "Error during resuming device %s." msgstr "Fel då enheten %s återupptogs." -#: lib/setup.c:3127 lib/setup.c:3315 +#: 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 +msgid "Volume key does not match the volume." +msgstr "Volymnyckeln stämmer inte överens med volymen." + +#: lib/setup.c:3343 lib/setup.c:3531 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:3267 +#: lib/setup.c:3483 msgid "Failed to swap new key slot." msgstr "Misslyckades med att byta ny nyckelplats." -#: lib/setup.c:3432 lib/setup.c:3865 lib/setup.c:3878 lib/setup.c:3886 -#: lib/setup.c:3899 lib/setup.c:4198 lib/setup.c:5274 -msgid "Volume key does not match the volume." -msgstr "Volymnyckeln stämmer inte överens med volymen." - -#: lib/setup.c:3453 +#: lib/setup.c:3669 #, c-format msgid "Key slot %d is invalid." msgstr "Nyckelplats %d är ogiltig." -#: lib/setup.c:3459 +#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 #, c-format -msgid "Key slot %d is not used." -msgstr "Nyckelplats %d används inte." +msgid "Keyslot %d is not active." +msgstr "Nyckelplats %d är inte aktiv." -#: lib/setup.c:3478 +#: lib/setup.c:3694 msgid "Device header overlaps with data area." msgstr "Dataområde spiller över på hashområdet." -#: lib/setup.c:3684 lib/setup.c:3952 -msgid "Device type is not properly initialised." +#: lib/setup.c:3981 +msgid "Reencryption in-progress. Cannot activate device." +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 +msgid "Failed to get reencryption lock." +msgstr "Misslyckades med att erhålla omkrypteringslås." + +#: lib/setup.c:3996 lib/luks2/luks2_reencrypt.c:2855 +msgid "LUKS2 reencryption recovery failed." +msgstr "Misslyckades med återhämtning av LUKS2-omkryptering." + +#: lib/setup.c:4127 lib/setup.c:4379 +msgid "Device type is not properly initialized." msgstr "Enhetstypen är inte korrekt initierad." -#: lib/setup.c:3726 +#: 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:3729 +#: lib/setup.c:4174 #, c-format msgid "Device %s already exists." msgstr "Enheten %s finns redan." -#: lib/setup.c:3852 +#: lib/setup.c:4296 msgid "Incorrect volume key specified for plain device." msgstr "Felaktig volymnyckel för vanlig enhet." -#: lib/setup.c:3918 +#: lib/setup.c:4405 msgid "Incorrect root hash specified for verity device." msgstr "Felaktig rothash angiven för verity-enhet." -#: lib/setup.c:3995 lib/setup.c:4010 +#: lib/setup.c:4412 +msgid "Root hash signature required." +msgstr "Root-hashsignatur krävs." + +#: lib/setup.c:4421 +msgid "Kernel keyring missing: required for passing signature to kernel." +msgstr "Kärnans nyckelring saknas: krävs för att skicka signatur till kärnan." + +#: lib/setup.c:4438 lib/setup.c:5915 +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 #, c-format msgid "Device %s is still in use." msgstr "Enheten %s används fortfarande." -#: lib/setup.c:4025 +#: lib/setup.c:4516 #, c-format msgid "Invalid device %s." msgstr "Ogiltig enhet %s." -#: lib/setup.c:4134 -msgid "Function not available in FIPS mode." -msgstr "Funktionen är inte tillgänglig i FIPS-läge." - -#: lib/setup.c:4148 +#: lib/setup.c:4632 msgid "Volume key buffer too small." msgstr "Buffert för volymnyckelen är för liten." -#: lib/setup.c:4156 +#: lib/setup.c:4640 msgid "Cannot retrieve volume key for plain device." msgstr "Kan inte hämta volymnyckel för vanlig enhet." -#: lib/setup.c:4167 +#: lib/setup.c:4657 +msgid "Cannot retrieve root hash for verity device." +msgstr "Det går inte att hämta root-hash för verity-enhet." + +#: lib/setup.c:4659 #, 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:4354 +#: lib/setup.c:4865 msgid "Dump operation is not supported for this device type." msgstr "Utskriftsåtgärden stöds inte för denna enhetstyp." -#: lib/setup.c:4930 +#: lib/setup.c:5190 +#, c-format +msgid "Data offset is not multiple of %u bytes." +msgstr "Dataförskjutning är inte en multipel av %u byte." + +#: lib/setup.c:5475 #, 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:5213 +#: lib/setup.c:5772 #, 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:5280 -msgid "Failed to initialise default LUKS2 keyslot parameters." -msgstr "Misslyckades med att sätta standardnyckelplats för LUKS2-parametrar." +#: lib/setup.c:5845 +msgid "Failed to initialize default LUKS2 keyslot parameters." +msgstr "Misslyckades med att initiera standardnyckelplats för LUKS2-parametrar." -#: lib/setup.c:5286 +#: lib/setup.c:5851 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "Misslyckades med att tilldela nyckelplats %d till kontrollsummor." -#: lib/setup.c:5370 -msgid "Failed to load key in kernel keyring." -msgstr "Misslyckades med att öppna nyckelringen för kärnan." - -#: lib/setup.c:5425 +#: lib/setup.c:5982 msgid "Kernel keyring is not supported by the kernel." msgstr "Kärnans nyckelring stöds inte av kärnan." -#: lib/setup.c:5435 +#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 #, 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/utils.c:81 +#: lib/setup.c:6016 +msgid "Failed to acquire global memory-hard access serialization lock." +msgstr "Misslyckades med att inhämta globalt minneshårt serialiseringslås." + +#: lib/utils.c:80 msgid "Cannot get process priority." msgstr "Det går inte att få processprioritet." -#: lib/utils.c:95 +#: lib/utils.c:94 msgid "Cannot unlock memory." msgstr "Det går inte att låsa upp minne." -#: lib/utils.c:169 lib/tcrypt/tcrypt.c:498 +#: lib/utils.c:168 lib/tcrypt/tcrypt.c:497 msgid "Failed to open key file." msgstr "Misslyckades med att öppna nyckelfilen." -#: lib/utils.c:174 +#: lib/utils.c:173 msgid "Cannot read keyfile from a terminal." msgstr "Det går inte läsa nyckelfilen från en terminal." -#: lib/utils.c:191 +#: lib/utils.c:190 msgid "Failed to stat key file." msgstr "Misslyckades med att ta stat på nyckelfilen." -#: lib/utils.c:199 lib/utils.c:220 +#: lib/utils.c:198 lib/utils.c:219 msgid "Cannot seek to requested keyfile offset." msgstr "Det går inte att söka till begärd nyckelfilsoffset." -#: lib/utils.c:214 lib/utils.c:229 src/utils_password.c:188 +#: lib/utils.c:213 lib/utils.c:228 src/utils_password.c:188 #: src/utils_password.c:201 msgid "Out of memory while reading passphrase." msgstr "Slut på minne vid läsning av lösenfras." -#: lib/utils.c:249 +#: lib/utils.c:248 msgid "Error reading passphrase." msgstr "Fel vid läsning av lösenfras." -#: lib/utils.c:266 +#: lib/utils.c:265 msgid "Nothing to read on input." msgstr "Ingenting att läsa vid inmating." -#: lib/utils.c:273 +#: lib/utils.c:272 msgid "Maximum keyfile size exceeded." msgstr "Högsta nyckelfilsstorlek överskriden." -#: lib/utils.c:278 +#: lib/utils.c:277 msgid "Cannot read requested amount of data." msgstr "Det går inte läsa begärd mängd data." -#: lib/utils_device.c:184 lib/luks1/keyencryption.c:92 +#: lib/utils_device.c:187 lib/utils_storage_wrappers.c:110 +#: lib/luks1/keyencryption.c:91 #, c-format -msgid "Device %s doesn't exist or access denied." +msgid "Device %s does not exist or access denied." msgstr "Enheten %s finns inte eller åtkomst nekas." -#: lib/utils_device.c:194 +#: lib/utils_device.c:197 #, c-format msgid "Device %s is not compatible." msgstr "Enheten %s är inte aktiv." -#: lib/utils_device.c:560 +#: lib/utils_device.c:642 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Enhet %s är för liten. Behöver minst % byte." -#: lib/utils_device.c:641 +#: lib/utils_device.c:723 #, 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:645 +#: lib/utils_device.c:727 #, 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:648 +#: lib/utils_device.c:730 #, c-format msgid "Cannot get info about device %s." msgstr "Kan inte hämta information om enheten %s." -#: lib/utils_device.c:671 +#: lib/utils_device.c:753 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:681 +#: lib/utils_device.c:763 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:727 +#: lib/utils_device.c:809 #, 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:735 +#: lib/utils_device.c:817 #, c-format msgid "Device %s has zero size." msgstr "Enheten %s har noll storlek." -#: lib/utils_device.c:746 lib/luks1/keyencryption.c:252 -#, c-format -msgid "Device %s is too small." -msgstr "Enheten %s är för liten." - #: lib/utils_pbkdf.c:100 msgid "Requested PBKDF target time cannot be zero." msgstr "Begärd måltid för PBKDF kan inte vara noll." @@ -609,35 +694,49 @@ msgstr "Högst begärt minne för PBKDF kan inte vara noll." msgid "Requested PBKDF parallel threads cannot be zero." msgstr "Begärda parallella trådar för PBKDF kan inte vara noll." -#: lib/utils_benchmark.c:317 +#: lib/utils_pbkdf.c:184 +msgid "Only PBKDF2 is supported in FIPS mode." +msgstr "Stöder endast PBKDF2 i FIPS-läge." + +#: lib/utils_benchmark.c:172 msgid "PBKDF benchmark disabled but iterations not set." msgstr "Prestandamätning för PBKDF är inaktiverad men iterationer är inte satt." -#: lib/utils_benchmark.c:336 +#: lib/utils_benchmark.c:191 #, c-format msgid "Not compatible PBKDF2 options (using hash algorithm %s)." msgstr "Ej kompatibla PBKDF2-flaggor (använder hash-algoritmen %s)." -#: lib/utils_benchmark.c:356 +#: lib/utils_benchmark.c:211 msgid "Not compatible PBKDF options." msgstr "Ej kompatibla PBKDF2-flaggor." -#: lib/utils_device_locking.c:80 +#: lib/utils_device_locking.c:102 #, c-format msgid "Locking aborted. The locking path %s/%s is unusable (not a directory or missing)." msgstr "Låsningen avbruten. Låsningsökvägen %s/%s oanvändbar (inte en katalog eller saknas)." -#: lib/utils_device_locking.c:87 +#: 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" -#: lib/utils_device_locking.c:97 +#: 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/luks1/keyencryption.c:40 +#: lib/utils_wipe.c:184 src/cryptsetup_reencrypt.c:941 +#: src/cryptsetup_reencrypt.c:1025 +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 %." +msgstr "Fel vid radering av enhet, förskjutning %." + +#: lib/luks1/keyencryption.c:39 #, c-format msgid "" "Failed to setup dm-crypt key mapping for device %s.\n" @@ -646,17 +745,17 @@ msgstr "" "Misslyckades med att konfigurera nyckelmappning för dm-crypt för enheten %s. \n" "Kontrollera att kärnan har stöd för chiffret %s (kontrollera syslog för mer information)." -#: lib/luks1/keyencryption.c:45 +#: lib/luks1/keyencryption.c:44 msgid "Key size in XTS mode must be 256 or 512 bits." msgstr "Nyckelstorlek i XTS-läge måste vara en multipel av 256 eller 512 bitar." -#: lib/luks1/keyencryption.c:47 +#: lib/luks1/keyencryption.c:46 msgid "Cipher specification should be in [cipher]-[mode]-[iv] format." msgstr "Chifferspecifikation ska vara i formatet [chiffer] - [läge] - [iv]." -#: lib/luks1/keyencryption.c:98 lib/luks1/keymanage.c:345 -#: lib/luks1/keymanage.c:642 lib/luks1/keymanage.c:1079 -#: lib/luks2/luks2_json_metadata.c:1157 lib/luks2/luks2_keyslot.c:448 +#: 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 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Kan inte skriva till enhet %s, behörighet nekad." @@ -669,95 +768,97 @@ msgstr "Misslyckades med att öppna temporär nyckellagringsenhet." msgid "Failed to access temporary keystore device." msgstr "Misslyckades med att komma åt temporär nyckellagringsenhet." -#: lib/luks1/keyencryption.c:200 lib/luks2/luks2_keyslot_luks2.c:91 +#: lib/luks1/keyencryption.c:200 lib/luks2/luks2_keyslot_luks2.c:60 +#: lib/luks2/luks2_keyslot_luks2.c:78 lib/luks2/luks2_keyslot_reenc.c:134 msgid "IO error while encrypting keyslot." msgstr "In-/utfel vid kryptering av nyckelplats." -#: lib/luks1/keyencryption.c:243 lib/luks1/keymanage.c:348 -#: lib/luks1/keymanage.c:594 lib/luks1/keymanage.c:645 lib/tcrypt/tcrypt.c:663 -#: lib/verity/verity.c:81 lib/verity/verity.c:182 lib/verity/verity_hash.c:308 -#: lib/verity/verity_hash.c:319 lib/verity/verity_hash.c:339 -#: lib/verity/verity_fec.c:242 lib/verity/verity_fec.c:254 -#: lib/verity/verity_fec.c:259 lib/luks2/luks2_json_metadata.c:1160 -#: src/cryptsetup_reencrypt.c:208 +#: 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 #, c-format msgid "Cannot open device %s." msgstr "Det går inte att öppna enheten %s." -#: lib/luks1/keyencryption.c:254 lib/luks2/luks2_keyslot_luks2.c:152 +#: lib/luks1/keyencryption.c:257 lib/luks2/luks2_keyslot_luks2.c:137 msgid "IO error while decrypting keyslot." msgstr "In-/utfel vid dekryptering av nyckelplats." -#: lib/luks1/keymanage.c:111 +#: lib/luks1/keymanage.c:110 #, c-format msgid "Device %s is too small. (LUKS1 requires at least % bytes.)" msgstr "Enhet %s är för liten. (LUKS1 kräver minst % byte.)" -#: lib/luks1/keymanage.c:132 lib/luks1/keymanage.c:140 -#: lib/luks1/keymanage.c:152 lib/luks1/keymanage.c:163 -#: lib/luks1/keymanage.c:175 +#: lib/luks1/keymanage.c:131 lib/luks1/keymanage.c:139 +#: lib/luks1/keymanage.c:151 lib/luks1/keymanage.c:162 +#: lib/luks1/keymanage.c:174 #, c-format msgid "LUKS keyslot %u is invalid." msgstr "LUKS-nyckelplats %u är ogiltig." -#: lib/luks1/keymanage.c:228 lib/luks1/keymanage.c:478 -#: lib/luks2/luks2_json_metadata.c:991 src/cryptsetup.c:1236 -#: src/cryptsetup.c:1355 src/cryptsetup.c:1412 src/cryptsetup.c:1468 -#: src/cryptsetup.c:1535 src/cryptsetup.c:1631 src/cryptsetup.c:1695 -#: src/cryptsetup.c:1855 src/cryptsetup.c:2044 src/cryptsetup.c:2104 -#: src/cryptsetup.c:2170 src/cryptsetup.c:2334 src/cryptsetup_reencrypt.c:1397 +#: 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 #, c-format msgid "Device %s is not a valid LUKS device." msgstr "Enheten %s är inte en giltig LUKS-enhet." -#: lib/luks1/keymanage.c:247 lib/luks2/luks2_json_metadata.c:1010 +#: lib/luks1/keymanage.c:246 lib/luks2/luks2_json_metadata.c:1100 #, c-format msgid "Requested header backup file %s already exists." msgstr "Begärd säkerhetskopia %s av huvud finns redan." -#: lib/luks1/keymanage.c:249 lib/luks2/luks2_json_metadata.c:1012 +#: lib/luks1/keymanage.c:248 lib/luks2/luks2_json_metadata.c:1102 #, 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:254 lib/luks2/luks2_json_metadata.c:1017 +#: lib/luks1/keymanage.c:255 lib/luks2/luks2_json_metadata.c:1109 #, 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:287 lib/luks2/luks2_json_metadata.c:1066 -msgid "Backup file doesn't contain valid LUKS header." +#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1161 +msgid "Backup file does not contain valid LUKS header." msgstr "Säkerhetskopian innehåller inte något giltigt LUKS-huvud." -#: lib/luks1/keymanage.c:300 lib/luks1/keymanage.c:555 -#: lib/luks2/luks2_json_metadata.c:1087 +#: lib/luks1/keymanage.c:299 lib/luks1/keymanage.c:549 +#: lib/luks2/luks2_json_metadata.c:1182 #, 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:306 lib/luks2/luks2_json_metadata.c:1093 +#: lib/luks1/keymanage.c:307 lib/luks2/luks2_json_metadata.c:1190 #, c-format msgid "Cannot read header backup file %s." msgstr "Det går inte att läsa säkerhetskopia för huvud %s." -#: lib/luks1/keymanage.c:318 +#: lib/luks1/keymanage.c:317 msgid "Data offset or key size differs on device and backup, restore failed." msgstr "Dataoffset eller nyckelstorlek skiljer sig åt på enhet och säkerhetskopia. Återställningen misslyckades." -#: lib/luks1/keymanage.c:326 +#: lib/luks1/keymanage.c:325 #, c-format msgid "Device %s %s%s" msgstr "Enhet %s %s%s" -#: lib/luks1/keymanage.c:327 +#: lib/luks1/keymanage.c:326 msgid "does not contain LUKS header. Replacing header can destroy data on that device." msgstr "innehåller inget LUKS-huvud. Ersättning av huvud kan förstöra data på enheten." -#: lib/luks1/keymanage.c:328 +#: lib/luks1/keymanage.c:327 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:329 lib/luks2/luks2_json_metadata.c:1129 +#: lib/luks1/keymanage.c:328 lib/luks2/luks2_json_metadata.c:1224 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -765,99 +866,105 @@ msgstr "" "\n" "VARNING: verkligt enhetshuvud har annat UUID än säkerhetskopian!" -#: lib/luks1/keymanage.c:381 +#: lib/luks1/keymanage.c:375 msgid "Non standard key size, manual repair required." msgstr "Ej standardstorlek på nyckel, manuell reparation krävs." -#: lib/luks1/keymanage.c:386 +#: lib/luks1/keymanage.c:380 msgid "Non standard keyslots alignment, manual repair required." msgstr "Ej standardjustering på nyckelplatser, manuell reparation krävs." -#: lib/luks1/keymanage.c:396 +#: lib/luks1/keymanage.c:390 msgid "Repairing keyslots." msgstr "Reparerar nyckelplatser." -#: lib/luks1/keymanage.c:415 +#: lib/luks1/keymanage.c:409 #, c-format msgid "Keyslot %i: offset repaired (%u -> %u)." msgstr "Nyckelplats %i: reparerad offset (%u -> %u)." -#: lib/luks1/keymanage.c:423 +#: lib/luks1/keymanage.c:417 #, c-format msgid "Keyslot %i: stripes repaired (%u -> %u)." msgstr "Nyckelplats %i: reparerade remsor (%u -> %u)." -#: lib/luks1/keymanage.c:432 +#: lib/luks1/keymanage.c:426 #, c-format msgid "Keyslot %i: bogus partition signature." msgstr "Nyckelplats %i: fejkpartitionssignatur." -#: lib/luks1/keymanage.c:437 +#: lib/luks1/keymanage.c:431 #, c-format msgid "Keyslot %i: salt wiped." msgstr "Nyckelplats %i: salt borttaget." -#: lib/luks1/keymanage.c:454 +#: lib/luks1/keymanage.c:448 msgid "Writing LUKS header to disk." msgstr "Skriver LUKS-huvud till disk." -#: lib/luks1/keymanage.c:459 +#: lib/luks1/keymanage.c:453 msgid "Repair failed." msgstr "Reparation misslyckades." -#: lib/luks1/keymanage.c:487 lib/luks1/keymanage.c:758 +#: lib/luks1/keymanage.c:481 lib/luks1/keymanage.c:750 #, c-format msgid "Requested LUKS hash %s is not supported." msgstr "Begärd LUKS-hash %s stöds inte." -#: lib/luks1/keymanage.c:515 src/cryptsetup.c:960 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 msgid "No known problems detected for LUKS header." msgstr "Inga kända problem identifierade för LUKS-huvud." -#: lib/luks1/keymanage.c:667 +#: lib/luks1/keymanage.c:660 #, 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:676 +#: lib/luks1/keymanage.c:668 #, 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:752 +#: lib/luks1/keymanage.c:744 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:763 lib/luks1/keymanage.c:828 -#: lib/luks2/luks2_json_format.c:207 lib/luks2/luks2_json_metadata.c:909 +#: 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 msgid "Wrong LUKS UUID format provided." msgstr "Felaktigt LUKS-UUID-format angavs." -#: lib/luks1/keymanage.c:786 +#: lib/luks1/keymanage.c:778 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:807 +#: lib/luks1/keymanage.c:804 #, 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:851 +#: lib/luks1/keymanage.c:848 #, c-format msgid "Key slot %d active, purge first." msgstr "Nyckelplats %d är aktiv, rensa först." -#: lib/luks1/keymanage.c:857 +#: lib/luks1/keymanage.c:854 #, 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:1065 +#: lib/luks1/keymanage.c:990 +#, c-format +msgid "Cannot open keyslot (using hash %s)." +msgstr "Det går inte att öppna nyckeplats (använder hash %s)." + +#: lib/luks1/keymanage.c:1066 #, 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:1083 lib/luks2/luks2_keyslot.c:452 +#: lib/luks1/keymanage.c:1084 lib/luks2/luks2_keyslot.c:738 #, c-format msgid "Cannot wipe device %s." msgstr "Kan inte rensa enheten %s." @@ -875,97 +982,194 @@ msgid "Incompatible loop-AES keyfile detected." msgstr "Identifierade inkompatibel loop-AES-nyckelfil." #: lib/loopaes/loopaes.c:245 -msgid "Kernel doesn't support loop-AES compatible mapping." +msgid "Kernel does not support loop-AES compatible mapping." msgstr "Kärnan stöder inte loop-AES-kompatibel mappning." -#: lib/tcrypt/tcrypt.c:505 +#: lib/tcrypt/tcrypt.c:504 #, c-format msgid "Error reading keyfile %s." msgstr "Fel vid läsning av nyckelfil %s." -#: lib/tcrypt/tcrypt.c:545 +#: lib/tcrypt/tcrypt.c:554 #, c-format -msgid "Maximum TCRYPT passphrase length (%d) exceeded." -msgstr "Högsta TCRYPT-lösenfraslängd (%d) överskriden." +msgid "Maximum TCRYPT passphrase length (%zu) exceeded." +msgstr "Högsta TCRYPT-lösenfraslängd (%zu) överskriden." -#: lib/tcrypt/tcrypt.c:586 +#: 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:604 src/cryptsetup.c:915 +#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010 msgid "Required kernel crypto interface not available." msgstr "Begärt kryptogränssnitt för kärnan inte tillgängligt." -#: lib/tcrypt/tcrypt.c:606 src/cryptsetup.c:917 +#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Försäkra dig om att kärnmodulen algif_skcipher är inläst." -#: lib/tcrypt/tcrypt.c:746 +#: lib/tcrypt/tcrypt.c:753 #, c-format msgid "Activation is not supported for %d sector size." msgstr "Aktivering stöds inte för sektorstorlek %d." -#: lib/tcrypt/tcrypt.c:752 -msgid "Kernel doesn't support activation for this TCRYPT legacy mode." +#: lib/tcrypt/tcrypt.c:759 +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:786 +#: lib/tcrypt/tcrypt.c:793 #, c-format msgid "Activating TCRYPT system encryption for partition %s." msgstr "Aktiverar TCRYPT-systemkryptering för partition %s." -#: lib/tcrypt/tcrypt.c:864 -msgid "Kernel doesn't support TCRYPT compatible mapping." +#: lib/tcrypt/tcrypt.c:871 +msgid "Kernel does not support TCRYPT compatible mapping." msgstr "Kärnan stöder inte TCRYPT-kompatibel mappning." -#: lib/tcrypt/tcrypt.c:1085 +#: lib/tcrypt/tcrypt.c:1093 msgid "This function is not supported without TCRYPT header load." msgstr "Denna funktion stöds inte utan inläsning av TCRYPT-huvud." -#: lib/verity/verity.c:69 lib/verity/verity.c:175 +#: lib/bitlk/bitlk.c:333 +#, c-format +msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key." +msgstr "Oväntad metadatapost av typ ”%u” funnen vid tolkning av volymhuvudnyckel." + +#: lib/bitlk/bitlk.c:380 +msgid "Invalid string found when parsing Volume Master Key." +msgstr "Ogiltig sträng funnen vid tolkning av volymhuvudnyckel." + +#: lib/bitlk/bitlk.c:385 +#, c-format +msgid "Unexpected string ('%s') found when parsing supported Volume Master Key." +msgstr "Oväntad sträng (”%s”) funnen vid tolkning av volymhuvudnycklar som stöds." + +#: lib/bitlk/bitlk.c:399 +#, c-format +msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." +msgstr "Oväntad metadatapostvärde av typ ”%u” funnen vid tolkning av volymhuvudnycklar som stöds." + +#: lib/bitlk/bitlk.c:478 +#, c-format +msgid "Failed to read BITLK signature from %s." +msgstr "Misslyckades med att läsa BITLK-signatur från %s." + +#: lib/bitlk/bitlk.c:484 +msgid "BITLK version 1 is currently not supported." +msgstr "BITLK version 1 stöds ej för närvarande." + +#: lib/bitlk/bitlk.c:490 +msgid "Invalid or unknown boot signature for BITLK device." +msgstr "Ogiltig eller okänd boot-signatur för BITLK-enhet." + +#: lib/bitlk/bitlk.c:502 +msgid "Invalid or unknown signature for BITLK device." +msgstr "Ogiltig eller okänd signatur för BITLK-enhet." + +#: lib/bitlk/bitlk.c:509 +#, c-format +msgid "Unsupported sector size %." +msgstr "Stöder inte sektorstorleken %." + +#: lib/bitlk/bitlk.c:517 #, c-format -msgid "Verity device %s doesn't use on-disk header." -msgstr "Verity-enhet %s använder inte huvud på disk." +msgid "Failed to read BITLK header from %s." +msgstr "Misslyckades med att läsa BITLK-huvud från %s." -#: lib/verity/verity.c:94 +#: lib/bitlk/bitlk.c:542 +#, c-format +msgid "Failed to read BITLK FVE metadata from %s." +msgstr "Misslyckades med att läsa BITLK FVE-metadata från %s." + +#: lib/bitlk/bitlk.c:593 +msgid "Unknown or unsupported encryption type." +msgstr "Krypteringstypen är okänd eller stöds ej." + +#: lib/bitlk/bitlk.c:626 +#, c-format +msgid "Failed to read BITLK metadata entries from %s." +msgstr "Misslyckades med att läsa BITLK -metadataposter från %s." + +#: lib/bitlk/bitlk.c:920 +msgid "This operation is not supported." +msgstr "Denna åtgärd stöds ej." + +#: lib/bitlk/bitlk.c:928 +msgid "Wrong key size." +msgstr "Fel nyckelstorlek." + +#: lib/bitlk/bitlk.c:980 +msgid "This BITLK device is in an unsupported state and cannot be activated." +msgstr "Denna BITLK-enhet är i tillstånd som inte stöds och kan inte aktiveras." + +#: lib/bitlk/bitlk.c:986 +#, c-format +msgid "BITLK devices with type '%s' cannot be activated." +msgstr "Det går inte att aktivera BITLK-enheter av typen ”%s”." + +#: lib/bitlk/bitlk.c:1068 +msgid "Activation of partially decrypted BITLK device is not supported." +msgstr "Aktivering av delvis avkrypterade BITLK-enheter stöds ej." + +#: lib/bitlk/bitlk.c:1204 +msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." +msgstr "Det går inte att aktivera enheten, kärnan dm-crypt saknar stöd för BITLK IV." + +#: lib/bitlk/bitlk.c:1208 +msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." +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 +#, c-format +msgid "Verity device %s does not use on-disk header." +msgstr "Verity-enheten %s använder inte huvud på disk." + +#: lib/verity/verity.c:90 #, c-format msgid "Device %s is not a valid VERITY device." msgstr "Enheten %s är inte en giltig VERITY-enhet." -#: lib/verity/verity.c:101 +#: lib/verity/verity.c:97 #, c-format msgid "Unsupported VERITY version %d." msgstr "VERITY-versionen %d stöds inte." -#: lib/verity/verity.c:132 +#: lib/verity/verity.c:128 msgid "VERITY header corrupted." msgstr "VERITY-huvud är skadat." -#: lib/verity/verity.c:169 +#: lib/verity/verity.c:165 #, c-format msgid "Wrong VERITY UUID format provided on device %s." msgstr "Felaktigt VERITY-UUID-format angivet på enhet %s." -#: lib/verity/verity.c:202 +#: lib/verity/verity.c:198 #, 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:266 +#: lib/verity/verity.c:256 +msgid "Root hash signature verification is not supported." +msgstr "Begärd hashsignaturverifiering %s stöds inte." + +#: lib/verity/verity.c:267 msgid "Errors cannot be repaired with FEC device." msgstr "Det går inte reparera fel med FEC-enhet." -#: lib/verity/verity.c:268 +#: lib/verity/verity.c:269 #, c-format msgid "Found %u repairable errors with FEC device." msgstr "Fann %u reparerbara fel med FEC-enhet." -#: lib/verity/verity.c:306 -msgid "Kernel doesn't support dm-verity mapping." +#: lib/verity/verity.c:308 +msgid "Kernel does not support dm-verity mapping." msgstr "Kärnan stöder inte dm-verity-mappning." -#: lib/verity/verity.c:317 +#: lib/verity/verity.c:312 +msgid "Kernel does not support dm-verity signature option." +msgstr "Kärnan stöder inte flaggan för dm-verity-signatur." + +#: lib/verity/verity.c:323 msgid "Verity device detected corruption after activation." msgstr "Verity-enhet identifierades som skadad efter aktivering." @@ -974,156 +1178,155 @@ msgstr "Verity-enhet identifierades som skadad efter aktivering." msgid "Spare area is not zeroed at position %." msgstr "Ledigt utrymme är inte nollställt vid position %." -#: lib/verity/verity_hash.c:160 lib/verity/verity_hash.c:287 -#: lib/verity/verity_hash.c:300 +#: lib/verity/verity_hash.c:163 lib/verity/verity_hash.c:290 +#: lib/verity/verity_hash.c:303 msgid "Device offset overflow." msgstr "Enhets-offset spillde över." -#: lib/verity/verity_hash.c:200 +#: lib/verity/verity_hash.c:203 #, c-format msgid "Verification failed at position %." msgstr "Verifiering misslyckades vid %." -#: lib/verity/verity_hash.c:273 +#: 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:293 +#: lib/verity/verity_hash.c:296 msgid "Hash area overflow." msgstr "Hash-området spillde över." -#: lib/verity/verity_hash.c:370 +#: lib/verity/verity_hash.c:373 msgid "Verification of data area failed." msgstr "Misslyckades med verifiering av dataområde." -#: lib/verity/verity_hash.c:375 +#: lib/verity/verity_hash.c:378 msgid "Verification of root hash failed." msgstr "Misslyckades med verifiering av rot-hash." -#: lib/verity/verity_hash.c:381 +#: lib/verity/verity_hash.c:384 msgid "Input/output error while creating hash area." msgstr "In-/utdatafel vid skapandet av hashområde." -#: lib/verity/verity_hash.c:383 +#: lib/verity/verity_hash.c:386 msgid "Creation of hash area failed." msgstr "Misslyckades med skapandet av hashområde." -#: lib/verity/verity_hash.c:430 +#: lib/verity/verity_hash.c:433 #, 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)." -#: lib/verity/verity_fec.c:132 +#: lib/verity/verity_fec.c:131 msgid "Failed to allocate RS context." msgstr "Misslyckades med att öppna RS-kontext." -#: lib/verity/verity_fec.c:147 +#: lib/verity/verity_fec.c:146 msgid "Failed to allocate buffer." msgstr "Misslyckades med att allokera buffert." -#: lib/verity/verity_fec.c:157 +#: lib/verity/verity_fec.c:156 #, c-format msgid "Failed to read RS block % byte %d." msgstr "Misslyckades med att läsa RS block % byte %d." -#: lib/verity/verity_fec.c:170 +#: lib/verity/verity_fec.c:169 #, c-format msgid "Failed to read parity for RS block %." msgstr "Misslyckades med att skriva paritet för RS block %." -#: lib/verity/verity_fec.c:178 +#: lib/verity/verity_fec.c:177 #, c-format msgid "Failed to repair parity for block %." msgstr "Misslyckades med att skriva paritet för RS block %." -#: lib/verity/verity_fec.c:189 +#: lib/verity/verity_fec.c:188 #, c-format msgid "Failed to write parity for RS block %." msgstr "Misslyckades med att skriva paritet för RS block %." -#: lib/verity/verity_fec.c:224 +#: lib/verity/verity_fec.c:223 msgid "Block sizes must match for FEC." msgstr "Blockstorlekar måste matcha för FEC." -#: lib/verity/verity_fec.c:230 +#: lib/verity/verity_fec.c:229 msgid "Invalid number of parity bytes." msgstr "Ogiltigt antal paritet-byte." -#: lib/verity/verity_fec.c:266 +#: lib/verity/verity_fec.c:265 #, 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:239 lib/integrity/integrity.c:304 -msgid "Kernel doesn't support dm-integrity mapping." +#: lib/integrity/integrity.c:271 lib/integrity/integrity.c:343 +msgid "Kernel does not support dm-integrity mapping." msgstr "Kärnan stöder inte dm-integrity-mappning." -#: lib/luks2/luks2_disk_metadata.c:413 -msgid "Failed to acquire write device lock." -msgstr "Misslyckades med att erhålla skrivlås för enhet." +#: lib/integrity/integrity.c:277 +msgid "Kernel does not support dm-integrity fixed metadata alignment." +msgstr "Kärnan stöder inte fast metadataförskjutning för dm-integrity." -#: lib/luks2/luks2_disk_metadata.c:654 lib/luks2/luks2_disk_metadata.c:675 +#: lib/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:959 +#: lib/luks2/luks2_json_metadata.c:1244 +#, 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 "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:99 -msgid "No space for new keyslot." -msgstr "Inget utrymme för ny nyckelplats." - -#: lib/luks2/luks2_json_format.c:158 +#: 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:195 +#: lib/luks2/luks2_json_format.c:271 #, c-format msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "VARNING: nyckelplatsområdet (% byte) är väldigt liten, tillgängligt LUKS2-nyckelplatsantal är väldigt begränsat.\n" -#: lib/luks2/luks2_json_metadata.c:866 lib/luks2/luks2_json_metadata.c:982 -#: lib/luks2/luks2_json_metadata.c:1055 lib/luks2/luks2_keyslot_luks2.c:105 -#: lib/luks2/luks2_keyslot_luks2.c:128 +#: 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_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:878 lib/luks2/luks2_json_metadata.c:1149 -#: lib/luks2/luks2_keyslot.c:431 lib/luks2/luks2_keyslot_luks2.c:40 -#: lib/luks2/luks2_keyslot_luks2.c:69 -#, c-format -msgid "Failed to acquire write lock on device %s." -msgstr "Misslyckades med att få skrivlås på enheten %s." - -#: lib/luks2/luks2_json_metadata.c:1072 +#: lib/luks2/luks2_json_metadata.c:1167 #, 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:1113 +#: lib/luks2/luks2_json_metadata.c:1208 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:1119 +#: lib/luks2/luks2_json_metadata.c:1214 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:1126 +#: lib/luks2/luks2_json_metadata.c:1221 #, c-format msgid "Device %s %s%s%s%s" msgstr "Enhet %s %s%s%s%s" -#: lib/luks2/luks2_json_metadata.c:1127 +#: lib/luks2/luks2_json_metadata.c:1222 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:1128 +#: lib/luks2/luks2_json_metadata.c:1223 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:1130 +#: lib/luks2/luks2_json_metadata.c:1225 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1133,7 +1336,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:1132 +#: lib/luks2/luks2_json_metadata.c:1227 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1143,69 +1346,327 @@ 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:1234 +#: lib/luks2/luks2_json_metadata.c:1323 #, c-format msgid "Ignored unknown flag %s." msgstr "Ignorerade okänd flagga %s." -#: lib/luks2/luks2_json_metadata.c:1869 +#: lib/luks2/luks2_json_metadata.c:2010 lib/luks2/luks2_reencrypt.c:1746 +#, c-format +msgid "Missing key for dm-crypt segment %u" +msgstr "Saknar nyckel för dm-crypt-segmentet %u" + +#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764 +msgid "Failed to set dm-crypt segment." +msgstr "Misslyckades med att läsa dm-crypt-segment." + +#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770 +msgid "Failed to set dm-linear segment." +msgstr "Misslyckades med att läsa dm-linear-segment." + +#: lib/luks2/luks2_json_metadata.c:2155 +msgid "Unsupported device integrity configuration." +msgstr "Integritetskonfiguration som ej stöds på enheten." + +#: lib/luks2/luks2_json_metadata.c:2241 +msgid "Reencryption in-progress. Cannot deactivate device." +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 +#, c-format +msgid "Failed to replace suspended device %s with dm-error target." +msgstr "Misslyckades med att ersätta inaktiverad enhet %s med målet dm-error." + +#: lib/luks2/luks2_json_metadata.c:2332 msgid "Failed to read LUKS2 requirements." msgstr "Misslyckades med att läsa LUKS2-krav." -#: lib/luks2/luks2_json_metadata.c:1876 +#: lib/luks2/luks2_json_metadata.c:2339 msgid "Unmet LUKS2 requirements detected." msgstr "Ej uppfyllt LUKS2-krav identifierat." -#: lib/luks2/luks2_json_metadata.c:1884 -msgid "Offline reencryption in progress. Aborting." -msgstr "Frånkopplad kryptering pågår. Avbryter." +#: lib/luks2/luks2_json_metadata.c:2347 +msgid "Operation incompatible with device marked for legacy reencryption. Aborting." +msgstr "Åtgärden inkompatibel med enhet markerad för föråldrad omkryptering. Avbryter." + +#: lib/luks2/luks2_json_metadata.c:2349 +msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." +msgstr "Åtgärden inkompatibel med enhet markerad för LUKS2-omkryptering. Avbryter." + +#: lib/luks2/luks2_keyslot.c:547 lib/luks2/luks2_keyslot.c:584 +msgid "Not enough available memory to open a keyslot." +msgstr "Inte nog med minne för att öppna en nyckelplats." + +#: lib/luks2/luks2_keyslot.c:549 lib/luks2/luks2_keyslot.c:586 +msgid "Keyslot open failed." +msgstr "Misslyckades med att öppna nyckelplats." + +#: lib/luks2/luks2_keyslot_luks2.c:53 lib/luks2/luks2_keyslot_luks2.c:108 +#, c-format +msgid "Cannot use %s-%s cipher for keyslot encryption." +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:474 +#: lib/luks2/luks2_luks1_convert.c:482 #, c-format -msgid "Can not check status of device with uuid: %s." +msgid "Cannot check status of device with uuid: %s." msgstr "Det går inte kontrollera status för enheten med uuid: %s." -#: lib/luks2/luks2_luks1_convert.c:500 +#: lib/luks2/luks2_luks1_convert.c:508 msgid "Unable to convert header with LUKSMETA additional metadata." msgstr "Det går inte att konvertera huvud med ytterligare metadata för LUKSMETA." -#: lib/luks2/luks2_luks1_convert.c:537 +#: lib/luks2/luks2_luks1_convert.c:548 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:577 lib/luks2/luks2_luks1_convert.c:854 +#: lib/luks2/luks2_luks1_convert.c:599 +msgid "Unable to move keyslot area. LUKS2 keyslots area too small." +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 msgid "Unable to move keyslot area." msgstr "Kunde inte flytta nyckelplatsområde." -#: lib/luks2/luks2_luks1_convert.c:672 +#: lib/luks2/luks2_luks1_convert.c:697 +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 - 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." msgstr "Det går inte att konvertera till LUKS1-format - kontrollsummor för nyckelplatser är inte LUKS1-kompatibla." -#: lib/luks2/luks2_luks1_convert.c:684 +#: 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:692 +#: lib/luks2/luks2_luks1_convert.c:725 #, c-format msgid "Cannot convert to LUKS1 format - LUKS2 header contains %u token(s)." msgstr "Det går inte att konvertera till LUKS1-format - LUKS2-huvud innehåller %u token." -#: lib/luks2/luks2_luks1_convert.c:706 +#: lib/luks2/luks2_luks1_convert.c:739 #, c-format msgid "Cannot convert to LUKS1 format - keyslot %u is in invalid state." msgstr "Det går inte att konvertera till LUKS1-format - nyckelplats %u är i ogiltigt tillstånd." -#: lib/luks2/luks2_luks1_convert.c:711 +#: lib/luks2/luks2_luks1_convert.c:744 #, c-format msgid "Cannot convert to LUKS1 format - slot %u (over maximum slots) is still active." msgstr "Det går inte att konvertera till LUKS1-format - plats %u (av maximalt antal platser) är fortfarande aktiv." -#: lib/luks2/luks2_luks1_convert.c:716 +#: lib/luks2/luks2_luks1_convert.c:749 #, c-format 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 +#, c-format +msgid "Hotzone size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Hotzone-storleken måste vara en multipel av beräknad zonjustering (%zu-byte)." + +#: lib/luks2/luks2_reencrypt.c:897 +#, c-format +msgid "Device size must be multiple of calculated zone alignment (%zu bytes)." +msgstr "Enhetsstorleken måste vara en multipel av beräknad zonstorlek (%zu byte)." + +#: lib/luks2/luks2_reencrypt.c:941 +#, c-format +msgid "Unsupported resilience mode %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 +msgid "Failed to initialize old segment storage wrapper." +msgstr "Misslyckades med att initiera gammal segmentlagringsinbäddning." + +#: lib/luks2/luks2_reencrypt.c:1172 lib/luks2/luks2_reencrypt.c:1291 +msgid "Failed to initialize new segment storage wrapper." +msgstr "Misslyckades med att initiera ny segmentlagringsinbäddning." + +#: lib/luks2/luks2_reencrypt.c:1340 +msgid "Failed to read checksums for current hotzone." +msgstr "Misslyckades med att läsa kontrollsummor från aktuell varm zon." + +#: lib/luks2/luks2_reencrypt.c:1347 lib/luks2/luks2_reencrypt.c:3038 +#, c-format +msgid "Failed to read hotzone area starting at %." +msgstr "Misslyckades med att läsa område för varm zon med början %." + +#: lib/luks2/luks2_reencrypt.c:1366 +#, c-format +msgid "Failed to decrypt sector %zu." +msgstr "Misslyckades med avkryptera sektor %zu." + +#: lib/luks2/luks2_reencrypt.c:1372 +#, c-format +msgid "Failed to recover sector %zu." +msgstr "Misslyckades med återhämta sektor %zu." + +#: lib/luks2/luks2_reencrypt.c:1867 +#, c-format +msgid "Source and target device sizes don't match. Source %, target: %." +msgstr "Käll- och målenhetstorlekar stämmer inte överens. Källa %, mål: %." + +#: lib/luks2/luks2_reencrypt.c:1965 +#, c-format +msgid "Failed to activate hotzone device %s." +msgstr "Misslyckades med att aktivera varm zon-enhet %s." + +#: lib/luks2/luks2_reencrypt.c:1982 +#, c-format +msgid "Failed to activate overlay device %s with actual origin table." +msgstr "Misslyckades med att aktivera överlagringsenheten %s med aktuell ursprungstabell." + +#: lib/luks2/luks2_reencrypt.c:1989 +#, c-format +msgid "Failed to load new mapping for device %s." +msgstr "Misslyckades med att läsa in ny mappning för enhet %s." + +#: lib/luks2/luks2_reencrypt.c:2060 +msgid "Failed to refresh reencryption devices stack." +msgstr "Misslyckades med att uppdatera listan över omkrypteringsenheter." + +#: lib/luks2/luks2_reencrypt.c:2216 +msgid "Failed to set new keyslots area size." +msgstr "Misslyckades med att sätta en ny storlek på nyckelplatsområdet." + +#: lib/luks2/luks2_reencrypt.c:2318 +#, c-format +msgid "Data shift is not aligned to requested encryption sector size (% bytes)." +msgstr "Dataskiftning är inte justerad till begärd sektorstorlek (% byte)." + +#: lib/luks2/luks2_reencrypt.c:2339 +#, c-format +msgid "Data device is not aligned to requested encryption sector size (% bytes)." +msgstr "Dataenhet är inte justerad till begärd sektorstorlek (% byte)." + +#: lib/luks2/luks2_reencrypt.c:2360 +#, c-format +msgid "Data shift (% sectors) is less than future data offset (% sectors)." +msgstr "Dataskiftning (% sektorer) är mindre än framtida dataförskjutning (% sektorer)." + +#: lib/luks2/luks2_reencrypt.c:2366 lib/luks2/luks2_reencrypt.c:2779 +#: lib/luks2/luks2_reencrypt.c:2800 +#, c-format +msgid "Failed to open %s in exclusive mode (already mapped or mounted)." +msgstr "Misslyckades med att öppna %s i exklusivt läge (redan mappad eller monterad)." + +#: lib/luks2/luks2_reencrypt.c:2534 +msgid "Device not marked for LUKS2 reencryption." +msgstr "Enheten är inte markerad för LUKS2-omkryptering." + +#: lib/luks2/luks2_reencrypt.c:2540 lib/luks2/luks2_reencrypt.c:3295 +msgid "Failed to load LUKS2 reencryption context." +msgstr "Misslyckades med att läsa in LUKS2-omkrypteringskontext." + +#: lib/luks2/luks2_reencrypt.c:2619 +msgid "Failed to get reencryption state." +msgstr "Misslyckades med att erhålla status för omkryptering." + +#: lib/luks2/luks2_reencrypt.c:2623 +msgid "Device is not in reencryption." +msgstr "Enheten är inte i omkryptering." + +#: lib/luks2/luks2_reencrypt.c:2630 +msgid "Reencryption process is already running." +msgstr "Omkrypteringsprocessen pågår redan." + +#: lib/luks2/luks2_reencrypt.c:2632 +msgid "Failed to acquire reencryption lock." +msgstr "Misslyckades med att erhålla skrivlås för omkryptering." + +#: lib/luks2/luks2_reencrypt.c:2650 +msgid "Cannot proceed with reencryption. Run reencryption recovery first." +msgstr "Det går inte att fortsätta med omkryptering. Kör återställning av omkryptering först." + +#: lib/luks2/luks2_reencrypt.c:2750 +msgid "Active device size and requested reencryption size don't match." +msgstr "Aktiv enhetsstorlek och begärd omkrypteringsstorlek skiljer sig åt." + +#: lib/luks2/luks2_reencrypt.c:2764 +msgid "Illegal device size requested in reencryption parameters." +msgstr "Ogiltig enhetsstorlek begärd i omkrypteringsparametrarna." + +#: lib/luks2/luks2_reencrypt.c:2834 +msgid "Reencryption in-progress. Cannot perform recovery." +msgstr "Omkryptering pågår redan. Det går inte att utföra återhämtning." + +#: lib/luks2/luks2_reencrypt.c:2906 +msgid "LUKS2 reencryption already initialized in metadata." +msgstr "LUKS2-omkryptering är redan initierad i metadata." + +#: lib/luks2/luks2_reencrypt.c:2913 +msgid "Failed to initialize LUKS2 reencryption in metadata." +msgstr "Misslyckades med att initiera LUKS2-omkryptering i metadata." + +#: lib/luks2/luks2_reencrypt.c:3004 +msgid "Failed to set device segments for next reencryption hotzone." +msgstr "Misslyckades med sätta enhetssegment för nästa varm zon-omkryptering." + +#: lib/luks2/luks2_reencrypt.c:3046 +msgid "Failed to write reencryption resilience metadata." +msgstr "Misslyckades med att skriva motståndsmetadata för omkryptering." + +#: lib/luks2/luks2_reencrypt.c:3053 +msgid "Decryption failed." +msgstr "Avkryptering misslyckades." + +#: lib/luks2/luks2_reencrypt.c:3058 +#, c-format +msgid "Failed to write hotzone area starting at %." +msgstr "Misslyckades med att skriva område för varm zon med början vid %." + +#: lib/luks2/luks2_reencrypt.c:3063 +msgid "Failed to sync data." +msgstr "Misslyckades med att synkronisera data." + +#: lib/luks2/luks2_reencrypt.c:3071 +msgid "Failed to update metadata after current reencryption hotzone completed." +msgstr "Misslyckades med att uppdatera metadata efter aktuell varm zon för omkrypteringär färdigställd." + +#: lib/luks2/luks2_reencrypt.c:3138 +msgid "Failed to write LUKS2 metadata." +msgstr "Misslyckades med att skriva LUKS2-metadata." + +#: lib/luks2/luks2_reencrypt.c:3161 +msgid "Failed to wipe backup segment data." +msgstr "Misslyckades med att radera säkerhetskopia av segmentdata." + +#: lib/luks2/luks2_reencrypt.c:3174 +msgid "Failed to disable reencryption requirement flag." +msgstr "Misslyckades med att inaktivera flaggan för omkrypteringskrav." + +#: lib/luks2/luks2_reencrypt.c:3182 +#, c-format +msgid "Fatal error while reencrypting chunk starting at %, % sectors long." +msgstr "Ödesdigert fel vid omkrypteringschunk med start vid %, % sektorer lång." + +#: lib/luks2/luks2_reencrypt.c:3191 +msgid "Do not resume the device unless replaced with error target manually." +msgstr "Återuppta inte enheten om inte den ersatts med felmål manuellt." + +#: lib/luks2/luks2_reencrypt.c:3240 +msgid "Cannot proceed with reencryption. Unexpected reencryption status." +msgstr "Det går inte att fortsätta med omkryptering. Oväntat omkrypteringsläge." + +#: lib/luks2/luks2_reencrypt.c:3246 +msgid "Missing or invalid reencrypt context." +msgstr "Saknat eller ogiltigt omkrypteringskontext." + +#: lib/luks2/luks2_reencrypt.c:3253 +msgid "Failed to initialize reencryption device stack." +msgstr "Misslyckades med att initiera listan för omkrypteringsenheter." + +#: lib/luks2/luks2_reencrypt.c:3272 lib/luks2/luks2_reencrypt.c:3308 +msgid "Failed to update reencryption context." +msgstr "Misslyckades med att uppdatera omkrypteringskontext." + #: lib/luks2/luks2_token.c:262 msgid "No free token slot." msgstr "Ingen fri plats för token." @@ -1215,62 +1676,69 @@ msgstr "Ingen fri plats för token." msgid "Failed to create builtin token %s." msgstr "Misslyckades med att skapa inbyggd token %s." -#: src/cryptsetup.c:141 +#: src/cryptsetup.c:164 msgid "Can't do passphrase verification on non-tty inputs." msgstr "Kan inte verifiera lösenfras på icke-tty-ingångar." -#: src/cryptsetup.c:182 +#: src/cryptsetup.c:221 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:212 src/cryptsetup.c:849 src/cryptsetup.c:1088 -#: src/cryptsetup_reencrypt.c:749 src/cryptsetup_reencrypt.c:814 +#: 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 msgid "No known cipher specification pattern detected." msgstr "Inget känt chifferspecifikationsmönster kunde identifieras." -#: src/cryptsetup.c:220 +#: src/cryptsetup.c:259 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:228 +#: src/cryptsetup.c:267 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:268 +#: src/cryptsetup.c:307 #, 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:274 src/cryptsetup.c:969 src/cryptsetup.c:1065 -#: src/cryptsetup.c:1138 src/cryptsetup.c:1763 src/integritysetup.c:230 +#: 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 msgid "Operation aborted.\n" msgstr "Åtgärd avbruten.\n" -#: src/cryptsetup.c:342 +#: src/cryptsetup.c:381 msgid "Option --key-file is required." msgstr "Flaggan --key-file krävs." -#: src/cryptsetup.c:395 +#: src/cryptsetup.c:434 msgid "Enter VeraCrypt PIM: " msgstr "Ange VeraCrypt PIM: " -#: src/cryptsetup.c:404 +#: src/cryptsetup.c:443 msgid "Invalid PIM value: parse error." msgstr "Ogiltigt PIM-värde:tolkningsfel." -#: src/cryptsetup.c:407 +#: src/cryptsetup.c:446 msgid "Invalid PIM value: 0." msgstr "Ogiltigt PIM-värde: 0." -#: src/cryptsetup.c:410 +#: src/cryptsetup.c:449 msgid "Invalid PIM value: outside of range." msgstr "Ogiltigt PIM-värde:utanför intervallet." -#: src/cryptsetup.c:433 +#: src/cryptsetup.c:472 msgid "No device header detected with this passphrase." msgstr "Inget enhetshuvud finns tillgängligt med denna lösenfras." -#: src/cryptsetup.c:495 src/cryptsetup.c:1790 +#: src/cryptsetup.c:541 +#, c-format +msgid "Device %s is not a valid BITLK device." +msgstr "Enheten %s är inte en giltig BITLK-enhet." + +#: src/cryptsetup.c:576 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1280,72 +1748,88 @@ 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:574 +#: src/cryptsetup.c:673 #, 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:602 +#: src/cryptsetup.c:701 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:727 +#: src/cryptsetup.c:838 msgid "Benchmark interrupted." msgstr "Prestandamätning avbruten." -#: src/cryptsetup.c:748 +#: src/cryptsetup.c:859 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s N/A\n" -#: src/cryptsetup.c:750 +#: src/cryptsetup.c:861 #, 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:764 +#: src/cryptsetup.c:875 #, c-format msgid "%-10s N/A\n" msgstr "%-10s N/A\n" -#: src/cryptsetup.c:766 +#: src/cryptsetup.c:877 #, 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:790 +#: src/cryptsetup.c:901 msgid "Result of benchmark is not reliable." msgstr "Resultat från prestandamätningen är inte pålitligt." -#: src/cryptsetup.c:841 +#: src/cryptsetup.c:951 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:875 +#: src/cryptsetup.c:971 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algoritm | Nyckel | Kryptering | Avkryptering\n" -#: src/cryptsetup.c:879 +#: src/cryptsetup.c:975 #, c-format -msgid "Cipher %s is not available." -msgstr "Chiffret %s är inte tillgängligt." +msgid "Cipher %s (with %i bits key) is not available." +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:899 +#: src/cryptsetup.c:994 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algoritm | Nyckel | Kryptering | AVkryptering\n" -#: src/cryptsetup.c:908 +#: src/cryptsetup.c:1003 msgid "N/A" msgstr "N/A" -#: src/cryptsetup.c:968 +#: src/cryptsetup.c:1083 +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?" + +#: src/cryptsetup.c:1089 +msgid "Really proceed with LUKS2 reencryption recovery?" +msgstr "Vill du verkligen fortsätta med LUKS2-omkrypteringsåterställning?" + +#: src/cryptsetup.c:1098 +msgid "Enter passphrase for reencryption recovery: " +msgstr "Ange lösenfras för omkrypteringsåterhämtning: " + +#: src/cryptsetup.c:1141 msgid "Really try to repair LUKS device header?" msgstr "Vill du verkligen försöka att reparera LUKS-enhetshuvud?" -#: src/cryptsetup.c:984 src/integritysetup.c:144 +#: src/cryptsetup.c:1160 src/integritysetup.c:146 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" @@ -1353,133 +1837,150 @@ 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:1006 src/integritysetup.c:166 +#: src/cryptsetup.c:1182 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Det går inte att inaktivera temporär enhet %s." -#: src/cryptsetup.c:1050 +#: src/cryptsetup.c:1231 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:1055 src/cryptsetup.c:1115 +#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 msgid "Unsupported LUKS2 metadata size options." msgstr "Flaggorna för storlekar på LUKS2-metadata stöds inte." -#: src/cryptsetup.c:1072 +#: src/cryptsetup.c:1253 #, c-format msgid "Cannot create header file %s." msgstr "Det går inte att skapa huvudfil %s." -#: src/cryptsetup.c:1095 src/integritysetup.c:192 src/integritysetup.c:201 -#: src/integritysetup.c:210 src/integritysetup.c:276 src/integritysetup.c:285 -#: src/integritysetup.c:295 +#: 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 msgid "No known integrity specification pattern detected." msgstr "Inga kända integritetspecifikationsmönster identifierat." -#: src/cryptsetup.c:1108 +#: src/cryptsetup.c:1289 #, c-format msgid "Cannot use %s as on-disk header." msgstr "Det går inte att använda %s som diskhuvud." -#: src/cryptsetup.c:1132 src/integritysetup.c:224 +#: src/cryptsetup.c:1313 src/integritysetup.c:227 #, 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:1173 src/cryptsetup.c:1484 src/cryptsetup.c:1551 -#: src/cryptsetup.c:1646 src/cryptsetup.c:1712 +#: 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 msgid "Failed to set pbkdf parameters." msgstr "Misslyckades med att sätta pbkdf-parametrar." -#: src/cryptsetup.c:1242 +#: src/cryptsetup.c:1439 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:1284 +#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." +msgstr "Det går inte att avgöra volymens nyckelstorlek för LUKS utan nyckelplatser, använd flaggen --key-size." + +#: src/cryptsetup.c:1488 msgid "Device activated but cannot make flags persistent." msgstr "Enheten aktiverad men kan inte spara undan flaggorna." -#: src/cryptsetup.c:1365 +#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "Nyckelplats %d markerad för borttagning." -#: src/cryptsetup.c:1368 src/cryptsetup.c:1706 -#, c-format -msgid "Keyslot %d is not active." -msgstr "Nyckelplats %d är inte aktiv." - -#: src/cryptsetup.c:1377 src/cryptsetup.c:1438 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 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:1378 +#: src/cryptsetup.c:1582 msgid "Enter any remaining passphrase: " msgstr "Ange eventuell återstående lösenfras: " -#: src/cryptsetup.c:1379 src/cryptsetup.c:1440 +#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Åtgärden avbröts, nyckelplatsen raderades INTE.\n" -#: src/cryptsetup.c:1417 +#: src/cryptsetup.c:1621 msgid "Enter passphrase to be deleted: " msgstr "Ange lösenfras att ta bort: " -#: src/cryptsetup.c:1435 -#, c-format -msgid "Key slot %d selected for deletion." -msgstr "Nyckelplats %d markerad för borttagning." - -#: src/cryptsetup.c:1498 src/cryptsetup.c:1565 src/cryptsetup.c:1599 +#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 msgid "Enter new passphrase for key slot: " msgstr "Ange ny lösenfras för nyckelplats: " -#: src/cryptsetup.c:1582 src/cryptsetup_reencrypt.c:1352 +#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Ange valfri existerande lösenfras: " -#: src/cryptsetup.c:1650 +#: src/cryptsetup.c:1861 msgid "Enter passphrase to be changed: " msgstr "Ange lösenfras att ändra: " -#: src/cryptsetup.c:1666 src/cryptsetup_reencrypt.c:1338 +#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Ange ny lösenfras: " -#: src/cryptsetup.c:1716 +#: src/cryptsetup.c:1927 msgid "Enter passphrase for keyslot to be converted: " msgstr "Ange lösenfras för nyckelplats att konvertera: " -#: src/cryptsetup.c:1740 +#: src/cryptsetup.c:1951 msgid "Only one device argument for isLuks operation is supported." msgstr "Endast ett enhetsargument för operationen isLuks stöds." -#: src/cryptsetup.c:1924 src/cryptsetup.c:1945 +#: src/cryptsetup.c:2001 +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 "" +"Utskrift av huvudet med volymnyckel är känslig information\n" +"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 +#, c-format +msgid "Keyslot %d does not contain unbound key." +msgstr "Nyckelplats %d innehåller inte obunden nyckel." + +#: src/cryptsetup.c:2072 +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 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 msgid "Option --header-backup-file is required." msgstr "Flaggan --header-backup-file krävs." -#: src/cryptsetup.c:1975 +#: src/cryptsetup.c:2258 #, c-format msgid "%s is not cryptsetup managed device." msgstr "%s är inte en cryptsetup-hanterad enhet." -#: src/cryptsetup.c:1986 +#: src/cryptsetup.c:2269 #, c-format msgid "Refresh is not supported for device type %s" msgstr "Att uppdatera stöds inte för enhetstypen %s" -#: src/cryptsetup.c:2024 +#: src/cryptsetup.c:2311 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Okänd metadata för enhetstypen %s." -#: src/cryptsetup.c:2027 +#: src/cryptsetup.c:2314 msgid "Command requires device and mapped name as arguments." msgstr "Kommandot kräver enhet och mappat namn som argument." -#: src/cryptsetup.c:2049 +#: src/cryptsetup.c:2336 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1488,213 +1989,334 @@ 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:2056 +#: src/cryptsetup.c:2343 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Åtgärden avbryten, nyckelplatser raderades EJ.\n" -#: src/cryptsetup.c:2093 +#: src/cryptsetup.c:2380 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "Ogiltig LUKS-typ, endast luks1 och luks2 stöds." -#: src/cryptsetup.c:2111 +#: src/cryptsetup.c:2398 #, c-format msgid "Device is already %s type." msgstr "Enheten är redan av %s-typ." -#: src/cryptsetup.c:2116 +#: src/cryptsetup.c:2403 #, 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:2122 +#: src/cryptsetup.c:2409 msgid "Operation aborted, device was NOT converted.\n" msgstr "Åtgärden avbröts, enheten konverterades INTE.\n" -#: src/cryptsetup.c:2162 +#: src/cryptsetup.c:2449 msgid "Option --priority, --label or --subsystem is missing." msgstr "Saknar flaggan --priority, --label eller --subsystem." -#: src/cryptsetup.c:2196 src/cryptsetup.c:2229 src/cryptsetup.c:2252 +#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539 #, c-format msgid "Token %d is invalid." msgstr "Token %d är ogiltig." -#: src/cryptsetup.c:2199 src/cryptsetup.c:2255 +#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 #, c-format msgid "Token %d in use." msgstr "Token %d används." -#: src/cryptsetup.c:2206 +#: src/cryptsetup.c:2493 #, c-format msgid "Failed to add luks2-keyring token %d." msgstr "Misslyckades med att lägga till luks2-nyckelringsstoken %d." -#: src/cryptsetup.c:2215 src/cryptsetup.c:2277 +#: src/cryptsetup.c:2502 src/cryptsetup.c:2564 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "Misslyckades med att tilldela token %d till nyckelplats %d." -#: src/cryptsetup.c:2232 +#: src/cryptsetup.c:2519 #, c-format msgid "Token %d is not in use." msgstr "Token %d används ej." -#: src/cryptsetup.c:2267 +#: src/cryptsetup.c:2554 msgid "Failed to import token from file." msgstr "Misslyckades med att importera token från fil." -#: src/cryptsetup.c:2292 +#: src/cryptsetup.c:2579 #, c-format msgid "Failed to get token %d for export." msgstr "Misslyckades med att hämta token %d för export." -#: src/cryptsetup.c:2307 +#: src/cryptsetup.c:2594 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:2313 src/cryptsetup.c:2321 +#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 msgid "Action requires specific token. Use --token-id parameter." msgstr "Åtgärden kräver specifik token. Använd parametern --token-id." -#: src/cryptsetup.c:2326 +#: src/cryptsetup.c:2613 #, c-format msgid "Invalid token operation %s." msgstr "Ogiltig tokenåtgärd %s." -#: src/cryptsetup.c:2366 +#: src/cryptsetup.c:2668 +#, c-format +msgid "Auto-detected active dm device '%s' for data device %s.\n" +msgstr "Auto-identifierade aktiv dm-enhet ”%s” för dataenheten %s.\n" + +#: src/cryptsetup.c:2672 +#, c-format +msgid "Device %s is not a block device.\n" +msgstr "Enheten %s är inte en giltig blockenhet.\n" + +#: src/cryptsetup.c:2674 +#, c-format +msgid "Failed to auto-detect device %s holders." +msgstr "Misslyckades med att identifiera kopplingarna till enhet %s." + +#: src/cryptsetup.c:2676 +#, c-format +msgid "" +"Unable to decide if device %s is activated or not.\n" +"Are you sure you want to proceed with reencryption in offline mode?\n" +"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 +msgid "Invalid LUKS device type." +msgstr "Ogiltig LUKS-enhetstyp." + +#: src/cryptsetup.c:2761 +msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." +msgstr "Kryptering utan frånkopplat huvud (--header) är inte möjligt utan att minska datastorleken på enheten (--reduce-device-size)." + +#: src/cryptsetup.c:2766 +msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." +msgstr "Begärd dataförskjutning måste vara mindre än, eller lika med halva av parametern --reduce-device-size." + +#: src/cryptsetup.c:2775 +#, c-format +msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" +msgstr "Justera värdet av --reduce-device-size-värdet till dubbla --offset % (sektorer).\n" + +#: src/cryptsetup.c:2779 +msgid "Encryption is supported only for LUKS2 format." +msgstr "Kryptering stöds endast för formatet LUKS2." + +#: src/cryptsetup.c:2801 +#, c-format +msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" +msgstr "Identifierade LUKS-enhet på %s. Vill du kryptera LUKS-enheten igen?" + +#: src/cryptsetup.c:2816 +#, c-format +msgid "Temporary header file %s already exists. Aborting." +msgstr "Tillfällig huvudfil %s finns redan. Avbryter." + +#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#, c-format +msgid "Cannot create temporary header file %s." +msgstr "Det går inte att skapa tillfällig huvudfil %s." + +#: src/cryptsetup.c:2889 +#, 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:3053 src/cryptsetup.c:3059 +msgid "Not enough free keyslots for reencryption." +msgstr "Inte nog med fria nyckelplatser för omkryptering." + +#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +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 precis en aktiv nyckelplats." + +#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341 +#: src/cryptsetup_reencrypt.c:1352 +#, c-format +msgid "Enter passphrase for key slot %d: " +msgstr "Ange lösenfras för nyckelplats %d: " + +#: src/cryptsetup.c:3096 +#, c-format +msgid "Enter passphrase for key slot %u: " +msgstr "Ange lösenfras för nyckelplats %u: " + +#: src/cryptsetup.c:3263 +msgid "Command requires device as argument." +msgstr "Kommandot kräver en enhet som argument." + +#: src/cryptsetup.c:3285 +msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." +msgstr "Stödjer endast LUKS2-formatet. Använd verktyget cryptsetup-reencrypt för LUKS1." + +#: src/cryptsetup.c:3297 +msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." +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 +msgid "Reencryption of device with integrity profile is not supported." +msgstr "Kryptering för enhet med integritetsprofil stöds ej." + +#: src/cryptsetup.c:3315 +msgid "LUKS2 reencryption already initialized. Aborting operation." +msgstr "LUKS2-omkryptering är redan initierad. Avbryter åtgärd." + +#: src/cryptsetup.c:3319 +msgid "LUKS2 device is not in reencryption." +msgstr "LUKS2-enheten är inte i omkryptering." + +#: src/cryptsetup.c:3346 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:2366 -msgid "open device as mapping " -msgstr "öppna enhet som mappning " +#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +msgid "open device as " +msgstr "öppna enhet som " -#: src/cryptsetup.c:2367 src/cryptsetup.c:2368 src/cryptsetup.c:2369 -#: src/veritysetup.c:363 src/veritysetup.c:364 src/integritysetup.c:464 -#: src/integritysetup.c:465 +#: 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 msgid "" msgstr "" -#: src/cryptsetup.c:2367 +#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "stäng enhet (ta bort mappning)" -#: src/cryptsetup.c:2368 +#: src/cryptsetup.c:3348 msgid "resize active device" msgstr "ändra storlek på aktiv enhet" -#: src/cryptsetup.c:2369 +#: src/cryptsetup.c:3349 msgid "show device status" msgstr "visa enhetsstatus" -#: src/cryptsetup.c:2370 +#: src/cryptsetup.c:3350 msgid "[--cipher ]" msgstr "[--cipher ]" -#: src/cryptsetup.c:2370 +#: src/cryptsetup.c:3350 msgid "benchmark cipher" msgstr "prestandamät chiffer" -#: src/cryptsetup.c:2371 src/cryptsetup.c:2372 src/cryptsetup.c:2373 -#: src/cryptsetup.c:2374 src/cryptsetup.c:2381 src/cryptsetup.c:2382 -#: src/cryptsetup.c:2383 src/cryptsetup.c:2384 src/cryptsetup.c:2385 -#: src/cryptsetup.c:2386 src/cryptsetup.c:2387 src/cryptsetup.c:2388 +#: 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 msgid "" msgstr "" -#: src/cryptsetup.c:2371 +#: src/cryptsetup.c:3351 msgid "try to repair on-disk metadata" msgstr "försök att reparera metadata på disken" -#: src/cryptsetup.c:2372 +#: src/cryptsetup.c:3352 +msgid "reencrypt LUKS2 device" +msgstr "omkryptering av LUKS2-enhet" + +#: src/cryptsetup.c:3353 msgid "erase all keyslots (remove encryption key)" msgstr "ta bort alla nyckelplatser (ta bort krypteringsnyckeln)" -#: src/cryptsetup.c:2373 +#: src/cryptsetup.c:3354 msgid "convert LUKS from/to LUKS2 format" msgstr "konvertera LUKS från/till LUKS2-format" -#: src/cryptsetup.c:2374 +#: src/cryptsetup.c:3355 msgid "set permanent configuration options for LUKS2" msgstr "ange permanenta konfigurationsflaggor för LUKS2" -#: src/cryptsetup.c:2375 src/cryptsetup.c:2376 +#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 msgid " []" msgstr " []" -#: src/cryptsetup.c:2375 +#: src/cryptsetup.c:3356 msgid "formats a LUKS device" msgstr "formaterar en LUKS-enhet" -#: src/cryptsetup.c:2376 +#: src/cryptsetup.c:3357 msgid "add key to LUKS device" msgstr "lägg till nyckel till LUKS-enhet" -#: src/cryptsetup.c:2377 src/cryptsetup.c:2378 src/cryptsetup.c:2379 +#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 msgid " []" msgstr " []" -#: src/cryptsetup.c:2377 +#: src/cryptsetup.c:3358 msgid "removes supplied key or key file from LUKS device" msgstr "tar bort angiven nyckel eller nyckelfil från LUKS-enhet" -#: src/cryptsetup.c:2378 +#: src/cryptsetup.c:3359 msgid "changes supplied key or key file of LUKS device" msgstr "ändrar angiven nyckel eller nyckelfil för LUKS-enhet" -#: src/cryptsetup.c:2379 +#: src/cryptsetup.c:3360 msgid "converts a key to new pbkdf parameters" msgstr "konverterar en nyckel till nya pbkdf-parametrar" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:3361 msgid " " msgstr " " -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:3361 msgid "wipes key with number from LUKS device" msgstr "rensar nyckeln med nummer från LUKS-enhet" -#: src/cryptsetup.c:2381 +#: src/cryptsetup.c:3362 msgid "print UUID of LUKS device" msgstr "skriv ut UUID för LUKS-enhet" -#: src/cryptsetup.c:2382 +#: src/cryptsetup.c:3363 msgid "tests for LUKS partition header" msgstr "testar för LUKS-partitionshuvud" -#: src/cryptsetup.c:2383 +#: src/cryptsetup.c:3364 msgid "dump LUKS partition information" msgstr "skriver ut information om LUKS-partition" -#: src/cryptsetup.c:2384 +#: src/cryptsetup.c:3365 msgid "dump TCRYPT device information" msgstr "skriver ut information om TCRYPT-partition" -#: src/cryptsetup.c:2385 +#: src/cryptsetup.c:3366 +msgid "dump BITLK device information" +msgstr "skriv ut BITLK-enhetsinformation" + +#: src/cryptsetup.c:3367 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:2386 +#: src/cryptsetup.c:3368 msgid "Resume suspended LUKS device" msgstr "Återuppta LUKS-enhet i vänteläge" -#: src/cryptsetup.c:2387 +#: src/cryptsetup.c:3369 msgid "Backup LUKS device header and keyslots" msgstr "Säkerhetskopiera huvud och nyckelplatser från LUKS-enhet" -#: src/cryptsetup.c:2388 +#: src/cryptsetup.c:3370 msgid "Restore LUKS device header and keyslots" msgstr "Återställ huvud och nyckelplatser för LUKS-enhet" -#: src/cryptsetup.c:2389 +#: src/cryptsetup.c:3371 msgid " " msgstr " " -#: src/cryptsetup.c:2389 +#: src/cryptsetup.c:3371 msgid "Manipulate LUKS2 tokens" msgstr "Manipulera LUKS2-token" -#: src/cryptsetup.c:2407 src/veritysetup.c:380 src/integritysetup.c:481 +#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -1702,19 +2324,19 @@ msgstr "" "\n" "<åtgärd> är en av:\n" -#: src/cryptsetup.c:2413 +#: src/cryptsetup.c:3395 msgid "" "\n" "You can also use old syntax aliases:\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, bitlkClose\n" 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:2417 +#: src/cryptsetup.c:3399 #, c-format msgid "" "\n" @@ -1729,7 +2351,7 @@ msgstr "" " är numret för LUKS-nyckelplatsen att ändra\n" " valfri nyckelfil för den nya nyckeln för luksAddKey-åtgärden\n" -#: src/cryptsetup.c:2424 +#: src/cryptsetup.c:3406 #, c-format msgid "" "\n" @@ -1738,7 +2360,7 @@ msgstr "" "\n" "Inkompilerat standardmetadataformat är %s (för luksFormat-åtgärd).\n" -#: src/cryptsetup.c:2429 +#: src/cryptsetup.c:3411 #, c-format msgid "" "\n" @@ -1755,7 +2377,7 @@ msgstr "" "Standard-PBKDF för LUKS2: %s\n" "\tIterationstid: %d, Minne: %dkB, Parallella trådar: %d\n" -#: src/cryptsetup.c:2440 +#: src/cryptsetup.c:3422 #, c-format msgid "" "\n" @@ -1770,603 +2392,699 @@ msgstr "" "\tplain: %s, Nyckel: %d bitar, Lösenordshashning: %s\n" "\tLUKS1: %s, Nyckel: %d bitar, LUKS-huvudhashning %s, RNG: %s\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:3431 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:2460 src/veritysetup.c:537 src/integritysetup.c:621 +#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642 #, c-format msgid "%s: requires %s as arguments" msgstr "%s: kräver %s som argument" -#: src/cryptsetup.c:2498 src/veritysetup.c:420 src/integritysetup.c:515 -#: src/cryptsetup_reencrypt.c:1611 +#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536 +#: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Visa detta hjälpmeddelande" -#: src/cryptsetup.c:2499 src/veritysetup.c:421 src/integritysetup.c:516 -#: src/cryptsetup_reencrypt.c:1612 +#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Visa kort information om användning" -#: src/cryptsetup.c:2503 src/veritysetup.c:425 src/integritysetup.c:520 -#: src/cryptsetup_reencrypt.c:1616 -msgid "Help options:" -msgstr "Hjälpflaggor:" - -#: src/cryptsetup.c:2504 src/veritysetup.c:426 src/integritysetup.c:521 -#: src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Skriv ut paketversion" -#: src/cryptsetup.c:2505 src/veritysetup.c:427 src/integritysetup.c:522 -#: src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup_reencrypt.c:1613 +msgid "Help options:" +msgstr "Hjälpflaggor:" + +#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "Visar mer detaljerade felmeddelanden" -#: src/cryptsetup.c:2506 src/veritysetup.c:428 src/integritysetup.c:523 -#: src/cryptsetup_reencrypt.c:1619 +#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Visa felsökningsmeddelanden" -#: src/cryptsetup.c:2507 +#: src/cryptsetup.c:3489 msgid "Show debug messages including JSON metadata" msgstr "Visa felsökningsmeddelanden inklusive JSON-metadata" -#: src/cryptsetup.c:2508 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 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:2509 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619 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:2510 +#: src/cryptsetup.c:3492 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:2511 src/cryptsetup_reencrypt.c:1625 +#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Läs nyckeln från en fil" -#: src/cryptsetup.c:2512 +#: src/cryptsetup.c:3494 msgid "Read the volume (master) key from file." msgstr "Läs volymnyckeln (master) från fil." -#: src/cryptsetup.c:2513 +#: src/cryptsetup.c:3495 msgid "Dump volume (master) key instead of keyslots info" msgstr "Skriv ut volymnyckel (master) istället för nyckelplatsinfo" -#: src/cryptsetup.c:2514 src/cryptsetup_reencrypt.c:1622 +#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "Storleken för krypteringsnyckeln" -#: src/cryptsetup.c:2514 src/cryptsetup.c:2571 src/integritysetup.c:539 -#: src/integritysetup.c:543 src/integritysetup.c:547 -#: src/cryptsetup_reencrypt.c:1622 +#: 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 msgid "BITS" msgstr "BITAR" -#: src/cryptsetup.c:2515 src/cryptsetup_reencrypt.c:1638 +#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 msgid "Limits the read from keyfile" msgstr "Begränsa läsningen från nyckelfil" -#: src/cryptsetup.c:2515 src/cryptsetup.c:2516 src/cryptsetup.c:2517 -#: src/cryptsetup.c:2518 src/cryptsetup.c:2568 src/cryptsetup.c:2569 -#: src/veritysetup.c:431 src/veritysetup.c:432 src/veritysetup.c:433 -#: src/veritysetup.c:436 src/veritysetup.c:437 src/integritysetup.c:530 -#: src/integritysetup.c:534 src/integritysetup.c:535 -#: src/cryptsetup_reencrypt.c:1637 src/cryptsetup_reencrypt.c:1638 -#: src/cryptsetup_reencrypt.c:1639 src/cryptsetup_reencrypt.c:1640 +#: 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 msgid "bytes" msgstr "byte" -#: src/cryptsetup.c:2516 src/cryptsetup_reencrypt.c:1637 +#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Antal byte att hoppa över i nyckelfil" -#: src/cryptsetup.c:2517 +#: src/cryptsetup.c:3499 msgid "Limits the read from newly added keyfile" msgstr "Begränsa läsningen från nyligen tillagd nyckelfil" -#: src/cryptsetup.c:2518 +#: src/cryptsetup.c:3500 msgid "Number of bytes to skip in newly added keyfile" msgstr "Antal byte att hoppa över i nyligen tillagd nyckelfil" -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:3501 msgid "Slot number for new key (default is first free)" msgstr "Platsnummer för ny nyckel (standard är första lediga)" -#: src/cryptsetup.c:2520 +#: src/cryptsetup.c:3502 msgid "The size of the device" msgstr "Storleken för enheten" -#: src/cryptsetup.c:2520 src/cryptsetup.c:2521 src/cryptsetup.c:2522 -#: src/cryptsetup.c:2528 src/integritysetup.c:531 src/integritysetup.c:536 +#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505 +#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SEKTORER" -#: src/cryptsetup.c:2521 +#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +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 msgid "The start offset in the backend device" msgstr "Startoffset i bakändesenheten" -#: src/cryptsetup.c:2522 +#: src/cryptsetup.c:3505 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:2523 +#: src/cryptsetup.c:3506 msgid "Create a readonly mapping" msgstr "Skapa en skrivskyddad mappning" -#: src/cryptsetup.c:2524 src/integritysetup.c:524 -#: src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Fråga inte efter bekräftelse" -#: src/cryptsetup.c:2525 +#: src/cryptsetup.c:3508 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "Tidsgräns för interaktiv lösenfrasprompt (i sekunder)" -#: src/cryptsetup.c:2525 src/cryptsetup.c:2526 src/integritysetup.c:525 -#: src/cryptsetup_reencrypt.c:1629 +#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "sek" -#: src/cryptsetup.c:2526 src/integritysetup.c:525 -#: src/cryptsetup_reencrypt.c:1629 +#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "Uppdatering av förloppslinje (i sekunder)" -#: src/cryptsetup.c:2527 src/cryptsetup_reencrypt.c:1630 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 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:2528 +#: src/cryptsetup.c:3511 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Justera nyttolast i sektorgränser - för luksFormat" -#: src/cryptsetup.c:2529 +#: src/cryptsetup.c:3512 msgid "File with LUKS header and keyslots backup" msgstr "Fil med säkerhetskopior av LUKS-huvud och nyckelplatser" -#: src/cryptsetup.c:2530 src/cryptsetup_reencrypt.c:1631 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "Använd /dev/random för att generera volymnyckel" -#: src/cryptsetup.c:2531 src/cryptsetup_reencrypt.c:1632 +#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Använd /dev/urandom för att generera volymnyckel" -#: src/cryptsetup.c:2532 +#: src/cryptsetup.c:3515 msgid "Share device with another non-overlapping crypt segment" msgstr "Dela enhet med ett annat ej överlappande krypteringssegment" -#: src/cryptsetup.c:2533 src/veritysetup.c:440 +#: src/cryptsetup.c:3516 src/veritysetup.c:477 msgid "UUID for device to use" msgstr "UUID för enheten att använda" -#: src/cryptsetup.c:2534 +#: src/cryptsetup.c:3517 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "Tillåt avvisningsbegäran (TRIM) för enhet" -#: src/cryptsetup.c:2535 src/cryptsetup_reencrypt.c:1649 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Enhet eller fil med separerat LUKS-huvud" -#: src/cryptsetup.c:2536 +#: src/cryptsetup.c:3519 msgid "Do not activate device, just check passphrase" msgstr "Aktivera inte enhet, kontrollera endast lösenfrasen" -#: src/cryptsetup.c:2537 +#: src/cryptsetup.c:3520 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Använd dolt huvud (gömd TCRYPT-enhet)" -#: src/cryptsetup.c:2538 +#: src/cryptsetup.c:3521 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Enheten är system-TCRYPT-disk (med starthanterare)" -#: src/cryptsetup.c:2539 +#: src/cryptsetup.c:3522 msgid "Use backup (secondary) TCRYPT header" msgstr "Använd säkerhetskopia (sekundär) för TCRYPT-huvud" -#: src/cryptsetup.c:2540 +#: src/cryptsetup.c:3523 msgid "Scan also for VeraCrypt compatible device" msgstr "Sök också efter VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:2541 +#: src/cryptsetup.c:3524 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Personlig iteration för VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:2542 +#: src/cryptsetup.c:3525 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Query Personal Iteration Multiplier för VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:2543 -msgid "Type of device metadata: luks, plain, loopaes, tcrypt" -msgstr "Typer av enhetsmetadata: luks, plain, loopaes, tcrypt" +#: src/cryptsetup.c:3526 +msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" +msgstr "Typer av enhetsmetadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" -#: src/cryptsetup.c:2544 +#: src/cryptsetup.c:3527 msgid "Disable password quality check (if enabled)" msgstr "Inaktivera kvalitetskontroll av lösenord (om aktiverat)" -#: src/cryptsetup.c:2545 +#: src/cryptsetup.c:3528 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:2546 +#: src/cryptsetup.c:3529 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:2547 +#: src/cryptsetup.c:3530 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:2548 +#: src/cryptsetup.c:3531 +msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" +msgstr "Använder globalt lås för att serialisera minneshård PBKDF (OOM-lösning)" + +#: src/cryptsetup.c:3532 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "PBKDF-iterationstid för LUKS (i ms)" -#: src/cryptsetup.c:2548 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ms" -#: src/cryptsetup.c:2549 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" msgstr "PBKDF-algoritm (för LUKS2) (argon2i/argon2id/pbkdf2)" -#: src/cryptsetup.c:2550 src/cryptsetup_reencrypt.c:1646 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Minneskostnadsgräns för PBKDF" -#: src/cryptsetup.c:2550 src/cryptsetup_reencrypt.c:1646 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilobyte" -#: src/cryptsetup.c:2551 src/cryptsetup_reencrypt.c:1647 +#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Parallellkostnad för PBKDF" -#: src/cryptsetup.c:2551 src/cryptsetup_reencrypt.c:1647 +#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "trådar" -#: src/cryptsetup.c:2552 src/cryptsetup_reencrypt.c:1648 +#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Iterationskostnad för PBKDF (tvingad, inaktiverar prestandamätning)" -#: src/cryptsetup.c:2553 +#: src/cryptsetup.c:3537 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Nyckelplats-prioritet: ignore,normal,prefer" -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:3538 msgid "Disable locking of on-disk metadata" msgstr "Inaktivera låsning av metadata på disk" -#: src/cryptsetup.c:2555 +#: src/cryptsetup.c:3539 msgid "Disable loading volume keys via kernel keyring" msgstr "Inaktivera att läsa in volymnycklar via kärnans nyckelring" -#: src/cryptsetup.c:2556 +#: src/cryptsetup.c:3540 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Algoritm för dataintegritet (endast LUKS2)" -#: src/cryptsetup.c:2557 src/integritysetup.c:550 +#: src/cryptsetup.c:3541 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Inaktivera journal för integritetsenhet" -#: src/cryptsetup.c:2558 src/integritysetup.c:526 +#: src/cryptsetup.c:3542 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Rensa inte enhet efter formatering" -#: src/cryptsetup.c:2559 +#: src/cryptsetup.c:3543 src/integritysetup.c:577 +msgid "Use inefficient legacy padding (old kernels)" +msgstr "Använd ineffektiv föråldrad padding (gamla kärnor)" + +#: src/cryptsetup.c:3544 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:2560 +#: src/cryptsetup.c:3545 msgid "Token number (default: any)" msgstr "Tokenantal (standardvärde: any)" -#: src/cryptsetup.c:2561 +#: src/cryptsetup.c:3546 msgid "Key description" msgstr "Nyckelbeskrivning" -#: src/cryptsetup.c:2562 +#: src/cryptsetup.c:3547 msgid "Encryption sector size (default: 512 bytes)" msgstr "Sektorstorlek för kryptering (standardvärde 512 byte)" -#: src/cryptsetup.c:2563 +#: src/cryptsetup.c:3548 +msgid "Use IV counted in sector size (not in 512 bytes)" +msgstr "Använd IV-räkning i sektorstorlek (ej i 512 byte)" + +#: src/cryptsetup.c:3549 msgid "Set activation flags persistent for device" msgstr "Sätt och spara undan aktiveringsflaggorna för enheten" -#: src/cryptsetup.c:2564 +#: src/cryptsetup.c:3550 msgid "Set label for the LUKS2 device" msgstr "Ange etikett för LUKS2-enhet" -#: src/cryptsetup.c:2565 +#: src/cryptsetup.c:3551 msgid "Set subsystem label for the LUKS2 device" msgstr "Ange undersystemsetikett för LUKS2-enheten" -#: src/cryptsetup.c:2566 -msgid "Create unbound (no assigned data segment) LUKS2 keyslot" -msgstr "Skapa obunden (inget tilldelat datasegment) LUKS2-nyckelplats" +#: src/cryptsetup.c:3552 +msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" +msgstr "Skapa eller skriv ut obunden (inget tilldelat datasegment) LUKS2-nyckelplats" -#: src/cryptsetup.c:2567 +#: src/cryptsetup.c:3553 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:2568 +#: src/cryptsetup.c:3554 msgid "LUKS2 header metadata area size" msgstr "Områdesstorlek för metadata på LUKS2-huvudet" -#: src/cryptsetup.c:2569 +#: src/cryptsetup.c:3555 msgid "LUKS2 header keyslots area size" msgstr "Storlek på nyckelplatsområdet för LUKS2-huvud" -#: src/cryptsetup.c:2570 +#: src/cryptsetup.c:3556 msgid "Refresh (reactivate) device with new parameters" msgstr "Uppdatera (återaktivera) enhet med nya parametrar" -#: src/cryptsetup.c:2571 +#: src/cryptsetup.c:3557 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "LUKS2-nyckelplats: Storleken för krypteringsnyckeln" -#: src/cryptsetup.c:2572 +#: src/cryptsetup.c:3558 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats" -#: src/cryptsetup.c:2588 src/veritysetup.c:461 src/integritysetup.c:568 +#: src/cryptsetup.c:3559 +msgid "Encrypt LUKS2 device (in-place encryption)." +msgstr "Kryptera LUKS2-enheten permanent (direktkryptering)." + +#: src/cryptsetup.c:3560 +msgid "Decrypt LUKS2 device (remove encryption)." +msgstr "Dekryptera LUKS2-enheten (ta bort kryptering)" + +#: src/cryptsetup.c:3561 +msgid "Initialize LUKS2 reencryption in metadata only." +msgstr "Initiera LUKS2-omkryptering endast i metadata." + +#: src/cryptsetup.c:3562 +msgid "Resume initialized LUKS2 reencryption only." +msgstr "Återupptog endast initierad LUKS2-omkryptering." + +#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +msgid "Reduce data device size (move data offset). DANGEROUS!" +msgstr "Förminska dataenhetsstorleken (flytta dataoffset). FARLIGT!" + +#: src/cryptsetup.c:3564 +msgid "Maximal reencryption hotzone size." +msgstr "Maximal storlek på omkryptering av varm zon." + +#: src/cryptsetup.c:3565 +msgid "Reencryption hotzone resilience type (checksum,journal,none)" +msgstr "Återhämtningstyp för omkrypteringszon (checksumma,journal,ingen)" + +#: src/cryptsetup.c:3566 +msgid "Reencryption hotzone checksums hash" +msgstr "Hashkontrollsumma för omkryptering av varm zon" + +#: src/cryptsetup.c:3567 +msgid "Override device autodetection of dm device to be reencrypted" +msgstr "Överlagra automatisk identifiering av dm-enhet för omkryptering" + +#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[FLAGGA…] <åtgärd> <åtgärdsspecifik>" -#: src/cryptsetup.c:2645 src/veritysetup.c:501 src/integritysetup.c:585 +#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 msgid "Argument missing." msgstr "Argumentet <åtgärd> saknas." -#: src/cryptsetup.c:2708 src/veritysetup.c:532 src/integritysetup.c:616 +#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 msgid "Unknown action." msgstr "Okänd åtgärd." -#: src/cryptsetup.c:2718 -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" +#: src/cryptsetup.c:3713 +msgid "Options --refresh and --test-passphrase are mutually exclusive." +msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande." -#: src/cryptsetup.c:2723 -msgid "Options --refresh and --test-passphrase are mutually exclusive.\n" -msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande.\n" +#: src/cryptsetup.c:3718 +msgid "Option --deferred is allowed only for close command." +msgstr "Flaggan --deferred är endast tillåten för kommandot close." -#: src/cryptsetup.c:2728 -msgid "Option --deferred is allowed only for close command.\n" -msgstr "Flaggan --deferred är endast tillåten för kommandot close.\n" +#: src/cryptsetup.c:3723 +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." -#: src/cryptsetup.c:2733 -msgid "Option --shared is allowed only for open of plain device.\n" -msgstr "Flaggan --shared är endast tillåten för öppning för enkel enhet.\n" +#: src/cryptsetup.c:3728 src/integritysetup.c:654 +msgid "Option --allow-discards is allowed only for open operation." +msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open." -#: src/cryptsetup.c:2738 -msgid "Option --allow-discards is allowed only for open operation.\n" -msgstr "Flaggan --allow-discards är endast tillåten för operationen open.\n" +#: src/cryptsetup.c:3733 +msgid "Option --persistent is allowed only for open operation." +msgstr "Flaggan --persistent är endast tillåten för åtgärden open." -#: src/cryptsetup.c:2743 -msgid "Option --persistent is allowed only for open operation.\n" -msgstr "Flaggan --persistent är endast tillåten för operationen open.\n" +#: src/cryptsetup.c:3738 +msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation." +msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open." -#: src/cryptsetup.c:2748 -msgid "Option --persistent is not allowed with --test-passphrase.\n" -msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase.\n" +#: src/cryptsetup.c:3743 +msgid "Option --persistent is not allowed with --test-passphrase." +msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase." -#: src/cryptsetup.c:2757 +#: src/cryptsetup.c:3753 msgid "" -"Option --key-size is allowed only for luksFormat, luksAddKey (with --unbound),\n" +"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:2763 -msgid "Option --integrity is allowed only for luksFormat (LUKS2).\n" -msgstr "Flaggan --integrity är endast tillåten för luksFormat (LUKS2).\n" +#: src/cryptsetup.c:3759 +msgid "Option --integrity is allowed only for luksFormat (LUKS2)." +msgstr "Flaggan --integrity är endast tillåten för luksFormat (LUKS2)." -#: src/cryptsetup.c:2768 -msgid "Option --integrity-no-wipe can be used only for format action with integrity extension.\n" -msgstr "Flaggan --integrity-no-wipe kan användas endast för åtgärden formatera med integritetsutökningar.\n" +#: src/cryptsetup.c:3764 +msgid "Option --integrity-no-wipe can be used only for format action with integrity extension." +msgstr "Flaggan --integrity-no-wipe kan endast användas för åtgärden formatera med integritetsutökningar." -#: src/cryptsetup.c:2774 -msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations.\n" -msgstr "Flaggorna --label och --subsystem tillåts endast för luksFormat och konfiguration av LUKS2-åtgärder.\n" +#: src/cryptsetup.c:3770 +msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations." +msgstr "Flaggorna --label och --subsystem är endast tillåtna för luksFormat och konfiguration av LUKS2-åtgärder." -#: src/cryptsetup.c:2780 -msgid "Option --test-passphrase is allowed only for open of LUKS and TCRYPT devices.\n" -msgstr "Flaggan --test-passphrase är endast tillåten för open för LUKS- och TCRYPT-enheter.\n" +#: src/cryptsetup.c:3776 +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-, TCRYPT-, och BITLK-enheter." -#: src/cryptsetup.c:2785 src/cryptsetup_reencrypt.c:1718 +#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "Nyckelstorlek måste vara en multipel av 8 bitar" -#: src/cryptsetup.c:2791 src/cryptsetup_reencrypt.c:1403 -#: src/cryptsetup_reencrypt.c:1723 +#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Nyckelplatsen är ogiltig." -#: src/cryptsetup.c:2798 +#: src/cryptsetup.c:3794 msgid "Option --key-file takes precedence over specified key file argument." msgstr "Flaggan --key-file åsidosätter specificerade nyckelfilsargument." -#: src/cryptsetup.c:2805 src/veritysetup.c:544 src/integritysetup.c:640 -#: src/cryptsetup_reencrypt.c:1697 +#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663 +#: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Negativt tal för flagga ej tillåtet." -#: src/cryptsetup.c:2809 +#: src/cryptsetup.c:3805 msgid "Only one --key-file argument is allowed." msgstr "Endast ett argument för --key-file är tillåtet." -#: src/cryptsetup.c:2813 src/cryptsetup_reencrypt.c:1689 -#: src/cryptsetup_reencrypt.c:1727 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "Endast en av flaggorna --use-[u]random är tillåten." -#: src/cryptsetup.c:2817 +#: src/cryptsetup.c:3813 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:2821 +#: src/cryptsetup.c:3817 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:2825 +#: src/cryptsetup.c:3821 msgid "Option --align-payload is allowed only for luksFormat." msgstr "Flaggan --align-payload är endast tillåten för luksFormat." -#: src/cryptsetup.c:2829 +#: src/cryptsetup.c:3825 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:2834 +#: src/cryptsetup.c:3830 msgid "Invalid LUKS2 metadata size specification." msgstr "Ogiltig storlekspecifikation för LUKS2-metadata på enhet." -#: src/cryptsetup.c:2838 +#: src/cryptsetup.c:3834 msgid "Invalid LUKS2 keyslots size specification." msgstr "Ogiltig storlekspecifikation för LUKS2-nyckelplats på enhet." -#: src/cryptsetup.c:2842 -msgid "Option --align-payload and --offset cannot be combined." +#: src/cryptsetup.c:3838 +msgid "Options --align-payload and --offset cannot be combined." msgstr "Flaggan --align-payload och --offset kan inte kombineras." -#: src/cryptsetup.c:2848 -msgid "Option --skip is supported only for open of plain and loopaes devices.\n" -msgstr "Flaggan --skip stöds endast för öppning av vanliga enheter och loopaes-enheter.\n" +#: src/cryptsetup.c:3844 +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." -#: src/cryptsetup.c:2855 -msgid "Option --offset is supported only for open of plain and loopaes devices and for luksFormat.\n" -msgstr "Flaggan --offset stöds endast för öppning av vanliga och loopaes-enheter och för luksFormat.\n" +#: src/cryptsetup.c:3851 +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, luksFormat och omkrypteringsenheter." -#: src/cryptsetup.c:2861 -msgid "Option --tcrypt-hidden, --tcrypt-system or --tcrypt-backup is supported only for TCRYPT device.\n" -msgstr "Flaggorna --tcrypt-hidden, --tcrypt-system eller --tcrypt-backup stöds endast på TCRYPT-enhet.\n" +#: src/cryptsetup.c:3857 +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." -#: src/cryptsetup.c:2866 -msgid "Option --tcrypt-hidden cannot be combined with --allow-discards.\n" -msgstr "Flaggan --tcrypt-hidden kan inte kombineras med --allow-discards.\n" +#: src/cryptsetup.c:3862 +msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." +msgstr "Flaggan --tcrypt-hidden kan inte kombineras med --allow-discards." -#: src/cryptsetup.c:2871 -msgid "Option --veracrypt is supported only for TCRYPT device type.\n" -msgstr "Flaggan --veracrypt stöds endast för TCRYPT-enhetstyper.\n" +#: src/cryptsetup.c:3867 +msgid "Option --veracrypt is supported only for TCRYPT device type." +msgstr "Flaggan --veracrypt stöds endast för TCRYPT-enhetstyper." -#: src/cryptsetup.c:2877 -msgid "Invalid argument for parameter --veracrypt-pim supplied.\n" -msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim.\n" +#: src/cryptsetup.c:3873 +msgid "Invalid argument for parameter --veracrypt-pim supplied." +msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim." -#: src/cryptsetup.c:2881 -msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices.\n" -msgstr "Flaggan --veracrypt-pim stöds endast för VeraCrypt-kompatibla enheter.\n" +#: src/cryptsetup.c:3877 +msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." +msgstr "Flaggan --veracrypt-pim stöds endast för VeraCrypt-kompatibla enheter." -#: src/cryptsetup.c:2889 -msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices.\n" -msgstr "Flaggan --veracrypt-query-pim stöds endast för VeraCrypt-kompatibla enheter.\n" +#: src/cryptsetup.c:3885 +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." -#: src/cryptsetup.c:2893 -msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive.\n" -msgstr "Flaggorna --veracrypt-pim och --veracrypt-query-pim är ömsesidigt uteslutande.\n" +#: src/cryptsetup.c:3889 +msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive." +msgstr "Flaggorna --veracrypt-pim och --veracrypt-query-pim är ömsesidigt uteslutande." -#: src/cryptsetup.c:2900 -msgid "Option --priority can be only ignore/normal/prefer.\n" -msgstr "Flaggan --priority kan endast vara ignore/normal/prefer.\n" +#: src/cryptsetup.c:3896 +msgid "Option --priority can be only ignore/normal/prefer." +msgstr "Flaggan --priority kan endast vara ignore/normal/prefer." -#: src/cryptsetup.c:2905 -msgid "Keyslot specification is required.\n" -msgstr "Specifikation för nyckelplats krävs.\n" +#: src/cryptsetup.c:3901 src/cryptsetup.c:3939 +msgid "Keyslot specification is required." +msgstr "Specifikation för nyckelplats krävs." -#: src/cryptsetup.c:2910 src/cryptsetup_reencrypt.c:1703 -msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id.\n" -msgstr "Password-based key derivation function (PBKDF) kan endast vara pbkdf2 eller argon2i/argon2id.\n" +#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +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." -#: src/cryptsetup.c:2915 src/cryptsetup_reencrypt.c:1708 -msgid "PBKDF forced iterations cannot be combined with iteration time option.\n" -msgstr "Tvingade PBKDF-iterationer går inte att kombinera med flaggan iteration time.\n" +#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698 +msgid "PBKDF forced iterations cannot be combined with iteration time option." +msgstr "Tvingade PBKDF-iterationer går inte att kombinera med flaggan iteration time." -#: src/cryptsetup.c:2921 -msgid "Sector size option is not supported for this command.\n" -msgstr "Flaggan för sektorstorlek stöds inte för detta kommando.\n" +#: src/cryptsetup.c:3917 +msgid "Sector size option is not supported for this command." +msgstr "Flaggan för sektorstorlek stöds inte för detta kommando." -#: src/cryptsetup.c:2927 -msgid "Unsupported encryption sector size.\n" -msgstr "Stöder inte sektorstorlek för kryptering.\n" +#: src/cryptsetup.c:3929 +msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes." +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:2932 -msgid "Key size is required with --unbound option.\n" -msgstr "Nyckelstorlek krävs med flaggan --unbound.\n" +#: src/cryptsetup.c:3934 +msgid "Key size is required with --unbound option." +msgstr "Nyckelstorlek krävs med flaggan --unbound." -#: src/cryptsetup.c:2937 -msgid "Option --unbound may be used only with luksAddKey action.\n" -msgstr "Flaggan --unbound kan inte användas tillsammans med luksAddKey action.\n" +#: src/cryptsetup.c:3944 +msgid "Option --unbound may be used only with luksAddKey and luksDump actions." +msgstr "Flaggan --unbound kan endast användas tillsammans med ätgärderna luksAddKey och luksDump." -#: src/cryptsetup.c:2942 -msgid "Option --refresh may be used only with open action.\n" -msgstr "Flaggan --refresh är endast tillåten för operationen open.\n" +#: src/cryptsetup.c:3949 +msgid "Option --refresh may be used only with open action." +msgstr "Flaggan --refresh är endast tillåten för åtgärden open." -#: src/cryptsetup.c:2953 -msgid "Cannot disable metadata locking.\n" -msgstr "Det går inte att inaktivera metadatalås.\n" +#: src/cryptsetup.c:3960 +msgid "Cannot disable metadata locking." +msgstr "Det går inte att inaktivera metadatalås." + +#: src/cryptsetup.c:3970 +msgid "Invalid max reencryption hotzone size specification." +msgstr "Ogiltig högsta storlekspecifikation för varm zon-omkryptering." + +#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup_reencrypt.c:1727 +msgid "Invalid device size specification." +msgstr "Ogiltig storlekspecifikation på enhet." + +#: src/cryptsetup.c:3981 +msgid "Maximum device reduce size is 1 GiB." +msgstr "Högsta förminskningsstorlek för enhet är 1 GiB." + +#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +msgid "Reduce size must be multiple of 512 bytes sector." +msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor." -#: src/veritysetup.c:67 +#: src/cryptsetup.c:3989 +msgid "Invalid data size specification." +msgstr "Ogiltig datastorlekspecifikation." + +#: src/cryptsetup.c:3994 +msgid "Reduce size overflow." +msgstr "Minska storleksöverspill." + +#: src/cryptsetup.c:3998 +msgid "LUKS2 decryption requires option --header." +msgstr "LUKS2-dekryptering kräver flaggan --header." + +#: src/cryptsetup.c:4002 +msgid "Device size must be multiple of 512 bytes sector." +msgstr "Enhetsstorlek måste vara en multipel av sektor på 512-byte." + +#: src/cryptsetup.c:4006 +msgid "Options --reduce-device-size and --data-size cannot be combined." +msgstr "Flaggan --reduce-device-size och --data-size kan inte kombineras." + +#: src/cryptsetup.c:4010 +msgid "Options --device-size and --size cannot be combined." +msgstr "Flaggan --device-size och --size kan inte kombineras." + +#: src/veritysetup.c:66 msgid "Invalid salt string specified." msgstr "Angav ogiltig saltsträng." -#: src/veritysetup.c:98 +#: src/veritysetup.c:97 #, c-format msgid "Cannot create hash image %s for writing." msgstr "Kan inte skapa hashavbild %s för skrivning." -#: src/veritysetup.c:108 +#: src/veritysetup.c:107 #, 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:178 +#: src/veritysetup.c:179 msgid "Invalid root hash string specified." msgstr "Angav ogiltig rothashsträng." -#: src/veritysetup.c:360 +#: src/veritysetup.c:187 +#, c-format +msgid "Invalid signature file %s." +msgstr "Ogiltig signaturfil %s." + +#: src/veritysetup.c:194 +#, c-format +msgid "Cannot read signature file %s." +msgstr "Det går inte att läsa signaturfilen %s." + +#: src/veritysetup.c:392 msgid " " msgstr " " -#: src/veritysetup.c:360 src/integritysetup.c:462 +#: src/veritysetup.c:392 src/integritysetup.c:479 msgid "format device" msgstr "formatera enhet" -#: src/veritysetup.c:361 +#: src/veritysetup.c:393 msgid " " msgstr " " -#: src/veritysetup.c:361 +#: src/veritysetup.c:393 msgid "verify device" msgstr "verifiera enhet" -#: src/veritysetup.c:362 +#: src/veritysetup.c:394 msgid " " msgstr " " -#: src/veritysetup.c:362 src/integritysetup.c:463 -msgid "open device as " -msgstr "öppna enhet som " - -#: src/veritysetup.c:363 src/integritysetup.c:464 -msgid "close device (deactivate and remove mapping)" -msgstr "stäng enhet (inaktivera och ta bort mappning)" - -#: src/veritysetup.c:364 src/integritysetup.c:465 +#: src/veritysetup.c:396 src/integritysetup.c:482 msgid "show active device status" msgstr "visa statistik för aktiv enhet" -#: src/veritysetup.c:365 +#: src/veritysetup.c:397 msgid "" msgstr "" -#: src/veritysetup.c:365 src/integritysetup.c:466 +#: src/veritysetup.c:397 src/integritysetup.c:483 msgid "show on-disk information" msgstr "visa information från disk" -#: src/veritysetup.c:384 +#: src/veritysetup.c:416 #, c-format msgid "" "\n" @@ -2381,7 +3099,7 @@ msgstr "" " är enheten som innehåller verifieringsdata\n" " hash för rotnoden på \n" -#: src/veritysetup.c:391 +#: src/veritysetup.c:423 #, c-format msgid "" "\n" @@ -2392,118 +3110,126 @@ msgstr "" "Inkompilerade standardparametrar för dm-verity:\n" "\tHash: %s, Datablock (byte): %u, Hashblock (byte): %u, Saltstorlek: %u, Hashformat: %u\n" -#: src/veritysetup.c:429 +#: src/veritysetup.c:466 msgid "Do not use verity superblock" msgstr "Använd inte verity superblock" -#: src/veritysetup.c:430 +#: src/veritysetup.c:467 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "Formattyp (1 - normal, 0 - ursprungliga Chrome OS)" -#: src/veritysetup.c:430 +#: src/veritysetup.c:467 msgid "number" msgstr "antal" -#: src/veritysetup.c:431 +#: src/veritysetup.c:468 msgid "Block size on the data device" msgstr "Blockstorlek på dataenheten" -#: src/veritysetup.c:432 +#: src/veritysetup.c:469 msgid "Block size on the hash device" msgstr "Blockstorlek på hashenheten" -#: src/veritysetup.c:433 +#: src/veritysetup.c:470 msgid "FEC parity bytes" msgstr "FEC paritetsbyte" -#: src/veritysetup.c:434 +#: src/veritysetup.c:471 msgid "The number of blocks in the data file" msgstr "Antalet block i datafilen" -#: src/veritysetup.c:434 +#: src/veritysetup.c:471 msgid "blocks" msgstr "block" -#: src/veritysetup.c:435 +#: src/veritysetup.c:472 msgid "Path to device with error correction data" msgstr "Sökväg till enhet med felkorrigeringsdata" -#: src/veritysetup.c:435 src/integritysetup.c:528 +#: src/veritysetup.c:472 src/integritysetup.c:549 msgid "path" msgstr "sökväg" -#: src/veritysetup.c:436 +#: src/veritysetup.c:473 msgid "Starting offset on the hash device" msgstr "Startoffset på hashenheten" -#: src/veritysetup.c:437 +#: src/veritysetup.c:474 msgid "Starting offset on the FEC device" msgstr "Startoffset på FEC-enheten" -#: src/veritysetup.c:438 +#: src/veritysetup.c:475 msgid "Hash algorithm" msgstr "Hashalgoritm" -#: src/veritysetup.c:438 +#: src/veritysetup.c:475 msgid "string" msgstr "sträng" -#: src/veritysetup.c:439 +#: src/veritysetup.c:476 msgid "Salt" msgstr "Salt" -#: src/veritysetup.c:439 +#: src/veritysetup.c:476 msgid "hex string" msgstr "hexsträng" -#: src/veritysetup.c:441 +#: src/veritysetup.c:478 +msgid "Path to root hash signature file" +msgstr "Sökväg till root-hashsignaturfilen" + +#: src/veritysetup.c:479 msgid "Restart kernel if corruption is detected" msgstr "Starta om kärna om något skadat identifieras" -#: src/veritysetup.c:442 +#: src/veritysetup.c:480 msgid "Ignore corruption, log it only" msgstr "Ignorera om något är skadat, logga endast" -#: src/veritysetup.c:443 +#: src/veritysetup.c:481 msgid "Do not verify zeroed blocks" msgstr "Verifiera inte nollställda block" -#: src/veritysetup.c:444 +#: src/veritysetup.c:482 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:550 -msgid "Option --ignore-corruption, --restart-on-corruption or --ignore-zero-blocks is allowed only for open operation.\n" -msgstr "Flaggorna --ignore-corruption, --restart-on-corruption eller --ignore-zero-blocks är endast tillåtna för operationen open.\n" +#: src/veritysetup.c:582 +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 åtgärden open." + +#: src/veritysetup.c:587 +msgid "Option --root-hash-signature can be used only for open operation." +msgstr "Flaggan --root-hash-signature kan användas endast för åtgärden open." -#: src/veritysetup.c:555 -msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together.\n" -msgstr "Flaggorna --ignore-corruption och --restart-on-corruption kan inte användas tillsammans.\n" +#: src/veritysetup.c:592 +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." -#: src/integritysetup.c:82 src/utils_password.c:298 +#: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." msgstr "Det går inte att läsa nyckelfilen %s." -#: src/integritysetup.c:86 src/utils_password.c:302 +#: src/integritysetup.c:88 src/utils_password.c:310 #, 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:248 +#: src/integritysetup.c:254 #, c-format msgid "Formatted with tag size %u, internal integrity %s.\n" msgstr "Formaterad med taggstorlek %u, intern integritet %s.\n" -#: src/integritysetup.c:462 src/integritysetup.c:466 +#: src/integritysetup.c:479 src/integritysetup.c:483 msgid "" msgstr "" -#: src/integritysetup.c:463 +#: src/integritysetup.c:480 msgid " " msgstr " " -#: src/integritysetup.c:485 +#: src/integritysetup.c:502 #, c-format msgid "" "\n" @@ -2514,524 +3240,532 @@ msgstr "" " är enheten att skapa under %s\n" " är enheten som innehåller data med integritetstaggar\n" -#: src/integritysetup.c:490 +#: src/integritysetup.c:507 #, c-format msgid "" "\n" "Default compiled-in dm-integrity parameters:\n" -"\tTag size: %u bytes, Checksum algorithm: %s\n" +"\tChecksum algorithm: %s\n" msgstr "" "\n" "Inkompilerade standardparametrar för dm-integrity:\n" -"\tTaggstorlek: %u byte, Kontrollsummealgoritm: %s\n" -"\n" +"\tKontrollsummealgoritm: %s\n" -#: src/integritysetup.c:528 +#: src/integritysetup.c:549 msgid "Path to data device (if separated)" msgstr "Sökvägen till dataenhet (om separat)" -#: src/integritysetup.c:530 +#: src/integritysetup.c:551 msgid "Journal size" msgstr "Journalstorlek" -#: src/integritysetup.c:531 +#: src/integritysetup.c:552 msgid "Interleave sectors" msgstr "Infoga sektorer" -#: src/integritysetup.c:532 +#: src/integritysetup.c:553 msgid "Journal watermark" msgstr "Journalvattenmärke" -#: src/integritysetup.c:532 +#: src/integritysetup.c:553 msgid "percent" msgstr "procent" -#: src/integritysetup.c:533 +#: src/integritysetup.c:554 msgid "Journal commit time" msgstr "Journalincheckningstid" -#: src/integritysetup.c:533 +#: src/integritysetup.c:554 src/integritysetup.c:556 msgid "ms" msgstr "ms" -#: src/integritysetup.c:534 +#: src/integritysetup.c:555 +msgid "Number of 512-byte sectors per bit (bitmap mode)." +msgstr "Antal 512-byte sektorer per bit (bitmap-läge)." + +#: src/integritysetup.c:556 +msgid "Bitmap mode flush time" +msgstr "Renstid för bitmap-läge" + +#: src/integritysetup.c:557 msgid "Tag size (per-sector)" msgstr "Taggstorlek (per sektor)" -#: src/integritysetup.c:535 +#: src/integritysetup.c:558 msgid "Sector size" msgstr "Sektorstorlek" -#: src/integritysetup.c:536 +#: src/integritysetup.c:559 msgid "Buffers size" msgstr "Bufferstorlek" -#: src/integritysetup.c:538 +#: src/integritysetup.c:561 msgid "Data integrity algorithm" msgstr "Dataintegritetsalgoritm" -#: src/integritysetup.c:539 +#: src/integritysetup.c:562 msgid "The size of the data integrity key" msgstr "Storleken för dataintegritetsnyckeln" -#: src/integritysetup.c:540 +#: src/integritysetup.c:563 msgid "Read the integrity key from a file" msgstr "Läs integritetsnyckeln från en fil" -#: src/integritysetup.c:542 +#: src/integritysetup.c:565 msgid "Journal integrity algorithm" msgstr "Integritetsalgoritm för journal" -#: src/integritysetup.c:543 +#: src/integritysetup.c:566 msgid "The size of the journal integrity key" msgstr "Storleken för journalens integritetssnyckel" -#: src/integritysetup.c:544 +#: src/integritysetup.c:567 msgid "Read the journal integrity key from a file" msgstr "Läs journalens integritetsnyckel från en fil" -#: src/integritysetup.c:546 +#: src/integritysetup.c:569 msgid "Journal encryption algorithm" msgstr "Krypteringsalgoritm för journal" -#: src/integritysetup.c:547 +#: src/integritysetup.c:570 msgid "The size of the journal encryption key" msgstr "Storleken för journalens krypteringsnyckel" -#: src/integritysetup.c:548 +#: src/integritysetup.c:571 msgid "Read the journal encryption key from a file" msgstr "Läs journalens krypteringsnyckel från en fil" -#: src/integritysetup.c:551 +#: src/integritysetup.c:574 msgid "Recovery mode (no journal, no tag checking)" msgstr "Återhämtningsläge (ingen journal, ingen taggkontroll)" -#: src/integritysetup.c:552 +#: src/integritysetup.c:575 +msgid "Use bitmap to track changes and disable journal for integrity device" +msgstr "Använd bitmap för att spåra ändringar och inaktivera journal för integritetsenhet" + +#: src/integritysetup.c:576 msgid "Recalculate initial tags automatically." msgstr "Räkna automatiskt initiala taggar." -#: src/integritysetup.c:631 +#: src/integritysetup.c:649 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:646 -msgid "Options --journal-size, --interleave-sectors, --sector-size, --tag-size and --no-wipe can be used only for format action.\n" -msgstr "Flaggorna --journal-size, --interleave-sectors, --sector-size, --tag-size och --no-wipe kan endast användas för åtgärden formatera.\n" +#: src/integritysetup.c:669 +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." -#: src/integritysetup.c:652 +#: src/integritysetup.c:675 msgid "Invalid journal size specification." msgstr "Ogiltig storlekspecifikation på journal." -#: src/integritysetup.c:657 +#: src/integritysetup.c:680 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:660 +#: 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:665 +#: src/integritysetup.c:688 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:668 +#: src/integritysetup.c:691 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:673 +#: src/integritysetup.c:696 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:676 +#: src/integritysetup.c:699 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/cryptsetup_reencrypt.c:175 +#: src/integritysetup.c:703 +msgid "Recovery and bitmap mode options are mutually exclusive." +msgstr "Flaggorna för återställning- och bitmap-läge är ömsesidigt uteslutande." + +#: src/integritysetup.c:707 +msgid "Journal options cannot be used in bitmap mode." +msgstr "Det går inte att använda journalflaggor i bitmap-läge." + +#: src/integritysetup.c:711 +msgid "Bitmap options can be used only in bitmap mode." +msgstr "Flaggan för integritet kan endast användas i bitmap-läge." + +#: src/cryptsetup_reencrypt.c:172 msgid "Reencryption already in-progress." msgstr "Omkryptering pågår redan." -#: src/cryptsetup_reencrypt.c:181 -msgid "Reencryption of device with integrity profile is not supported." -msgstr "Kryptering för enhet med integritetsprofil stöds ej." - -#: src/cryptsetup_reencrypt.c:204 +#: src/cryptsetup_reencrypt.c:208 #, c-format msgid "Cannot exclusively open %s, device in use." msgstr "Kan inte öppna %s exklusivt, enheten används." -#: src/cryptsetup_reencrypt.c:218 src/cryptsetup_reencrypt.c:1148 +#: src/cryptsetup_reencrypt.c:222 src/cryptsetup_reencrypt.c:1135 msgid "Allocation of aligned memory failed." msgstr "Misslyckades med allokering av justerat minne." -#: src/cryptsetup_reencrypt.c:225 +#: src/cryptsetup_reencrypt.c:229 #, c-format msgid "Cannot read device %s." msgstr "Det går inte att läsa enheten %s." -#: src/cryptsetup_reencrypt.c:236 +#: src/cryptsetup_reencrypt.c:240 #, c-format msgid "Marking LUKS1 device %s unusable." msgstr "Markerar LUKS1-enhet %s som oanvändbar." -#: src/cryptsetup_reencrypt.c:240 +#: src/cryptsetup_reencrypt.c:244 #, 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:257 +#: src/cryptsetup_reencrypt.c:261 #, c-format msgid "Cannot write device %s." msgstr "Det går inte att skriva till enheten %s." -#: src/cryptsetup_reencrypt.c:345 +#: src/cryptsetup_reencrypt.c:309 msgid "Cannot write reencryption log file." msgstr "Det går inte att skriva loggfil för omkryptering." -#: src/cryptsetup_reencrypt.c:401 +#: src/cryptsetup_reencrypt.c:365 msgid "Cannot read reencryption log file." msgstr "Det går inte att läsa loggfil för omkryptering." -#: src/cryptsetup_reencrypt.c:439 +#: src/cryptsetup_reencrypt.c:403 #, c-format msgid "Log file %s exists, resuming reencryption.\n" msgstr "Loggfilen %s existerar, återupptar kryptering.\n" -#: src/cryptsetup_reencrypt.c:488 +#: src/cryptsetup_reencrypt.c:452 msgid "Activating temporary device using old LUKS header." msgstr "Aktiverar temporär enhet användandes gammalt LUKS-huvud." -#: src/cryptsetup_reencrypt.c:498 +#: src/cryptsetup_reencrypt.c:462 msgid "Activating temporary device using new LUKS header." msgstr "Aktiverar temporär enhet användandes nytt LUKS-huvud." -#: src/cryptsetup_reencrypt.c:508 +#: src/cryptsetup_reencrypt.c:472 msgid "Activation of temporary devices failed." msgstr "Aktivering av temporära enheter misslyckades." -#: src/cryptsetup_reencrypt.c:586 -msgid "Failed to set PBKDF parameters." -msgstr "Misslyckades med att sätta PBKDF-parametrar." - -#: src/cryptsetup_reencrypt.c:592 +#: src/cryptsetup_reencrypt.c:559 msgid "Failed to set data offset." msgstr "Misslyckades med att sätta dataoffset." -#: src/cryptsetup_reencrypt.c:600 +#: src/cryptsetup_reencrypt.c:565 +msgid "Failed to set metadata size." +msgstr "Misslyckades med att sätta metadatastorlek." + +#: src/cryptsetup_reencrypt.c:573 #, c-format msgid "New LUKS header for device %s created." msgstr "Skapade nytt LUKS-huvud för enhet %s." -#: src/cryptsetup_reencrypt.c:660 +#: src/cryptsetup_reencrypt.c:633 #, 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:682 +#: src/cryptsetup_reencrypt.c:655 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:686 +#: src/cryptsetup_reencrypt.c:659 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:690 src/cryptsetup_reencrypt.c:694 +#: src/cryptsetup_reencrypt.c:663 src/cryptsetup_reencrypt.c:667 msgid "Failed to read requirements from backup header." msgstr "Misslyckades med att läsa krav från säkerhetskopiehuvud." -#: src/cryptsetup_reencrypt.c:731 +#: src/cryptsetup_reencrypt.c:705 #, c-format msgid "%s header backup of device %s created." msgstr "Skapade säkerhetskopia av %s-huvud på enhet %s." -#: src/cryptsetup_reencrypt.c:789 +#: src/cryptsetup_reencrypt.c:768 msgid "Creation of LUKS backup headers failed." msgstr "Misslyckades med att skapa en säkerhetskopia av LUKS-huvuden." -#: src/cryptsetup_reencrypt.c:918 +#: src/cryptsetup_reencrypt.c:901 #, 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:920 +#: src/cryptsetup_reencrypt.c:903 #, c-format msgid "%s header on device %s restored." msgstr "Återställde %s-huvudet på enheten %s." -#: src/cryptsetup_reencrypt.c:958 src/cryptsetup_reencrypt.c:1038 -msgid "Cannot seek to device offset." -msgstr "Det går inte att söka till enhetsoffset." - -#: src/cryptsetup_reencrypt.c:1081 -msgid "Cannot seek to device offset.\n" -msgstr "Kan inte söka till enhetsoffset.\n" - -#: src/cryptsetup_reencrypt.c:1120 src/cryptsetup_reencrypt.c:1126 +#: src/cryptsetup_reencrypt.c:1107 src/cryptsetup_reencrypt.c:1113 msgid "Cannot open temporary LUKS device." msgstr "Misslyckades med att öppna temporär LUKS-enhet." -#: src/cryptsetup_reencrypt.c:1131 src/cryptsetup_reencrypt.c:1136 +#: src/cryptsetup_reencrypt.c:1118 src/cryptsetup_reencrypt.c:1123 msgid "Cannot get device size." msgstr "Det går inte att hämta enhetsstorlek." -#: src/cryptsetup_reencrypt.c:1173 -msgid "Interrupted by a signal." -msgstr "Avbruten av en signal." - -#: src/cryptsetup_reencrypt.c:1175 +#: src/cryptsetup_reencrypt.c:1158 msgid "IO error during reencryption." msgstr "In-/utfel under återkryptering." -#: src/cryptsetup_reencrypt.c:1206 +#: src/cryptsetup_reencrypt.c:1189 msgid "Provided UUID is invalid." msgstr "Angivet UUID är ogiltigt." -#: src/cryptsetup_reencrypt.c:1309 -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." - -#: src/cryptsetup_reencrypt.c:1350 src/cryptsetup_reencrypt.c:1361 -#, c-format -msgid "Enter passphrase for key slot %u: " -msgstr "Ange lösenfras för nyckelplats %u: " - -#: src/cryptsetup_reencrypt.c:1432 +#: src/cryptsetup_reencrypt.c:1423 msgid "Cannot open reencryption log file." msgstr "Det går inte att öppna loggfilen för omkryptering." -#: src/cryptsetup_reencrypt.c:1438 +#: src/cryptsetup_reencrypt.c:1429 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:1513 +#: src/cryptsetup_reencrypt.c:1504 #, 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:1620 +#: src/cryptsetup_reencrypt.c:1616 msgid "Reencryption block size" msgstr "Blockstorlek för omkryptering" -#: src/cryptsetup_reencrypt.c:1620 +#: src/cryptsetup_reencrypt.c:1616 msgid "MiB" msgstr "MiB" -#: src/cryptsetup_reencrypt.c:1624 +#: src/cryptsetup_reencrypt.c:1620 msgid "Do not change key, no data area reencryption" msgstr "Ändra inte nyckel, ingen omkryptering av dataområde" -#: src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup_reencrypt.c:1622 msgid "Read new volume (master) key from file" msgstr "Läs volymnyckeln (master) från fil" -#: src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup_reencrypt.c:1623 msgid "PBKDF2 iteration time for LUKS (in ms)" msgstr "PBKDF2-iterationstid för LUKS (i ms)" -#: src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup_reencrypt.c:1629 msgid "Use direct-io when accessing devices" msgstr "Använd direct-io vid enhetsåtkomst" -#: src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup_reencrypt.c:1630 msgid "Use fsync after each block" msgstr "Använd fsync efter varje block" -#: src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup_reencrypt.c:1631 msgid "Update log file after every block" msgstr "Uppdatera loggfilen efter varje block" -#: src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup_reencrypt.c:1632 msgid "Use only this slot (others will be disabled)" msgstr "Använd endast denna plats (andra kommer att inaktiveras)" -#: src/cryptsetup_reencrypt.c:1639 -msgid "Reduce data device size (move data offset). DANGEROUS!" -msgstr "Förminska dataenhetsstorleken (flytta dataoffset). FARLIGT!" - -#: src/cryptsetup_reencrypt.c:1640 -msgid "Use only specified device size (ignore rest of device). DANGEROUS!" -msgstr "Använd endast specificerad enhetsstorlek (ignorera resten av enheten). FARLIGT!" - -#: src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup_reencrypt.c:1637 msgid "Create new header on not encrypted device" msgstr "Skapa nytt huvud på icke-krypterad enhet" -#: src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup_reencrypt.c:1638 msgid "Permanently decrypt device (remove encryption)" msgstr "Dekryptera enheten permanent (ta bort kryptering)" -#: src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup_reencrypt.c:1639 msgid "The UUID used to resume decryption" msgstr "Det UUID som används för att återuppta kryptering" -#: src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup_reencrypt.c:1640 msgid "Type of LUKS metadata: luks1, luks2" msgstr "Typ av LUKS-metadata: luks1, luks2" -#: src/cryptsetup_reencrypt.c:1663 +#: src/cryptsetup_reencrypt.c:1659 msgid "[OPTION...] " msgstr "[FLAGGA…] " -#: src/cryptsetup_reencrypt.c:1677 +#: src/cryptsetup_reencrypt.c:1667 #, 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:1678 +#: src/cryptsetup_reencrypt.c:1668 msgid "volume key" msgstr "volymnyckeln" -#: src/cryptsetup_reencrypt.c:1680 +#: src/cryptsetup_reencrypt.c:1670 msgid "set hash to " msgstr "sätt hash till " -#: src/cryptsetup_reencrypt.c:1681 +#: src/cryptsetup_reencrypt.c:1671 msgid ", set cipher to " msgstr ", sätt chiffer till " -#: src/cryptsetup_reencrypt.c:1685 +#: src/cryptsetup_reencrypt.c:1675 msgid "Argument required." msgstr "Kräver argument." -#: src/cryptsetup_reencrypt.c:1713 +#: src/cryptsetup_reencrypt.c:1703 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:1732 src/cryptsetup_reencrypt.c:1737 -msgid "Invalid device size specification." -msgstr "Ogiltig storlekspecifikation på enhet." - -#: src/cryptsetup_reencrypt.c:1740 +#: src/cryptsetup_reencrypt.c:1730 msgid "Maximum device reduce size is 64 MiB." msgstr "Högsta förminskningsstorlek för enhet är 64 MiB." -#: src/cryptsetup_reencrypt.c:1743 -msgid "Reduce size must be multiple of 512 bytes sector." -msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor." - -#: src/cryptsetup_reencrypt.c:1747 +#: src/cryptsetup_reencrypt.c:1737 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:1751 +#: src/cryptsetup_reencrypt.c:1741 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:1755 +#: src/cryptsetup_reencrypt.c:1745 msgid "Option --new cannot be used together with --decrypt." msgstr "Flaggan --new kan inte användas tillsammans med --decrypt." -#: src/cryptsetup_reencrypt.c:1759 +#: src/cryptsetup_reencrypt.c:1749 msgid "Option --decrypt is incompatible with specified parameters." msgstr "Flaggan --decrypt är inkompatibel med specificerade parametrar." -#: src/cryptsetup_reencrypt.c:1763 +#: src/cryptsetup_reencrypt.c:1753 msgid "Option --uuid is allowed only together with --decrypt." msgstr "Flaggan --uuid är endast tillåten tillsammans med --decrypt." -#: src/cryptsetup_reencrypt.c:1767 +#: src/cryptsetup_reencrypt.c:1757 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'." -#: src/utils_tools.c:150 +#: src/utils_tools.c:151 msgid "Error reading response from terminal." msgstr "Fel vid läsning av svar från terminal." -#: src/utils_tools.c:175 +#: src/utils_tools.c:186 msgid "Command successful.\n" msgstr "Kommandot lyckades.\n" -#: src/utils_tools.c:183 +#: src/utils_tools.c:194 msgid "wrong or missing parameters" msgstr "fel eller saknar parametrar" -#: src/utils_tools.c:185 +#: src/utils_tools.c:196 msgid "no permission or bad passphrase" msgstr "ingen behörighet eller dålig lösenfras" -#: src/utils_tools.c:187 +#: src/utils_tools.c:198 msgid "out of memory" msgstr "slut på minne" -#: src/utils_tools.c:189 +#: src/utils_tools.c:200 msgid "wrong device or file specified" msgstr "angav fel enhet eller fil" -#: src/utils_tools.c:191 +#: src/utils_tools.c:202 msgid "device already exists or device is busy" msgstr "enheten existerar redan eller så är enheten upptagen" -#: src/utils_tools.c:193 +#: src/utils_tools.c:204 msgid "unknown error" msgstr "okänt fel" -#: src/utils_tools.c:195 +#: src/utils_tools.c:206 #, c-format msgid "Command failed with code %i (%s).\n" msgstr "Kommandot misslyckades med kod %i (%s).\n" -#: src/utils_tools.c:272 +#: src/utils_tools.c:283 #, c-format msgid "Key slot %i created." msgstr "Nyckelplats %i är ändrad." -#: src/utils_tools.c:274 +#: src/utils_tools.c:285 #, c-format msgid "Key slot %i unlocked." msgstr "Nyckelplats %i är upplåst." -#: src/utils_tools.c:276 +#: src/utils_tools.c:287 #, c-format msgid "Key slot %i removed." msgstr "Nyckelplats %i är upplåst." -#: src/utils_tools.c:285 +#: src/utils_tools.c:296 #, c-format msgid "Token %i created." msgstr "Token %i används." -#: src/utils_tools.c:287 +#: src/utils_tools.c:298 #, c-format msgid "Token %i removed." msgstr "Token %i används." -#: src/utils_tools.c:453 +#: src/utils_tools.c:464 +msgid "" +"\n" +"Wipe interrupted." +msgstr "" +"\n" +"Skrivning avbruten." + +#: src/utils_tools.c:475 #, 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:461 +#: src/utils_tools.c:483 #, 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:482 src/utils_tools.c:546 +#: src/utils_tools.c:504 src/utils_tools.c:568 msgid "Failed to initialize device signature probes." msgstr "Misslyckades med att initiera identifiering av enhetssignatur." -#: src/utils_tools.c:526 +#: src/utils_tools.c:548 #, c-format msgid "Failed to stat device %s." msgstr "Misslyckades med att ta status på enhet %s." -#: src/utils_tools.c:539 +#: src/utils_tools.c:561 #, 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:541 +#: src/utils_tools.c:563 #, 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:561 +#: src/utils_tools.c:577 +#, c-format +msgid "Existing '%s' partition signature (offset: % bytes) on device %s will be wiped." +msgstr "Kommer att rensa befintlig ”%s”-partitionssignatur (förskjutning: % byte) på enheten %s." + +#: src/utils_tools.c:580 +#, c-format +msgid "Existing '%s' superblock signature (offset: % bytes) on device %s will be wiped." +msgstr "Kommer att rensa befintlig ”%s”-superblocksignatur (förskjutning: % byte) på enheten %s." + +#: src/utils_tools.c:583 msgid "Failed to wipe device signature." msgstr "Misslyckades med att radera enhetssignatur." -#: src/utils_tools.c:568 +#: src/utils_tools.c:590 #, 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 +msgid "" +"\n" +"Reencryption interrupted." +msgstr "" +"\n" +"Omkryptering avbryten." + #: src/utils_password.c:43 src/utils_password.c:75 #, c-format msgid "Cannot check password quality: %s" @@ -3072,21 +3806,25 @@ msgstr "Det går inte att använda offset med terminalinmatning." msgid "Enter passphrase: " msgstr "Ange lösenfras: " -#: src/utils_password.c:255 +#: src/utils_password.c:256 #, c-format msgid "Enter passphrase for %s: " msgstr "Ange lösenfras för %s: " -#: src/utils_password.c:285 +#: src/utils_password.c:287 msgid "No key available with this passphrase." msgstr "Ingen nyckel finns tillgänglig med denna lösenfras." -#: src/utils_password.c:320 +#: src/utils_password.c:289 +msgid "No usable keyslot is available." +msgstr "Ingen tillgänglig användbar nyckelplats." + +#: src/utils_password.c:328 #, 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:327 +#: src/utils_password.c:335 #, c-format msgid "Cannot write to keyfile %s." msgstr "Det går inte att skriva till nyckelfilen %s." @@ -3129,6 +3867,46 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Misslyckades med att skriva JSON-fil." +#~ msgid "Requested dmcrypt performance options are not supported." +#~ msgstr "Begärda flaggor för dmcrypt-prestanda stöds inte." + +#~ msgid "Cannot format device %s which is still in use." +#~ msgstr "Det går inte att formatera enheten %s då den används." + +#~ msgid "Key slot %d is not used." +#~ msgstr "Nyckelplats %d används inte." + +#~ msgid "Function not available in FIPS mode." +#~ msgstr "Funktionen är inte tillgänglig i FIPS-läge." + +#~ msgid "Cipher %s is not available." +#~ msgstr "Chiffret %s är inte tillgängligt." + +#~ msgid "Key slot %d selected for deletion." +#~ msgstr "Nyckelplats %d markerad för borttagning." + +#~ msgid "open device as mapping " +#~ msgstr "öppna enhet som mappning " + +#, fuzzy +#~ msgid "Parameter --refresh is only allowed with open or refresh commands.\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" + +#~ msgid "close device (deactivate and remove mapping)" +#~ msgstr "stäng enhet (inaktivera och ta bort mappning)" + +#~ msgid "Failed to set PBKDF parameters." +#~ msgstr "Misslyckades med att sätta PBKDF-parametrar." + +#~ msgid "Cannot seek to device offset.\n" +#~ msgstr "Kan inte söka till enhetsoffset.\n" + +#~ msgid "Interrupted by a signal." +#~ msgstr "Avbruten av en signal." + #~ msgid "Replaced with key slot %d.\n" #~ msgstr "Ersätt med nyckelplats %d.\n" @@ -3146,9 +3924,6 @@ msgstr "Misslyckades med att skriva JSON-fil." #~ "Saknad flagga --token för att ange token att ta bort.\n" #~ " \n" -#~ msgid "Failed to remove token %d.\n" -#~ msgstr "Misslyckades med att ta bort token %d.\n" - #~ msgid "Add or remove keyring token" #~ msgstr "Lägg till eller ta bort token för nyckelring" @@ -3185,9 +3960,6 @@ msgstr "Misslyckades med att skriva JSON-fil." #~ msgid "Cannot use passed UUID unless decryption in progress.\n" #~ msgstr "Kan inte använda insänt UUID om inte dekryptering pågår.\n" -#~ msgid "Key slot %d verified.\n" -#~ msgstr "Nyckelplats %d har verifierats.\n" - #~ msgid "Enter LUKS passphrase: " #~ msgstr "Ange LUKS-lösenfras: " From c2fcc7aebd52697547bc25975af60fa211aac014 Mon Sep 17 00:00:00 2001 From: Josef Andersson Date: Sun, 7 Feb 2021 10:47:54 +0100 Subject: [PATCH 047/149] po: update sv.po (from translationproject.org) --- po/sv.po | 981 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 505 insertions(+), 476 deletions(-) diff --git a/po/sv.po b/po/sv.po index c475db70..44891b61 100644 --- a/po/sv.po +++ b/po/sv.po @@ -2,16 +2,16 @@ # Copyright © 2009 - 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the cryptsetup package. # Daniel Nylander , 2009. -# Josef Andersson , 2016, 2017, 2019, 2020 +# Josef Andersson , 2016, 2017, 2019, 2020, 2021 # msgid "" msgstr "" -"Project-Id-Version: cryptsetup 2.3.3-rc0\n" +"Project-Id-Version: cryptsetup 2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-06-10 11:00+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2021-01-04 22:51+0100\n" "Last-Translator: Josef Andersson \n" -"Language-Team: Swedish \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,61 +19,62 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 2.3\n" -#: lib/libdevmapper.c:399 +#: lib/libdevmapper.c:405 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:408 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:1149 msgid "Requested deferred flag is not supported." msgstr "Begärd flagga deferred stöds inte." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "DM-UUID för enheten %s förkortades." -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "Okänd måltyp dm." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 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:1672 lib/libdevmapper.c:1676 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:1680 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:1684 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:1686 msgid "Requested sector_size option is not supported." msgstr "Begärd flagga sector_size stöds inte." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Discard/TRIM stöds inte." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "Begärt dm-integrity bitmap-läge stöds inte." -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Misslyckades med att läsa dm-%s-segment." @@ -178,7 +179,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Enheten %s är inte aktiv." @@ -201,7 +202,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Stöder inte sektorstorleken för kryptering." @@ -249,7 +250,7 @@ msgstr "VARNING: storlek på LUKS2-metadata ändrades till % byte.\n" msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "VARNING: storlek på LUKS2-nyckelplatsområde ändrades till % byte.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -412,8 +413,8 @@ msgstr "Att återuppta stöds inte för enhet %s." 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Volymnyckeln stämmer inte överens med volymen." @@ -430,7 +431,7 @@ msgstr "Misslyckades med att byta ny nyckelplats." 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:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Nyckelplats %d är inte aktiv." @@ -443,7 +444,7 @@ msgstr "Dataområde spiller över på hashområdet." msgid "Reencryption in-progress. Cannot activate device." msgstr "Omkryptering pågår. Det går inte att aktivera enheten." -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Misslyckades med att erhålla omkrypteringslås." @@ -452,106 +453,106 @@ msgstr "Misslyckades med att erhålla omkrypteringslås." msgid "LUKS2 reencryption recovery failed." msgstr "Misslyckades med återhämtning av LUKS2-omkryptering." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Enheten %s finns redan." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, 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:4301 msgid "Incorrect volume key specified for plain device." msgstr "Felaktig volymnyckel för vanlig enhet." -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "Felaktig rothash angiven för verity-enhet." -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "Root-hashsignatur krävs." -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." 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:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "Enheten %s används fortfarande." -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "Ogiltig enhet %s." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Buffert för volymnyckelen är för liten." -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "Kan inte hämta volymnyckel för vanlig enhet." -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "Det går inte att hämta root-hash för verity-enhet." -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, 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:4870 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:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "Dataförskjutning är inte en multipel av %u byte." -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, 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:5777 #, 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 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "Misslyckades med att initiera standardnyckelplats för LUKS2-parametrar." -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, 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:5987 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:5997 lib/luks2/luks2_reencrypt.c:2952 #, 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:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "Misslyckades med att inhämta globalt minneshårt serialiseringslås." @@ -611,40 +612,45 @@ msgstr "Enheten %s finns inte eller åtkomst nekas." msgid "Device %s is not compatible." msgstr "Enheten %s är inte aktiv." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, 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:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Enhet %s är för liten. Behöver minst % byte." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, 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:736 #, 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:759 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:769 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:815 #, 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:823 #, c-format msgid "Device %s has zero size." msgstr "Enheten %s har noll storlek." @@ -755,7 +761,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Kan inte skriva till enhet %s, behörighet nekad." @@ -778,7 +784,7 @@ msgstr "In-/utfel vid kryptering av nyckelplats." #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -801,42 +807,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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 +#: lib/luks1/keymanage.c:286 lib/luks2/luks2_json_metadata.c:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Det går inte att läsa säkerhetskopia för huvud %s." @@ -858,7 +864,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -911,7 +917,7 @@ msgstr "Reparation misslyckades." 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:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "Inga kända problem identifierade för LUKS-huvud." @@ -930,8 +936,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Felaktigt LUKS-UUID-format angavs." @@ -1000,11 +1006,11 @@ msgstr "Högsta TCRYPT-lösenfraslängd (%zu) överskriden." 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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Försäkra dig om att kärnmodulen algif_skcipher är inläst." @@ -1017,16 +1023,16 @@ msgstr "Aktivering stöds inte för sektorstorlek %d." 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 +#: 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." @@ -1049,73 +1055,73 @@ msgstr "Oväntad sträng (”%s”) funnen vid tolkning av volymhuvudnycklar som msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "Oväntad metadatapostvärde av typ ”%u” funnen vid tolkning av volymhuvudnycklar som stöds." -#: lib/bitlk/bitlk.c:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Misslyckades med att läsa BITLK-signatur från %s." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "BITLK version 1 stöds ej för närvarande." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Ogiltig eller okänd boot-signatur för BITLK-enhet." -#: lib/bitlk/bitlk.c:502 +#: lib/bitlk/bitlk.c:503 msgid "Invalid or unknown signature for BITLK device." msgstr "Ogiltig eller okänd signatur för BITLK-enhet." -#: lib/bitlk/bitlk.c:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Stöder inte sektorstorleken %." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "Misslyckades med att läsa BITLK-huvud från %s." -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "Misslyckades med att läsa BITLK FVE-metadata från %s." -#: lib/bitlk/bitlk.c:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Krypteringstypen är okänd eller stöds ej." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Misslyckades med att läsa BITLK -metadataposter från %s." -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Denna åtgärd stöds ej." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Fel nyckelstorlek." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Oväntad nyckeldatastorlek." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "Denna BITLK-enhet är i tillstånd som inte stöds och kan inte aktiveras." -#: lib/bitlk/bitlk.c:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "Det går inte att aktivera BITLK-enheter av typen ”%s”." -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "Aktivering av delvis avkrypterade BITLK-enheter stöds ej." -#: lib/bitlk/bitlk.c:1204 +#: lib/bitlk/bitlk.c:1212 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "Det går inte att aktivera enheten, kärnan dm-crypt saknar stöd för BITLK IV." -#: lib/bitlk/bitlk.c:1208 +#: lib/bitlk/bitlk.c:1216 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "Det går inte att aktivera enheten, kärnan dm-crypt saknar stöd för BITLK Elephant diffuser." @@ -1266,8 +1272,8 @@ msgstr "Kärnan stöder inte dm-integrity-mappning." msgid "Kernel does not support dm-integrity fixed metadata alignment." 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Misslyckades med att få skrivlås på enheten %s." @@ -1293,40 +1299,40 @@ msgstr "Begärd dataoff för liten." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "VARNING: nyckelplatsområdet (% 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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 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:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1336,7 +1342,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:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1346,50 +1352,50 @@ 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:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, c-format msgid "Missing key for dm-crypt segment %u" msgstr "Saknar nyckel för dm-crypt-segmentet %u" -#: lib/luks2/luks2_json_metadata.c:2022 lib/luks2/luks2_reencrypt.c:1764 +#: lib/luks2/luks2_json_metadata.c:2032 lib/luks2/luks2_reencrypt.c:1764 msgid "Failed to set dm-crypt segment." msgstr "Misslyckades med att läsa dm-crypt-segment." -#: lib/luks2/luks2_json_metadata.c:2028 lib/luks2/luks2_reencrypt.c:1770 +#: lib/luks2/luks2_json_metadata.c:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "Misslyckades med att läsa dm-linear-segment." -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "Integritetskonfiguration som ej stöds på enheten." -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 msgid "Reencryption in-progress. Cannot deactivate device." 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, c-format msgid "Failed to replace suspended device %s with dm-error target." 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:2342 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:2349 msgid "Unmet LUKS2 requirements detected." msgstr "Ej uppfyllt LUKS2-krav identifierat." -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "Operation incompatible with device marked for legacy reencryption. Aborting." 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:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Åtgärden inkompatibel med enhet markerad för LUKS2-omkryptering. Avbryter." @@ -1427,7 +1433,7 @@ msgstr "Kunde inte flytta nyckelplatsområde. Inte nog med utrymme." msgid "Unable to move keyslot area. LUKS2 keyslots area too small." 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." @@ -1676,69 +1682,69 @@ msgstr "Ingen fri plats för token." msgid "Failed to create builtin token %s." msgstr "Misslyckades med att skapa inbyggd token %s." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 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:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Inget känt chifferspecifikationsmönster kunde identifieras." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Åtgärd avbruten.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Flaggan --key-file krävs." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Ange VeraCrypt PIM: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Ogiltigt PIM-värde:tolkningsfel." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Ogiltigt PIM-värde: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Ogiltigt PIM-värde:utanför intervallet." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "Inget enhetshuvud finns tillgängligt med denna lösenfras." -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "Enheten %s är inte en giltig BITLK-enhet." -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1748,68 +1754,68 @@ 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:681 #, 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:709 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:850 msgid "Benchmark interrupted." msgstr "Prestandamätning avbruten." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "PBKDF2-%-9s N/A\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s N/A\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Resultat från prestandamätningen är inte pålitligt." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Algoritm | Nyckel | Kryptering | Avkryptering\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, c-format msgid "Cipher %s (with %i bits key) is not available." 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Algoritm | Nyckel | Kryptering | AVkryptering\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "N/A" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1817,19 +1823,19 @@ msgstr "" "Verkar som enheten inte kräver omkrypteringsåterställning.\n" "Vill du ändå fortsätta?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Vill du verkligen fortsätta med LUKS2-omkrypteringsåterställning?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Ange lösenfras för omkrypteringsåterhämtning: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 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:1172 src/integritysetup.c:146 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 +1843,104 @@ 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:1194 src/integritysetup.c:168 #, 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:1243 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:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Flaggorna för storlekar på LUKS2-metadata stöds inte." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, 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/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Inga kända integritetspecifikationsmönster identifierat." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, 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:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Misslyckades med att sätta pbkdf-parametrar." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 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:1462 src/cryptsetup.c:1773 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." 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:1500 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:1581 src/cryptsetup.c:1651 #, 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:1593 src/cryptsetup.c:1654 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:1594 msgid "Enter any remaining passphrase: " msgstr "Ange eventuell återstående lösenfras: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 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:1633 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:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 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:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Ange valfri existerande lösenfras: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "Ange lösenfras att ändra: " -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Ange ny lösenfras: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "Ange lösenfras för nyckelplats att konvertera: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "Endast ett enhetsargument för operationen isLuks stöds." -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1944,12 +1950,12 @@ 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 +#: src/cryptsetup.c:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "Nyckelplats %d innehåller inte obunden nyckel." -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1957,30 +1963,30 @@ msgstr "" "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:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Flaggan --header-backup-file krävs." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "%s är inte en cryptsetup-hanterad enhet." -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, 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:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Okänd metadata för enhetstypen %s." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 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:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1989,95 +1995,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:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Åtgärden avbryten, nyckelplatser raderades EJ.\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 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:2410 #, c-format msgid "Device is already %s type." msgstr "Enheten är redan av %s-typ." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, 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:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "Åtgärden avbröts, enheten konverterades INTE.\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Token %d är ogiltig." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Token %d används." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, 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:2531 #, c-format msgid "Token %d is not in use." msgstr "Token %d används ej." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Misslyckades med att importera token från fil." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, 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:2606 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:2612 src/cryptsetup.c:2620 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:2625 #, c-format msgid "Invalid token operation %s." msgstr "Ogiltig tokenåtgärd %s." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, c-format msgid "Auto-detected active dm device '%s' for data device %s.\n" msgstr "Auto-identifierade aktiv dm-enhet ”%s” för dataenheten %s.\n" -#: src/cryptsetup.c:2672 +#: src/cryptsetup.c:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "Enheten %s är inte en giltig blockenhet.\n" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "Misslyckades med att identifiera kopplingarna till enhet %s." -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2090,233 +2096,233 @@ msgstr "" "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 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "Ogiltig LUKS-enhetstyp." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 msgid "Encryption without detached header (--header) is not possible without data device size reduction (--reduce-device-size)." 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:2778 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Justera värdet av --reduce-device-size-värdet till dubbla --offset % (sektorer).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "Kryptering stöds endast för formatet LUKS2." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, c-format msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" msgstr "Identifierade LUKS-enhet på %s. Vill du kryptera LUKS-enheten igen?" -#: src/cryptsetup.c:2816 +#: src/cryptsetup.c:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "Tillfällig huvudfil %s finns redan. Avbryter." -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "Det går inte att skapa tillfällig huvudfil %s." -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3053 src/cryptsetup.c:3059 +#: src/cryptsetup.c:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "Inte nog med fria nyckelplatser för omkryptering." -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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 precis en aktiv nyckelplats." -#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341 +#: src/cryptsetup.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Ange lösenfras för nyckelplats %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Ange lösenfras för nyckelplats %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Kommandot kräver en enhet som argument." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." msgstr "Stödjer endast LUKS2-formatet. Använd verktyget cryptsetup-reencrypt för LUKS1." -#: src/cryptsetup.c:3297 +#: src/cryptsetup.c:3317 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." 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:3327 src/cryptsetup_reencrypt.c:178 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:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "LUKS2-omkryptering är redan initierad. Avbryter åtgärd." -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "LUKS2-enheten är inte i omkryptering." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr " [--type ] []" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " msgstr "öppna enhet som " -#: 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "stäng enhet (ta bort mappning)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "ändra storlek på aktiv enhet" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "visa enhetsstatus" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher ]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "försök att reparera metadata på disken" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "omkryptering av LUKS2-enhet" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "ta bort alla nyckelplatser (ta bort krypteringsnyckeln)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "konvertera LUKS från/till LUKS2-format" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 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:3376 src/cryptsetup.c:3377 msgid " []" msgstr " []" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "formaterar en LUKS-enhet" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 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:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr " []" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 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:3379 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:3380 msgid "converts a key to new pbkdf parameters" msgstr "konverterar en nyckel till nya pbkdf-parametrar" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr " " -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "rensar nyckeln med nummer från LUKS-enhet" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "skriv ut UUID för LUKS-enhet" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "testar för LUKS-partitionshuvud" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "skriver ut information om LUKS-partition" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "skriver ut information om TCRYPT-partition" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "skriv ut BITLK-enhetsinformation" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 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:3388 msgid "Resume suspended LUKS device" msgstr "Återuppta LUKS-enhet i vänteläge" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "Säkerhetskopiera huvud och nyckelplatser från LUKS-enhet" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "Återställ huvud och nyckelplatser för LUKS-enhet" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr " " -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Manipulera LUKS2-token" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2324,7 +2330,7 @@ msgstr "" "\n" "<åtgärd> är en av:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2336,7 +2342,7 @@ msgstr "" "\topen: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n" "\tclose: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkOpen\n" -#: src/cryptsetup.c:3399 +#: src/cryptsetup.c:3419 #, c-format msgid "" "\n" @@ -2351,7 +2357,7 @@ msgstr "" " är numret för LUKS-nyckelplatsen att ändra\n" " valfri nyckelfil för den nya nyckeln för luksAddKey-åtgärden\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2360,7 +2366,7 @@ msgstr "" "\n" "Inkompilerat standardmetadataformat är %s (för luksFormat-åtgärd).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2377,7 +2383,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:3442 #, c-format msgid "" "\n" @@ -2392,443 +2398,451 @@ 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:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Visa detta hjälpmeddelande" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 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.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Skriv ut paketversion" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Hjälpflaggor:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 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.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Visa felsökningsmeddelanden" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 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:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 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:3512 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:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Läs nyckeln från en fil" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Läs volymnyckeln (master) från fil." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 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:3516 src/cryptsetup_reencrypt.c:1618 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/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "BITAR" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "byte" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Antal byte att hoppa över i nyckelfil" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 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:3520 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:3521 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:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "SEKTORER" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 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:3524 msgid "The start offset in the backend device" msgstr "Startoffset i bakändesenheten" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 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:3526 msgid "Create a readonly mapping" msgstr "Skapa en skrivskyddad mappning" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Fråga inte efter bekräftelse" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 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.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "sek" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 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:3530 src/cryptsetup_reencrypt.c:1626 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:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Justera nyttolast i sektorgränser - för luksFormat" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 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:3533 src/cryptsetup_reencrypt.c:1627 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:3534 src/cryptsetup_reencrypt.c:1628 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:3535 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:3536 src/veritysetup.c:482 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:3537 src/integritysetup.c:579 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:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Enhet eller fil med separerat LUKS-huvud" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "Aktivera inte enhet, kontrollera endast lösenfrasen" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Använd dolt huvud (gömd TCRYPT-enhet)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Enheten är system-TCRYPT-disk (med starthanterare)" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Använd säkerhetskopia (sekundär) för TCRYPT-huvud" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Sök också efter VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Personlig iteration för VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Query Personal Iteration Multiplier för VeraCrypt-kompatibel enhet" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" msgstr "Typer av enhetsmetadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" -#: src/cryptsetup.c:3527 +#: src/cryptsetup.c:3547 msgid "Disable password quality check (if enabled)" msgstr "Inaktivera kvalitetskontroll av lösenord (om aktiverat)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 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:3549 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:3550 +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:3551 +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:3552 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:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "Använder globalt lås för att serialisera minneshård PBKDF (OOM-lösning)" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 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:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "ms" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Minneskostnadsgräns för PBKDF" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "kilobyte" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Parallellkostnad för PBKDF" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "trådar" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Iterationskostnad för PBKDF (tvingad, inaktiverar prestandamätning)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Nyckelplats-prioritet: ignore,normal,prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Inaktivera låsning av metadata på disk" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 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:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Algoritm för dataintegritet (endast LUKS2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Inaktivera journal för integritetsenhet" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Rensa inte enhet efter formatering" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Använd ineffektiv föråldrad padding (gamla kärnor)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 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:3567 msgid "Token number (default: any)" msgstr "Tokenantal (standardvärde: any)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Nyckelbeskrivning" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Sektorstorlek för kryptering (standardvärde 512 byte)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "Använd IV-räkning i sektorstorlek (ej i 512 byte)" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "Sätt och spara undan aktiveringsflaggorna för enheten" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Ange etikett för LUKS2-enhet" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Ange undersystemsetikett för LUKS2-enheten" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "Skapa eller skriv ut obunden (inget tilldelat datasegment) LUKS2-nyckelplats" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 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:3576 msgid "LUKS2 header metadata area size" msgstr "Områdesstorlek för metadata på LUKS2-huvudet" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Storlek på nyckelplatsområdet för LUKS2-huvud" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Uppdatera (återaktivera) enhet med nya parametrar" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "LUKS2-nyckelplats: Storleken för krypteringsnyckeln" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "LUKS2-nyckelplats: Chiffret används krypering av nyckelplats" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Kryptera LUKS2-enheten permanent (direktkryptering)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Dekryptera LUKS2-enheten (ta bort kryptering)" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Initiera LUKS2-omkryptering endast i metadata." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "Återupptog endast initierad LUKS2-omkryptering." -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "Förminska dataenhetsstorleken (flytta dataoffset). FARLIGT!" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "Maximal storlek på omkryptering av varm zon." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "Återhämtningstyp för omkrypteringszon (checksumma,journal,ingen)" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "Hashkontrollsumma för omkryptering av varm zon" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 msgid "Override device autodetection of dm device to be reencrypted" 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[FLAGGA…] <åtgärd> <åtgärdsspecifik>" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Argumentet <åtgärd> saknas." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Okänd åtgärd." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "Flaggorna --refresh och --test-passphrase är ömsesidigt uteslutande." -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "Flaggan --deferred är endast tillåten för kommandot close." -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 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." -#: src/cryptsetup.c:3728 src/integritysetup.c:654 +#: src/cryptsetup.c:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open." -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "Flaggan --persistent är endast tillåten för åtgärden open." -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation." msgstr "Flaggan --allow-discards är endast tillåten för åtgärden open." -#: src/cryptsetup.c:3743 +#: src/cryptsetup.c:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "Flaggan --persistent är ej tillåtet med --test-passphrase." -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 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,255 +2850,259 @@ msgstr "" "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 +#: src/cryptsetup.c:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "Flaggan --integrity är endast tillåten för luksFormat (LUKS2)." -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension." msgstr "Flaggan --integrity-no-wipe kan endast användas för åtgärden formatera med integritetsutökningar." -#: src/cryptsetup.c:3770 +#: src/cryptsetup.c:3792 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations." msgstr "Flaggorna --label och --subsystem är endast tillåtna för luksFormat och konfiguration av LUKS2-åtgärder." -#: src/cryptsetup.c:3776 +#: src/cryptsetup.c:3798 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-, TCRYPT-, och BITLK-enheter." -#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708 +#: src/cryptsetup.c:3803 src/cryptsetup_reencrypt.c:1708 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.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Nyckelplatsen är ogiltig." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Negativt tal för flagga ej tillåtet." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 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.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 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:3835 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:3839 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:3843 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:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Ogiltig storlekspecifikation för LUKS2-metadata på enhet." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Ogiltig storlekspecifikation för LUKS2-nyckelplats på enhet." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "Flaggan --align-payload och --offset kan inte kombineras." -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 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." -#: src/cryptsetup.c:3851 +#: src/cryptsetup.c:3873 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, luksFormat och omkrypteringsenheter." -#: src/cryptsetup.c:3857 +#: src/cryptsetup.c:3879 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." -#: src/cryptsetup.c:3862 +#: src/cryptsetup.c:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "Flaggan --tcrypt-hidden kan inte kombineras med --allow-discards." -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "Flaggan --veracrypt stöds endast för TCRYPT-enhetstyper." -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Angav ett ogiltigt argument för parametern --veracrypt-pim." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "Flaggan --veracrypt-pim stöds endast för VeraCrypt-kompatibla enheter." -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 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." -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive." msgstr "Flaggorna --veracrypt-pim och --veracrypt-query-pim är ömsesidigt uteslutande." -#: src/cryptsetup.c:3896 +#: src/cryptsetup.c:3918 msgid "Option --priority can be only ignore/normal/prefer." msgstr "Flaggan --priority kan endast vara ignore/normal/prefer." -#: src/cryptsetup.c:3901 src/cryptsetup.c:3939 +#: src/cryptsetup.c:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Specifikation för nyckelplats krävs." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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." -#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698 +#: src/cryptsetup.c:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "Tvingade PBKDF-iterationer går inte att kombinera med flaggan iteration time." -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "Flaggan för sektorstorlek stöds inte för detta kommando." -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 msgid "Large IV sectors option is supported only for opening plain type device with sector size larger than 512 bytes." 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 +#: src/cryptsetup.c:3956 msgid "Key size is required with --unbound option." msgstr "Nyckelstorlek krävs med flaggan --unbound." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "Flaggan --unbound kan endast användas tillsammans med ätgärderna luksAddKey och luksDump." -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "Flaggan --refresh är endast tillåten för åtgärden open." -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "Det går inte att inaktivera metadatalås." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "Ogiltig högsta storlekspecifikation för varm zon-omkryptering." -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Ogiltig storlekspecifikation på enhet." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "Högsta förminskningsstorlek för enhet är 1 GiB." -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "Minskningsstorlek måste vara en multipel av 512-bytesektor." -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "Ogiltig datastorlekspecifikation." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Minska storleksöverspill." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "LUKS2-dekryptering kräver flaggan --header." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "Enhetsstorlek måste vara en multipel av sektor på 512-byte." -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "Flaggan --reduce-device-size och --data-size kan inte kombineras." -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Flaggan --device-size och --size kan inte kombineras." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Flaggorna --keyslot-cipher och --keyslot-key-size måste användas tillsammans." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Angav ogiltig saltsträng." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, 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:108 #, 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:182 msgid "Invalid root hash string specified." msgstr "Angav ogiltig rothashsträng." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Ogiltig signaturfil %s." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Det går inte att läsa signaturfilen %s." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr " " -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "formatera enhet" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr " " -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "verifiera enhet" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr " " -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "visa statistik för aktiv enhet" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "visa information från disk" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3099,7 +3117,7 @@ msgstr "" " är enheten som innehåller verifieringsdata\n" " hash för rotnoden på \n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3110,102 +3128,110 @@ 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:471 msgid "Do not use verity superblock" msgstr "Använd inte verity superblock" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "Formattyp (1 - normal, 0 - ursprungliga Chrome OS)" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "antal" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Blockstorlek på dataenheten" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Blockstorlek på hashenheten" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "FEC paritetsbyte" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Antalet block i datafilen" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "block" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 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:477 src/integritysetup.c:549 msgid "path" msgstr "sökväg" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Startoffset på hashenheten" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Startoffset på FEC-enheten" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Hashalgoritm" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "sträng" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Salt" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "hexsträng" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Sökväg till root-hashsignaturfilen" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Starta om kärna om något skadat identifieras" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Sätt kärnan i Panic-läge om korruption identifieras" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Ignorera om något är skadat, logga endast" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Verifiera inte nollställda block" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 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 +#: src/veritysetup.c:588 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 åtgärden open." -#: src/veritysetup.c:587 +#: src/veritysetup.c:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "Flaggan --root-hash-signature kan användas endast för åtgärden open." -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 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." +#: src/veritysetup.c:603 +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:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3867,6 +3893,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Misslyckades med att skriva JSON-fil." +#~ 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." From 03607db1f88ee86e79864f80bb6bcdb9b8c503da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=80=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20=D0=9D?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=BB=D0=B8=D1=9B?= Date: Sat, 15 Aug 2020 11:30:09 +0200 Subject: [PATCH 048/149] po: update sr.po (from translationproject.org) --- po/sr.po | 718 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 365 insertions(+), 353 deletions(-) diff --git a/po/sr.po b/po/sr.po index e05d81ed..b4eb2cf5 100644 --- a/po/sr.po +++ b/po/sr.po @@ -4,10 +4,10 @@ # Мирослав Николић , 2014–2020. msgid "" msgstr "" -"Project-Id-Version: cryptsetup-2.3.2-rc0\n" +"Project-Id-Version: cryptsetup-2.3.3-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-04-17 12:18+0200\n" -"PO-Revision-Date: 2020-05-02 22:38+0200\n" +"POT-Creation-Date: 2020-05-15 10:45+0200\n" +"PO-Revision-Date: 2020-08-04 09:49+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -26,53 +26,53 @@ msgstr "Не могу да покренем мапера уређаја, рад msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "Не могу да покренем мапера уређаја. Да ли је учитан модул кернела „dm_mod“?" -#: lib/libdevmapper.c:1128 +#: lib/libdevmapper.c:1131 msgid "Requested deferred flag is not supported." msgstr "Затражена одложена заставица није подржана." -#: lib/libdevmapper.c:1195 +#: lib/libdevmapper.c:1198 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "ДМ-УЈИБ за уређај „%s“ је скраћен." -#: lib/libdevmapper.c:1517 +#: lib/libdevmapper.c:1520 msgid "Unknown dm target type." msgstr "Непозната врста „dm“ мете." -#: lib/libdevmapper.c:1620 lib/libdevmapper.c:1676 +#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 msgid "Requested dm-crypt performance options are not supported." msgstr "Затражене опције перформанси дм-шифровања нису подржане." -#: lib/libdevmapper.c:1627 +#: lib/libdevmapper.c:1630 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "Затражене опције рада оштећених података дм-веритија нису подржане." -#: lib/libdevmapper.c:1631 +#: lib/libdevmapper.c:1634 msgid "Requested dm-verity FEC options are not supported." msgstr "Затражене „dm-verity FEC“ опције нису подржане." -#: lib/libdevmapper.c:1635 +#: lib/libdevmapper.c:1638 msgid "Requested data integrity options are not supported." msgstr "Затражене опције целовитости података нису подржане." -#: lib/libdevmapper.c:1637 +#: lib/libdevmapper.c:1640 msgid "Requested sector_size option is not supported." msgstr "Затражене опције величине одељка нису подржане." -#: lib/libdevmapper.c:1642 +#: lib/libdevmapper.c:1645 msgid "Requested automatic recalculation of integrity tags is not supported." msgstr "Затражене опције самосталног прерачунавања ознака целовитости нису подржане." -#: lib/libdevmapper.c:1646 lib/libdevmapper.c:1679 lib/libdevmapper.c:1682 +#: lib/libdevmapper.c:1649 lib/libdevmapper.c:1682 lib/libdevmapper.c:1685 #: lib/luks2/luks2_json_metadata.c:2160 msgid "Discard/TRIM is not supported." msgstr "Одбацивање/ОДСЕЦАЊЕ није подржано." -#: lib/libdevmapper.c:1650 +#: lib/libdevmapper.c:1653 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "Затражени режим битмапе дм-целовитости није подржан." -#: lib/libdevmapper.c:2602 +#: lib/libdevmapper.c:2607 #, c-format msgid "Failed to query dm-%s segment." msgstr "Нисам успео да пропитам „dm-%s“ подеок." @@ -200,7 +200,7 @@ 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:1221 src/cryptsetup.c:3922 +#: src/cryptsetup.c:1226 src/cryptsetup.c:3923 msgid "Unsupported encryption sector size." msgstr "Неподржана величина одељка шифровања." @@ -429,7 +429,7 @@ msgstr "Нисам успео да разменим нови утор кључа msgid "Key slot %d is invalid." msgstr "Утор кључа „%d“ није исправан." -#: lib/setup.c:3675 src/cryptsetup.c:1567 src/cryptsetup.c:1912 +#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 #, c-format msgid "Keyslot %d is not active." msgstr "Утор кључа „%d“ није радан." @@ -486,7 +486,7 @@ 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:2659 +#: src/cryptsetup.c:2664 #, c-format msgid "Device %s is still in use." msgstr "Уређај „%s“ је још увеку употреби." @@ -800,12 +800,12 @@ 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:1428 -#: src/cryptsetup.c:1554 src/cryptsetup.c:1611 src/cryptsetup.c:1667 -#: src/cryptsetup.c:1734 src/cryptsetup.c:1837 src/cryptsetup.c:1901 -#: src/cryptsetup.c:2131 src/cryptsetup.c:2326 src/cryptsetup.c:2386 -#: src/cryptsetup.c:2452 src/cryptsetup.c:2616 src/cryptsetup.c:3266 -#: src/cryptsetup.c:3275 src/cryptsetup_reencrypt.c:1388 +#: 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 #, c-format msgid "Device %s is not a valid LUKS device." msgstr "Уређај „%s“ није исправан ЛУКС уређај." @@ -910,7 +910,7 @@ msgstr "Поправка није успела." msgid "Requested LUKS hash %s is not supported." msgstr "Затражени ЛУКС хеш „%s“ није подржан." -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1128 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 msgid "No known problems detected for LUKS header." msgstr "Нису откривени познати проблеми за ЛУКС заглавље." @@ -930,7 +930,7 @@ 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:2779 +#: src/cryptsetup.c:2784 msgid "Wrong LUKS UUID format provided." msgstr "Достављен је погрешан запис ЛУКС УЈИБ-а." @@ -999,11 +999,11 @@ msgstr "Премашена је највећа дужина „TCRYPT“ про msgid "PBKDF2 hash algorithm %s not available, skipping." msgstr "„PBKDF2“ алгоритам хеша „%s“ није доступан, прескачем." -#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1005 +#: lib/tcrypt/tcrypt.c:611 src/cryptsetup.c:1010 msgid "Required kernel crypto interface not available." msgstr "Није доступно затражено сучеље криптографије језгра." -#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1007 +#: lib/tcrypt/tcrypt.c:613 src/cryptsetup.c:1012 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Уверите се да је учитан модул кернела „algif_skcipher“." @@ -1029,87 +1029,92 @@ msgstr "Кернел не подржава мапирање сагласно с msgid "This function is not supported without TCRYPT header load." msgstr "Ова функција није подржана без учитавања „TCRYPT“ заглавља." -#: lib/bitlk/bitlk.c:332 +#: lib/bitlk/bitlk.c:333 #, c-format msgid "Unexpected metadata entry type '%u' found when parsing supported Volume Master Key." msgstr "Нађох неочекивану врсту уноса метаподатака „%u“ приликом обраде подржаног главног кључа волумена." -#: lib/bitlk/bitlk.c:379 +#: lib/bitlk/bitlk.c:380 msgid "Invalid string found when parsing Volume Master Key." msgstr "Нађох неисправну ниску приликом обраде главног кључа волумена." -#: lib/bitlk/bitlk.c:384 +#: lib/bitlk/bitlk.c:385 #, c-format msgid "Unexpected string ('%s') found when parsing supported Volume Master Key." msgstr "Нађох неочекивану ниску („%s“) приликом обраде подржаног главног кључа волумена." -#: lib/bitlk/bitlk.c:398 +#: lib/bitlk/bitlk.c:399 #, c-format msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "Нађох неочекивану вредност уноса метаподатака „%u“ приликом обраде подржаног главног кључа волумена." -#: lib/bitlk/bitlk.c:477 +#: lib/bitlk/bitlk.c:478 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Нисам успео да прочитам „BITLK“ потпис из „%s“." -#: lib/bitlk/bitlk.c:483 +#: lib/bitlk/bitlk.c:484 msgid "BITLK version 1 is currently not supported." msgstr "„BITLK“ издање 1 тренутно није подржано." -#: lib/bitlk/bitlk.c:489 +#: lib/bitlk/bitlk.c:490 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Неисправан или непознат потпис учитавања за „BITLK“ уређај." -#: lib/bitlk/bitlk.c:501 +#: lib/bitlk/bitlk.c:502 msgid "Invalid or unknown signature for BITLK device." msgstr "Неисправан или непознат потпис за „BITLK“ уређај." #: lib/bitlk/bitlk.c:509 #, c-format +msgid "Unsupported sector size %." +msgstr "Неподржана величина одељка „%“." + +#: lib/bitlk/bitlk.c:517 +#, c-format msgid "Failed to read BITLK header from %s." msgstr "Нисам успео да прочитам „BITLK“ заглавље из „%s“." -#: lib/bitlk/bitlk.c:534 +#: lib/bitlk/bitlk.c:542 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "Нисам успео да прочитам „BITLK FVE“ метаподатаке из „%s“." -#: lib/bitlk/bitlk.c:585 +#: lib/bitlk/bitlk.c:593 msgid "Unknown or unsupported encryption type." msgstr "Непозната или неподржана врста криптографије." -#: lib/bitlk/bitlk.c:618 +#: lib/bitlk/bitlk.c:626 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Нисам успео да прочитам уносе „BITLK“ метаподатака из „%s“." -#: lib/bitlk/bitlk.c:911 +#: lib/bitlk/bitlk.c:920 msgid "This operation is not supported." msgstr "Радња није подржана." -#: lib/bitlk/bitlk.c:919 +#: lib/bitlk/bitlk.c:928 msgid "Wrong key size." msgstr "Погрешна величина кључа." -#: lib/bitlk/bitlk.c:971 +#: lib/bitlk/bitlk.c:980 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "Овај „BITLK“ уређај је у неподржаном стању и не може бити активиран." -#: lib/bitlk/bitlk.c:977 +#: lib/bitlk/bitlk.c:986 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "„BITLK“ уређај са врстом „%s“ се не може активирати." -#: lib/bitlk/bitlk.c:1059 +#: lib/bitlk/bitlk.c:1068 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "Активирање делимично дешифрованог „BITLK“ уређаја није подржано." -#: lib/bitlk/bitlk.c:1192 +#: lib/bitlk/bitlk.c:1204 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK IV“." -#: lib/bitlk/bitlk.c:1196 +#: lib/bitlk/bitlk.c:1208 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK Elephant“ дифузера." @@ -1670,69 +1675,69 @@ msgstr "Нема слободног утора скупине." msgid "Failed to create builtin token %s." msgstr "Нисам успео да направим уграђену скупину „%s“." -#: src/cryptsetup.c:163 +#: src/cryptsetup.c:164 msgid "Can't do passphrase verification on non-tty inputs." msgstr "Не могу да одрадим проверу пропусне речи на не-конзолним улазима." -#: src/cryptsetup.c:216 +#: src/cryptsetup.c:221 msgid "Keyslot encryption parameters can be set only for LUKS2 device." msgstr "Параметри шифровања утора кључа се могу поставити само за ЛУКС2 уређај." -#: src/cryptsetup.c:246 src/cryptsetup.c:954 src/cryptsetup.c:1264 -#: src/cryptsetup.c:3140 src/cryptsetup_reencrypt.c:723 +#: 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 msgid "No known cipher specification pattern detected." msgstr "Није откривен познат образац одреднице шифрера." -#: src/cryptsetup.c:254 +#: src/cryptsetup.c:259 msgid "WARNING: The --hash parameter is being ignored in plain mode with keyfile specified.\n" msgstr "УПОЗОРЕЊЕ: Параметар „--hash“ је занемарен у обичном режиму са наведеном кључном датотеком.\n" -#: src/cryptsetup.c:262 +#: src/cryptsetup.c:267 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:302 +#: src/cryptsetup.c:307 #, c-format msgid "Detected device signature(s) on %s. Proceeding further may damage existing data." msgstr "Открих потпис(е) уређаја на „%s“. Даље настављање може оштетити постојеће податке." -#: src/cryptsetup.c:308 src/cryptsetup.c:1085 src/cryptsetup.c:1137 -#: src/cryptsetup.c:1241 src/cryptsetup.c:1314 src/cryptsetup.c:1969 -#: src/cryptsetup.c:2677 src/cryptsetup.c:2800 src/integritysetup.c:233 +#: 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 msgid "Operation aborted.\n" msgstr "Радња је обустављена.\n" -#: src/cryptsetup.c:376 +#: src/cryptsetup.c:381 msgid "Option --key-file is required." msgstr "Захтевана је опција „--key-file“." -#: src/cryptsetup.c:429 +#: src/cryptsetup.c:434 msgid "Enter VeraCrypt PIM: " msgstr "Унесите „VeraCrypt PIM“: " -#: src/cryptsetup.c:438 +#: src/cryptsetup.c:443 msgid "Invalid PIM value: parse error." msgstr "Неисправна „PIM“ вредност: грешка обраде." -#: src/cryptsetup.c:441 +#: src/cryptsetup.c:446 msgid "Invalid PIM value: 0." msgstr "Неисправна „PIM“ вредност: 0." -#: src/cryptsetup.c:444 +#: src/cryptsetup.c:449 msgid "Invalid PIM value: outside of range." msgstr "Неисправна „PIM“ вредност: изван опсега." -#: src/cryptsetup.c:467 +#: src/cryptsetup.c:472 msgid "No device header detected with this passphrase." msgstr "Није откривено заглавље уређаја са овом пропусном речи." -#: src/cryptsetup.c:536 +#: src/cryptsetup.c:541 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "Уређај „%s“ није исправан „BITLK“ уређај." -#: src/cryptsetup.c:571 +#: src/cryptsetup.c:576 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1742,68 +1747,68 @@ msgstr "" "који омогућава приступ шифрованој партицији без лозинке.\n" "Овај избачај треба увек бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:668 +#: src/cryptsetup.c:673 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "Уређај „%s“ је још увек активан и заказан за одложено уклањање.\n" -#: src/cryptsetup.c:696 +#: src/cryptsetup.c:701 msgid "Resize of active device requires volume key in keyring but --disable-keyring option is set." msgstr "Сразмеравање активног уређаја захтева кључ волумена у привеску кључева али је постављена „--disable-keyring“ опција." -#: src/cryptsetup.c:833 +#: src/cryptsetup.c:838 msgid "Benchmark interrupted." msgstr "Оцењивање је прекинуто." -#: src/cryptsetup.c:854 +#: src/cryptsetup.c:859 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "„PBKDF2-%-9s“ Н/Д\n" -#: src/cryptsetup.c:856 +#: src/cryptsetup.c:861 #, c-format msgid "PBKDF2-%-9s %7u iterations per second for %zu-bit key\n" msgstr "„PBKDF2-%-9s“ %7u понављања у секунди за %zu-битни кључ\n" -#: src/cryptsetup.c:870 +#: src/cryptsetup.c:875 #, c-format msgid "%-10s N/A\n" msgstr "%-10s Н/Д\n" -#: src/cryptsetup.c:872 +#: src/cryptsetup.c:877 #, 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:896 +#: src/cryptsetup.c:901 msgid "Result of benchmark is not reliable." msgstr "Резултат оцењивања није поуздан." -#: src/cryptsetup.c:946 +#: src/cryptsetup.c:951 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:966 +#: src/cryptsetup.c:971 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Алгоритам | Кључ | Шифровање | Дешифровање\n" -#: src/cryptsetup.c:970 +#: src/cryptsetup.c:975 #, 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:989 +#: src/cryptsetup.c:994 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Алгоритам | Кључ | Шифровање | Дешифровање\n" -#: src/cryptsetup.c:998 +#: src/cryptsetup.c:1003 msgid "N/A" msgstr "Недоступно" -#: src/cryptsetup.c:1078 +#: src/cryptsetup.c:1083 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1811,19 +1816,19 @@ msgstr "" "Изгледа да уређај не захтева опоравак поновног шифровања.\n" "Да ли желите да наставите?" -#: src/cryptsetup.c:1084 +#: src/cryptsetup.c:1089 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Да наставим са опоравком ЛУКС2 поновног шифровања?" -#: src/cryptsetup.c:1093 +#: src/cryptsetup.c:1098 msgid "Enter passphrase for reencryption recovery: " msgstr "Унесите пропусну реч за опоравак поновног шифровања: " -#: src/cryptsetup.c:1136 +#: src/cryptsetup.c:1141 msgid "Really try to repair LUKS device header?" msgstr "Стварно да покушам да поправим заглавље ЛУКС уређаја?" -#: src/cryptsetup.c:1155 src/integritysetup.c:146 +#: src/cryptsetup.c:1160 src/integritysetup.c:146 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" @@ -1831,104 +1836,104 @@ msgstr "" "Бришем уређај да бих започео суму провере целовитости.\n" "Можете прекинути ово притиском на „CTRL+c“ (остатак необрисаног уређаја садржаће неисправну суму провере).\n" -#: src/cryptsetup.c:1177 src/integritysetup.c:168 +#: src/cryptsetup.c:1182 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Не могу да деактивирам привремени уређај „%s“." -#: src/cryptsetup.c:1226 +#: src/cryptsetup.c:1231 msgid "Integrity option can be used only for LUKS2 format." msgstr "Опција целовитости се може користити само за ЛУКС2 запис." -#: src/cryptsetup.c:1231 src/cryptsetup.c:1291 +#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 msgid "Unsupported LUKS2 metadata size options." msgstr "Неподржана опција величине ЛУКС2 метаподатака." -#: src/cryptsetup.c:1248 +#: src/cryptsetup.c:1253 #, c-format msgid "Cannot create header file %s." msgstr "Не могу да направим датотеку заглавља „%s“." -#: src/cryptsetup.c:1271 src/integritysetup.c:195 src/integritysetup.c:204 +#: 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 msgid "No known integrity specification pattern detected." msgstr "Није откривен познат образац одреднице целовитости." -#: src/cryptsetup.c:1284 +#: src/cryptsetup.c:1289 #, c-format msgid "Cannot use %s as on-disk header." msgstr "Не могу да користим „%s“ као заглавље на-диску." -#: src/cryptsetup.c:1308 src/integritysetup.c:227 +#: src/cryptsetup.c:1313 src/integritysetup.c:227 #, c-format msgid "This will overwrite data on %s irrevocably." msgstr "Ово ће неповратно да препише податке на „%s“." -#: src/cryptsetup.c:1349 src/cryptsetup.c:1683 src/cryptsetup.c:1750 -#: src/cryptsetup.c:1852 src/cryptsetup.c:1918 src/cryptsetup_reencrypt.c:553 +#: 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 msgid "Failed to set pbkdf parameters." msgstr "Нисам успео да подесим „pbkdf“ параметре." -#: src/cryptsetup.c:1434 +#: src/cryptsetup.c:1439 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "Смањени померај података је допуштен само за откачена ЛУКС заглавља." -#: src/cryptsetup.c:1445 src/cryptsetup.c:1756 +#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 msgid "Cannot determine volume key size for LUKS without keyslots, please use --key-size option." msgstr "Не могу да одредим величину кључа за ЛУКС без утора кључа, користите „--key-size“ опцију." -#: src/cryptsetup.c:1483 +#: src/cryptsetup.c:1488 msgid "Device activated but cannot make flags persistent." msgstr "Уређај је активиран али не могу да учиним заставице трајним." -#: src/cryptsetup.c:1564 src/cryptsetup.c:1634 +#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "Утор кључа „%d“ је изабран за брисање." -#: src/cryptsetup.c:1576 src/cryptsetup.c:1637 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 msgid "This is the last keyslot. Device will become unusable after purging this key." msgstr "Ово је последњи утор кључа. Уређај ће постати неупотребљив након чишћења овог кључа." -#: src/cryptsetup.c:1577 +#: src/cryptsetup.c:1582 msgid "Enter any remaining passphrase: " msgstr "Унесите неку преосталу пропусну реч: " -#: src/cryptsetup.c:1578 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Радња је прекинута, утор кључа НИЈЕ обрисан.\n" -#: src/cryptsetup.c:1616 +#: src/cryptsetup.c:1621 msgid "Enter passphrase to be deleted: " msgstr "Унесите пропусну реч за брисање: " -#: src/cryptsetup.c:1697 src/cryptsetup.c:1771 src/cryptsetup.c:1805 +#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 msgid "Enter new passphrase for key slot: " msgstr "Унесите нову пропусну реч за утор кључа: " -#: src/cryptsetup.c:1788 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Унесите неку постојећу пропусну реч: " -#: src/cryptsetup.c:1856 +#: src/cryptsetup.c:1861 msgid "Enter passphrase to be changed: " msgstr "Унесите пропусну реч за мењање: " -#: src/cryptsetup.c:1872 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Унесите нову пропусну реч: " -#: src/cryptsetup.c:1922 +#: src/cryptsetup.c:1927 msgid "Enter passphrase for keyslot to be converted: " msgstr "Унесите пропусну реч за утор кључа за претварање: " -#: src/cryptsetup.c:1946 +#: src/cryptsetup.c:1951 msgid "Only one device argument for isLuks operation is supported." msgstr "Подржан је само један аргумент уређаја за радњу „isLuks“." -#: src/cryptsetup.c:1996 +#: src/cryptsetup.c:2001 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1938,12 +1943,12 @@ msgstr "" "који омогућава приступ шифрованој партицији без лозинке.\n" "Овај избачај треба бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:2061 +#: src/cryptsetup.c:2066 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "Утор кључа %d не садржи несвезани кључ." -#: src/cryptsetup.c:2067 +#: src/cryptsetup.c:2072 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1951,30 +1956,30 @@ msgstr "" "Избачај заглавља са кључем волумена је осетљив податак\n" "Овај избачај треба увек бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:2202 src/cryptsetup.c:2223 +#: src/cryptsetup.c:2207 src/cryptsetup.c:2228 msgid "Option --header-backup-file is required." msgstr "Захтевана је опција „--header-backup-file“." -#: src/cryptsetup.c:2253 +#: src/cryptsetup.c:2258 #, c-format msgid "%s is not cryptsetup managed device." msgstr "„%s“ није уређај управљан криптоподешавањем." -#: src/cryptsetup.c:2264 +#: src/cryptsetup.c:2269 #, c-format msgid "Refresh is not supported for device type %s" msgstr "Освежавање није подржано за врсту уређаја „%s“" -#: src/cryptsetup.c:2306 +#: src/cryptsetup.c:2311 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Непозната врста уређаја метаподатака „%s“." -#: src/cryptsetup.c:2309 +#: src/cryptsetup.c:2314 msgid "Command requires device and mapped name as arguments." msgstr "Наредба захтева уређај и мапирани назив као аргумент." -#: src/cryptsetup.c:2331 +#: src/cryptsetup.c:2336 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1983,95 +1988,95 @@ msgstr "" "Ова радња ће обрисати све уторе кључева на уређају „%s“.\n" "Уређај ће постати неупотребљив након ове радње." -#: src/cryptsetup.c:2338 +#: src/cryptsetup.c:2343 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Радња је прекинута, утори кључева НИСУ обрисани.\n" -#: src/cryptsetup.c:2375 +#: src/cryptsetup.c:2380 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "Неисправна ЛУКС врста, само „luks1“ и „luks2“ су подржане." -#: src/cryptsetup.c:2393 +#: src/cryptsetup.c:2398 #, c-format msgid "Device is already %s type." msgstr "Уређај је већ „%s“ врсте." -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2403 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "Ова радња ће претворити „%s“ у „%s“ запис.\n" -#: src/cryptsetup.c:2404 +#: src/cryptsetup.c:2409 msgid "Operation aborted, device was NOT converted.\n" msgstr "Радња је прекинута, уређај НИЈЕ претворен.\n" -#: src/cryptsetup.c:2444 +#: src/cryptsetup.c:2449 msgid "Option --priority, --label or --subsystem is missing." msgstr "Недостаје опција „--priority“, „--label“ или „--subsystem“." -#: src/cryptsetup.c:2478 src/cryptsetup.c:2511 src/cryptsetup.c:2534 +#: src/cryptsetup.c:2483 src/cryptsetup.c:2516 src/cryptsetup.c:2539 #, c-format msgid "Token %d is invalid." msgstr "Скупина „%d“ није исправна." -#: src/cryptsetup.c:2481 src/cryptsetup.c:2537 +#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 #, c-format msgid "Token %d in use." msgstr "Скупина „%d“ је у употреби." -#: src/cryptsetup.c:2488 +#: src/cryptsetup.c:2493 #, c-format msgid "Failed to add luks2-keyring token %d." msgstr "Нисам успео да додам „luks2-keyring“ скупину „%d“." -#: src/cryptsetup.c:2497 src/cryptsetup.c:2559 +#: src/cryptsetup.c:2502 src/cryptsetup.c:2564 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "Нисам успео да доделим скупину „%d“ утору кључа %d." -#: src/cryptsetup.c:2514 +#: src/cryptsetup.c:2519 #, c-format msgid "Token %d is not in use." msgstr "Скупина „%d“ није у употреби." -#: src/cryptsetup.c:2549 +#: src/cryptsetup.c:2554 msgid "Failed to import token from file." msgstr "Нисам успео да увезем скупину из датотеке." -#: src/cryptsetup.c:2574 +#: src/cryptsetup.c:2579 #, c-format msgid "Failed to get token %d for export." msgstr "Нисам успео да добавим скупину „%d“ за извоз." -#: src/cryptsetup.c:2589 +#: src/cryptsetup.c:2594 msgid "--key-description parameter is mandatory for token add action." msgstr "„--key-description“ параметар је обавезан за радњу додавања скупине." -#: src/cryptsetup.c:2595 src/cryptsetup.c:2603 +#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 msgid "Action requires specific token. Use --token-id parameter." msgstr "Радња захтева нарочиту скупину. Користите параметар „--token-id“." -#: src/cryptsetup.c:2608 +#: src/cryptsetup.c:2613 #, c-format msgid "Invalid token operation %s." msgstr "Неисправна радња скупине „%s“." -#: src/cryptsetup.c:2663 +#: src/cryptsetup.c:2668 #, c-format msgid "Auto-detected active dm device '%s' for data device %s.\n" msgstr "Самооткривени активан дм уређај „%sд за уређај података „%s“.\n" -#: src/cryptsetup.c:2667 +#: src/cryptsetup.c:2672 #, c-format msgid "Device %s is not a block device.\n" msgstr "Уређај „%s“ није блок уређај.\n" -#: src/cryptsetup.c:2669 +#: src/cryptsetup.c:2674 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "Нисам успео да самооткријем држаче „%s“ уређаја." -#: src/cryptsetup.c:2671 +#: src/cryptsetup.c:2676 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2084,233 +2089,233 @@ msgstr "" "То може довести до оштећења података ако је уређај заправо активиран.\n" "Да покренете поновно шифровање у режиму на мрежи, користите параметар „--active-name“.\n" -#: src/cryptsetup.c:2751 +#: src/cryptsetup.c:2756 msgid "Invalid LUKS device type." msgstr "Неисправна врста ЛУКС уређаја." -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2761 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:2761 +#: src/cryptsetup.c:2766 msgid "Requested data offset must be less than or equal to half of --reduce-device-size parameter." msgstr "Затражени померај података мора бити мањи или једнак половини параметра „--reduce-device-size“." -#: src/cryptsetup.c:2770 +#: src/cryptsetup.c:2775 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Подешавам „--reduce-device-size“ вредност на двоструко од „--offset“ % (подеока).\n" -#: src/cryptsetup.c:2774 +#: src/cryptsetup.c:2779 msgid "Encryption is supported only for LUKS2 format." msgstr "Шифровање је подржано само за ЛУКС2 запис." -#: src/cryptsetup.c:2796 +#: src/cryptsetup.c:2801 #, c-format msgid "Detected LUKS device on %s. Do you want to encrypt that LUKS device again?" msgstr "Откривен је ЛУКС уређај на „%s“. Да ли желите опет да шифрујете тај ЛУКС уређај?" -#: src/cryptsetup.c:2811 +#: src/cryptsetup.c:2816 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "Привремена датотека заглавља „%s“ већ постоји. Прекидам." -#: src/cryptsetup.c:2813 src/cryptsetup.c:2820 +#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 #, c-format msgid "Cannot create temporary header file %s." msgstr "Не могу да направим привремену датотеку заглавља „%s“." -#: src/cryptsetup.c:2884 +#: src/cryptsetup.c:2889 #, c-format msgid "%s/%s is now active and ready for online encryption.\n" msgstr "„%s/%s“ је сада активно и спремно за шифровање на мрежи.\n" -#: src/cryptsetup.c:3048 src/cryptsetup.c:3054 +#: src/cryptsetup.c:3053 src/cryptsetup.c:3059 msgid "Not enough free keyslots for reencryption." msgstr "Нема довољно слободних утора кључева за поновно шифровање." -#: src/cryptsetup.c:3074 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 msgid "Key file can be used only with --key-slot or with exactly one key slot active." msgstr "Датотека кључа може бити коришћена само са „--key-slot“ или са тачно једним активним утором кључа." -#: src/cryptsetup.c:3083 src/cryptsetup_reencrypt.c:1341 +#: src/cryptsetup.c:3088 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Унесите пропусну реч за утор кључа %d: " -#: src/cryptsetup.c:3091 +#: src/cryptsetup.c:3096 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Унесите пропусну реч за утор кључа %u: " -#: src/cryptsetup.c:3258 +#: src/cryptsetup.c:3263 msgid "Command requires device as argument." msgstr "Наредба захтева уређај као аргумент." -#: src/cryptsetup.c:3280 +#: src/cryptsetup.c:3285 msgid "Only LUKS2 format is currently supported. Please use cryptsetup-reencrypt tool for LUKS1." msgstr "Само је ЛУКС2 запис тренутно подржан. Користите алат „cryptsetup-reencrypt“ за ЛУКС1." -#: src/cryptsetup.c:3292 +#: src/cryptsetup.c:3297 msgid "Legacy offline reencryption already in-progress. Use cryptsetup-reencrypt utility." msgstr "Старо ванмрежно поновно шифровање је већ у току. Користите помагало „cryptsetup-reencrypt“." -#: src/cryptsetup.c:3302 src/cryptsetup_reencrypt.c:178 +#: src/cryptsetup.c:3307 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "Поновно шифровање уређаја са профилом целовитости није подржано." -#: src/cryptsetup.c:3310 +#: src/cryptsetup.c:3315 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "ЛУКС2 поновно шифровање је већ покренуто. Прекидам радњу." -#: src/cryptsetup.c:3314 +#: src/cryptsetup.c:3319 msgid "LUKS2 device is not in reencryption." msgstr "ЛУКС2 уређај није у поновном шифровању." -#: src/cryptsetup.c:3341 +#: src/cryptsetup.c:3346 msgid " [--type ] []" msgstr "<уређај> [--type <врста>] [<назив>]" -#: src/cryptsetup.c:3341 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 msgid "open device as " msgstr "отвара уређај као <назив>" -#: src/cryptsetup.c:3342 src/cryptsetup.c:3343 src/cryptsetup.c:3344 +#: 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 msgid "" msgstr "<назив>" -#: src/cryptsetup.c:3342 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "затвара уређај (уклања мапирање)" -#: src/cryptsetup.c:3343 +#: src/cryptsetup.c:3348 msgid "resize active device" msgstr "мења величину радног уређаја" -#: src/cryptsetup.c:3344 +#: src/cryptsetup.c:3349 msgid "show device status" msgstr "показује стање уређаја" -#: src/cryptsetup.c:3345 +#: src/cryptsetup.c:3350 msgid "[--cipher ]" msgstr "[--cipher <шифрер>]" -#: src/cryptsetup.c:3345 +#: src/cryptsetup.c:3350 msgid "benchmark cipher" msgstr "шифрер оцењивања" -#: src/cryptsetup.c:3346 src/cryptsetup.c:3347 src/cryptsetup.c:3348 -#: src/cryptsetup.c:3349 src/cryptsetup.c:3350 src/cryptsetup.c:3357 -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 -#: src/cryptsetup.c:3361 src/cryptsetup.c:3362 src/cryptsetup.c:3363 -#: src/cryptsetup.c:3364 src/cryptsetup.c:3365 +#: 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 msgid "" msgstr "<уређај>" -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3351 msgid "try to repair on-disk metadata" msgstr "покушава да поправи метаподатке на-диску" -#: src/cryptsetup.c:3347 +#: src/cryptsetup.c:3352 msgid "reencrypt LUKS2 device" msgstr "ЛУКС2 уређај поновног шифровања" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3353 msgid "erase all keyslots (remove encryption key)" msgstr "брише све уторе кључева (уклања кључ шифровања)" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3354 msgid "convert LUKS from/to LUKS2 format" msgstr "претвара ЛУКС из/у ЛУКС2 запис" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3355 msgid "set permanent configuration options for LUKS2" msgstr "поставља трајне опције подешавања за ЛУКС2" -#: src/cryptsetup.c:3351 src/cryptsetup.c:3352 +#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 msgid " []" msgstr "<уређај> [<нова датотека кључа>]" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3356 msgid "formats a LUKS device" msgstr "форматира ЛУКС уређај" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3357 msgid "add key to LUKS device" msgstr "додаје кључ у ЛУКС уређај" -#: src/cryptsetup.c:3353 src/cryptsetup.c:3354 src/cryptsetup.c:3355 +#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 msgid " []" msgstr "<уређај> [<датотека кључа>]" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3358 msgid "removes supplied key or key file from LUKS device" msgstr "уклања достављени кључ или датотеку кључа из ЛУКС уређаја" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3359 msgid "changes supplied key or key file of LUKS device" msgstr "мења достављени кључ или датотеку кључа ЛУКС уређаја" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3360 msgid "converts a key to new pbkdf parameters" msgstr "претвара кључ у нове „pbkdf“ параметре" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3361 msgid " " msgstr "<уређај> <утор кључа>" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3361 msgid "wipes key with number from LUKS device" msgstr "брише кључ са бројем <утор кључа> са ЛУКС уређаја" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3362 msgid "print UUID of LUKS device" msgstr "исписује УЈИБ ЛУКС уређаја" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3363 msgid "tests for LUKS partition header" msgstr "испробава <уређај> за заглављем ЛУКС партиције" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3364 msgid "dump LUKS partition information" msgstr "исписује податке ЛУКС партиције" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3365 msgid "dump TCRYPT device information" msgstr "исписује податке ТКРИПТ уређаја" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3366 msgid "dump BITLK device information" msgstr "исписује податке „BITLK“ уређаја" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3367 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "Обуставља ЛУКС уређај и брише кључ (сви УИ су замрзнути)" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3368 msgid "Resume suspended LUKS device" msgstr "Наставља са обустављеним ЛУКС уређајем" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3369 msgid "Backup LUKS device header and keyslots" msgstr "Прави резерву заглавља „LUKS“ уређаја и утора кључева" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3370 msgid "Restore LUKS device header and keyslots" msgstr "Враћа заглавље „LUKS“ уређаја и уторе кључева" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3371 msgid " " msgstr "<додај|уклони|увези|извези> <уређај>" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3371 msgid "Manipulate LUKS2 tokens" msgstr "Управља ЛУКС2 скупинама" -#: src/cryptsetup.c:3384 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2318,7 +2323,7 @@ msgstr "" "\n" "<радња> је једна од следећих:\n" -#: src/cryptsetup.c:3390 +#: src/cryptsetup.c:3395 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2330,7 +2335,7 @@ msgstr "" "\tотварање: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen, bitlkOpen\n" "\tзатвори: remove (plainClose), luksClose, loopaesClose, tcryptClose, bitlkClose\n" -#: src/cryptsetup.c:3394 +#: src/cryptsetup.c:3399 #, c-format msgid "" "\n" @@ -2345,7 +2350,7 @@ msgstr "" "<утор кључа> је број ЛУКС утора кључа за мењање\n" "<датотека кључа> изборна датотека кључа за нови кључ за радњу „luksAddKey“\n" -#: src/cryptsetup.c:3401 +#: src/cryptsetup.c:3406 #, c-format msgid "" "\n" @@ -2354,7 +2359,7 @@ msgstr "" "\n" "Основни уграђени запис метаподатака је „%s“ (за „luksFormat“ радњу).\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3411 #, c-format msgid "" "\n" @@ -2371,7 +2376,7 @@ msgstr "" "Основни „PBKDF“ за ЛУКС2: %s\n" "\tВреме понављања: %d, Захтевана меморија: %dkB, Паралелне нити: %d\n" -#: src/cryptsetup.c:3417 +#: src/cryptsetup.c:3422 #, c-format msgid "" "\n" @@ -2386,90 +2391,90 @@ msgstr "" "\tобично: %s, Кључ: %d бита, Хеширање лозинке: %s\n" "\tЛУКС: %s, Кључ: %d бита, Хеширање ЛУКС заглавља: %s, РНГ: %s\n" -#: src/cryptsetup.c:3426 +#: src/cryptsetup.c:3431 msgid "\tLUKS: Default keysize with XTS mode (two internal keys) will be doubled.\n" msgstr "\tЛУКС: Основна величина кључа са „XTS“ режимом (два унутрашња кључа) биће удвостручена.\n" -#: src/cryptsetup.c:3442 src/veritysetup.c:569 src/integritysetup.c:642 +#: src/cryptsetup.c:3447 src/veritysetup.c:569 src/integritysetup.c:642 #, c-format msgid "%s: requires %s as arguments" msgstr "%s: захтева „%s“ као аргумент" -#: src/cryptsetup.c:3475 src/veritysetup.c:457 src/integritysetup.c:536 +#: src/cryptsetup.c:3480 src/veritysetup.c:457 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Приказује ову поруку помоћи" -#: src/cryptsetup.c:3476 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Прикажите кратку поруку о коришћењу" -#: src/cryptsetup.c:3477 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Исписује издање пакета" -#: src/cryptsetup.c:3481 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Опције помоћи:" -#: src/cryptsetup.c:3482 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "Приказује опширније поруке о грешкама" -#: src/cryptsetup.c:3483 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Приказује поруке прочишћавања" -#: src/cryptsetup.c:3484 +#: src/cryptsetup.c:3489 msgid "Show debug messages including JSON metadata" msgstr "Приказује поруке прочишћавања укључујући „JSON“ метаподатке" -#: src/cryptsetup.c:3485 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 msgid "The cipher used to encrypt the disk (see /proc/crypto)" msgstr "Шифрер коришћен за шифровање диска (видите „/proc/crypto“)" -#: src/cryptsetup.c:3486 src/cryptsetup_reencrypt.c:1619 +#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "Хеш коришћен за стварање кључа шифровања из лозинке" -#: src/cryptsetup.c:3487 +#: src/cryptsetup.c:3492 msgid "Verifies the passphrase by asking for it twice" msgstr "Проверава лозинку тражећи је два пута" -#: src/cryptsetup.c:3488 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Чита кључ из датотеке" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3494 msgid "Read the volume (master) key from file." msgstr "Чита (главни) кључ вочумена из датотеке." -#: src/cryptsetup.c:3490 +#: src/cryptsetup.c:3495 msgid "Dump volume (master) key instead of keyslots info" msgstr "Даје (главни) кључ волумена уместо података утора кључева" -#: src/cryptsetup.c:3491 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "Величина кључа шифровања" -#: src/cryptsetup.c:3491 src/cryptsetup.c:3551 src/integritysetup.c:562 +#: 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 msgid "BITS" msgstr "БИТА" -#: src/cryptsetup.c:3492 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 msgid "Limits the read from keyfile" msgstr "Ограничава читање из датотеке кључа" -#: src/cryptsetup.c:3492 src/cryptsetup.c:3493 src/cryptsetup.c:3494 -#: src/cryptsetup.c:3495 src/cryptsetup.c:3498 src/cryptsetup.c:3548 -#: src/cryptsetup.c:3549 src/cryptsetup.c:3557 src/cryptsetup.c:3558 +#: 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 @@ -2478,351 +2483,351 @@ msgstr "Ограничава читање из датотеке кључа" msgid "bytes" msgstr "бајта" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Број бајтова за прескакање у датотеци кључа" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3499 msgid "Limits the read from newly added keyfile" msgstr "Ограничава читање из новододате датотеке кључа" -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3500 msgid "Number of bytes to skip in newly added keyfile" msgstr "Број бајтова за прескакање у новододатој датотеци кључа" -#: src/cryptsetup.c:3496 +#: src/cryptsetup.c:3501 msgid "Slot number for new key (default is first free)" msgstr "Број утора за нови кључ (основно је први слободан)" -#: src/cryptsetup.c:3497 +#: src/cryptsetup.c:3502 msgid "The size of the device" msgstr "Величина уређаја" -#: src/cryptsetup.c:3497 src/cryptsetup.c:3499 src/cryptsetup.c:3500 -#: src/cryptsetup.c:3506 src/integritysetup.c:552 src/integritysetup.c:559 +#: src/cryptsetup.c:3502 src/cryptsetup.c:3504 src/cryptsetup.c:3505 +#: src/cryptsetup.c:3511 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "ОДЕЉЦИ" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "Користи само наведену величину уређаја (занемарује остатак уређаја). ОВО ЈЕ ОПСАНО!" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3504 msgid "The start offset in the backend device" msgstr "Почетни померај у позадинском уређају" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3505 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "Број одељака шифрованих података за прескакање на почетку" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3506 msgid "Create a readonly mapping" msgstr "Прави мапирање само за читање" -#: src/cryptsetup.c:3502 src/integritysetup.c:545 +#: src/cryptsetup.c:3507 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Не тражи потврђивање" -#: src/cryptsetup.c:3503 +#: src/cryptsetup.c:3508 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "Време за упит међудејствене лозинке (у секундама)" -#: src/cryptsetup.c:3503 src/cryptsetup.c:3504 src/integritysetup.c:546 +#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "секунде" -#: src/cryptsetup.c:3504 src/integritysetup.c:546 +#: src/cryptsetup.c:3509 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "Напредак освежења реда (у секундама)" -#: src/cryptsetup.c:3505 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "Колико често унос лозинке може бити покушан" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3511 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Поравнава утовар на границе одељка — за „luksFormat“" -#: src/cryptsetup.c:3507 +#: src/cryptsetup.c:3512 msgid "File with LUKS header and keyslots backup" msgstr "Датотека са резервом „LUKS“ заглавља и уторима кључева" -#: src/cryptsetup.c:3508 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "Користи „/dev/random“ за стварање кључа волумена" -#: src/cryptsetup.c:3509 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Користи „/dev/urandom“ за стварање кључа волумена" -#: src/cryptsetup.c:3510 +#: src/cryptsetup.c:3515 msgid "Share device with another non-overlapping crypt segment" msgstr "Дели уређај са другим не-преклапајућим подеоком шифрера" -#: src/cryptsetup.c:3511 src/veritysetup.c:477 +#: src/cryptsetup.c:3516 src/veritysetup.c:477 msgid "UUID for device to use" msgstr "УЈИБ уређаја за коришћење" -#: src/cryptsetup.c:3512 src/integritysetup.c:579 +#: src/cryptsetup.c:3517 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "Допушта одбацивања (тј. СКРАЋЕЊЕ) захтева за уређај" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Уређај или датотека са одвојеним ЛУКС заглављем" -#: src/cryptsetup.c:3514 +#: src/cryptsetup.c:3519 msgid "Do not activate device, just check passphrase" msgstr "Не покреће уређај, само проверава лозинку" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3520 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Користи скривено заглавље (скривени ТКРИПТ уређај)" -#: src/cryptsetup.c:3516 +#: src/cryptsetup.c:3521 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Уређај је ТКРИПТ диск система (са подизачем система)" -#: src/cryptsetup.c:3517 +#: src/cryptsetup.c:3522 msgid "Use backup (secondary) TCRYPT header" msgstr "Користи резервно (другоразредно) ТКРИПТ заглавље" -#: src/cryptsetup.c:3518 +#: src/cryptsetup.c:3523 msgid "Scan also for VeraCrypt compatible device" msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3524 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Лични умножавач понављања за „VeraCrypt“ сагласан уређај" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3525 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Пропитује лични умножавач понављања за „VeraCrypt“ сагласан уређај" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3526 msgid "Type of device metadata: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" msgstr "Врста метаподатака уређаја: luks, luks1, luks2, plain, loopaes, tcrypt, bitlk" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3527 msgid "Disable password quality check (if enabled)" msgstr "Искључује проверу квалитета лозинке (ако је укључена)" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3528 msgid "Use dm-crypt same_cpu_crypt performance compatibility option" msgstr "Користи опцију сагласности перформансе „same_cpu_crypt“ дм-крипта" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3529 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" msgstr "Користи опцију сагласности перформансе „submit_from_crypt_cpus“ дм-крипта" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3530 msgid "Device removal is deferred until the last user closes it" msgstr "Уклањање уређаја је одложено све док га последњи корисник не затвори" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3531 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "Користи опште закључавање за серијализацију меморије чврстог „PBKDF“ („OOM“ заобилазница)" -#: src/cryptsetup.c:3527 +#: src/cryptsetup.c:3532 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "Време „PBKDF“ понављања за ЛУКС (у милисекундама)" -#: src/cryptsetup.c:3527 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "милисекунде" -#: src/cryptsetup.c:3528 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 msgid "PBKDF algorithm (for LUKS2): argon2i, argon2id, pbkdf2" msgstr "„PBKDF“ алгоритам (за ЛУКС2): argon2i, argon2id, pbkdf2" -#: src/cryptsetup.c:3529 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Ограничење трошка „PBKDF“ меморије" -#: src/cryptsetup.c:3529 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "килобајта" -#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Трошак „PBKDF“ паралеле" -#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "нити" -#: src/cryptsetup.c:3531 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Трошак „PBKDF“ понављања (присилно, искључује оцењивање)" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3537 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Првенство утора кључа: ignore, normal, prefer" -#: src/cryptsetup.c:3533 +#: src/cryptsetup.c:3538 msgid "Disable locking of on-disk metadata" msgstr "Искључује закључавање метаподатака на-диску" -#: src/cryptsetup.c:3534 +#: src/cryptsetup.c:3539 msgid "Disable loading volume keys via kernel keyring" msgstr "Искључује учитавање кључева волумена путем привеска кернела" -#: src/cryptsetup.c:3535 +#: src/cryptsetup.c:3540 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Алгоритам целовитости података (само ЛУКС2)" -#: src/cryptsetup.c:3536 src/integritysetup.c:573 +#: src/cryptsetup.c:3541 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Искључује журнал за уређај целовитости" -#: src/cryptsetup.c:3537 src/integritysetup.c:547 +#: src/cryptsetup.c:3542 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Не брише уређај након форматирања" -#: src/cryptsetup.c:3538 src/integritysetup.c:577 +#: src/cryptsetup.c:3543 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Користи неделотворно застарело допуњавање (стари кернели)" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3544 msgid "Do not ask for passphrase if activation by token fails" msgstr "Не тражи пропусну реч ако активација скупином не успе" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3545 msgid "Token number (default: any)" msgstr "Број скупине (основно: било који)" -#: src/cryptsetup.c:3541 +#: src/cryptsetup.c:3546 msgid "Key description" msgstr "Опис кључа" -#: src/cryptsetup.c:3542 +#: src/cryptsetup.c:3547 msgid "Encryption sector size (default: 512 bytes)" msgstr "Величина одељка шифровања (основно: 512 бајта)" -#: src/cryptsetup.c:3543 +#: src/cryptsetup.c:3548 +msgid "Use IV counted in sector size (not in 512 bytes)" +msgstr "Употреба IV је убројано у величину одељка (не у 512 бајта)" + +#: src/cryptsetup.c:3549 msgid "Set activation flags persistent for device" msgstr "Поставља трајним заставице активирања за уређај" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3550 msgid "Set label for the LUKS2 device" msgstr "Поставља натпис за ЛУКС2 уређај" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3551 msgid "Set subsystem label for the LUKS2 device" msgstr "Поставља натпис подсистема за ЛУКС2 уређај" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3552 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "Ствара или избацује неувезане (не додељене подеоке података) ЛУКС2 уторе кључа" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3553 msgid "Read or write the json from or to a file" msgstr "Чита или записује „json“ из или у датотеку" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3554 msgid "LUKS2 header metadata area size" msgstr "Величина области метаподатака ЛУКС2 заглавља" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3555 msgid "LUKS2 header keyslots area size" msgstr "Величина области утора кључева ЛУКС2 заглавља" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3556 msgid "Refresh (reactivate) device with new parameters" msgstr "Освежава (поново активира) уређај са новим параметрима" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3557 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "ЛУКС2 утор кључа: Величина кључа шифровања" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3558 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "ЛУКС2 утор кључа: Шифрер коришћен за шифровање исека кључа" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3559 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Шифрује ЛУКС2 уређај (у месту шифровање)." -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3560 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Дешифрује ЛУКС2 уређај (уклања шифровање)." -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3561 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Покреће ЛУКС2 поновно шифровање само у метаподацима." -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3562 msgid "Resume initialized LUKS2 reencryption only." msgstr "Наставља само са започетим ЛУКС2 поновним шифровањем." -#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "Смањује величину уређаја података (премешта померај података). ОВО ЈЕ ОПАСНО!" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3564 msgid "Maximal reencryption hotzone size." msgstr "Највећа величина вруће зоне поновног шифровања." -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3565 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "Врста гипкости вруће зоне поновног шифровања (checksum,journal,none)" -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3566 msgid "Reencryption hotzone checksums hash" msgstr "Хеш суме првере вруће зоне поновног шифровања" -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3567 msgid "Override device autodetection of dm device to be reencrypted" msgstr "Заобилази самооткривање уређаја дм уређаја за поновно шифровање" -#: src/cryptsetup.c:3577 src/veritysetup.c:499 src/integritysetup.c:595 +#: src/cryptsetup.c:3583 src/veritysetup.c:499 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[ОПЦИЈА...] <радња> <посебност-радње>" -#: src/cryptsetup.c:3628 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 msgid "Argument missing." msgstr "Недостаје аргумент <радња>." -#: src/cryptsetup.c:3697 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 msgid "Unknown action." msgstr "Непозната радња." -#: src/cryptsetup.c:3707 -msgid "Parameter --refresh is only allowed with open or refresh commands." -msgstr "Параметар „--refresh“ је дозвољен само са наредбама „open“ или „refresh“." - -#: src/cryptsetup.c:3712 +#: src/cryptsetup.c:3713 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "Опције „--refresh“ и „--test-passphrase“ се узајамно искључују." -#: src/cryptsetup.c:3717 +#: src/cryptsetup.c:3718 msgid "Option --deferred is allowed only for close command." msgstr "Опција „--deferred“ је допуштена само за наредбу затварања." -#: src/cryptsetup.c:3722 +#: src/cryptsetup.c:3723 msgid "Option --shared is allowed only for open of plain device." msgstr "Опција „--shared“ је допуштена само за отварање обичног уређаја." -#: src/cryptsetup.c:3727 src/integritysetup.c:654 +#: src/cryptsetup.c:3728 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3732 +#: src/cryptsetup.c:3733 msgid "Option --persistent is allowed only for open operation." msgstr "Опција „--persistent“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3737 +#: src/cryptsetup.c:3738 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation." msgstr "Опција „--serialize-memory-hard-pbkdf“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3742 +#: src/cryptsetup.c:3743 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "Опција „--persistent“ није допуштена са опцијом „--test-passphrase“." -#: src/cryptsetup.c:3752 +#: src/cryptsetup.c:3753 msgid "" "Option --key-size is allowed only for luksFormat, luksAddKey,\n" "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)." @@ -2830,187 +2835,191 @@ msgstr "" "Опција „--key-size“ је допуштена само за „luksFormat“, „luksAddKey“, отварање\n" "и оцењивање. Да ограничите читање из датотеке кључа користите „--keyfile-size=(бајтова)." -#: src/cryptsetup.c:3758 +#: src/cryptsetup.c:3759 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "Опција „--integrity“ је допуштена само за „luksFormat“ (ЛУКС2)." -#: src/cryptsetup.c:3763 +#: src/cryptsetup.c:3764 msgid "Option --integrity-no-wipe can be used only for format action with integrity extension." msgstr "Опција „--integrity-no-wipe“ се може користити само за радњу форматирања са проширењем целовитости." -#: src/cryptsetup.c:3769 +#: src/cryptsetup.c:3770 msgid "Options --label and --subsystem are allowed only for luksFormat and config LUKS2 operations." msgstr "Опције „--label“ и „--subsystem“ су допуштене само за „luksFormat“ и „config LUKS2“." -#: src/cryptsetup.c:3775 +#: src/cryptsetup.c:3776 msgid "Option --test-passphrase is allowed only for open of LUKS, TCRYPT and BITLK devices." msgstr "Опција „--test-passphrase“ је допуштена само за отварање ЛУКС, „TCRYPT“ и „BITLK“ уређаја." -#: src/cryptsetup.c:3780 src/cryptsetup_reencrypt.c:1708 +#: src/cryptsetup.c:3781 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "Величина кључа мора бити умножак од 8 бита" -#: src/cryptsetup.c:3786 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Утор кључа није исправан." -#: src/cryptsetup.c:3793 +#: src/cryptsetup.c:3794 msgid "Option --key-file takes precedence over specified key file argument." msgstr "Опција „--key-file“ има првенство над наведеним аргументом датотеке кључа." -#: src/cryptsetup.c:3800 src/veritysetup.c:576 src/integritysetup.c:663 +#: src/cryptsetup.c:3801 src/veritysetup.c:576 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Негативан број за опцију није допуштен." -#: src/cryptsetup.c:3804 +#: src/cryptsetup.c:3805 msgid "Only one --key-file argument is allowed." msgstr "Дозвољен је само један аргумент „--key-file“." -#: src/cryptsetup.c:3808 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "Дозвољена је само једна опција „--use-[u]random“." -#: src/cryptsetup.c:3812 +#: src/cryptsetup.c:3813 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "Опција „--use-[u]random“ је допуштена само за „luksFormat“." -#: src/cryptsetup.c:3816 +#: src/cryptsetup.c:3817 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "Опција „--uuid“ је допуштена само за „luksFormat“ и „luksUUID“." -#: src/cryptsetup.c:3820 +#: src/cryptsetup.c:3821 msgid "Option --align-payload is allowed only for luksFormat." msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“." -#: src/cryptsetup.c:3824 +#: src/cryptsetup.c:3825 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:3829 +#: src/cryptsetup.c:3830 msgid "Invalid LUKS2 metadata size specification." msgstr "Неисправна одредба величине ЛУКС2 метаподатака." -#: src/cryptsetup.c:3833 +#: src/cryptsetup.c:3834 msgid "Invalid LUKS2 keyslots size specification." msgstr "Неисправна одредба величине ЛУКС2 утора кључева." -#: src/cryptsetup.c:3837 +#: src/cryptsetup.c:3838 msgid "Options --align-payload and --offset cannot be combined." msgstr "Опције „--align-payload“ и „--offset“ се не могу комбиновати." -#: src/cryptsetup.c:3843 +#: src/cryptsetup.c:3844 msgid "Option --skip is supported only for open of plain and loopaes devices." msgstr "Опција „--skip“ је подржана само за отварање обичних и упетљаних уређаја." -#: src/cryptsetup.c:3850 +#: src/cryptsetup.c:3851 msgid "Option --offset is supported only for open of plain and loopaes devices, luksFormat and device reencryption." msgstr "Опција „--offset“ је подржана само за отварање обичних и упетљаних уређаја, „luksFormat“ и поновно шифровање уређаја." -#: src/cryptsetup.c:3856 +#: src/cryptsetup.c:3857 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:3861 +#: src/cryptsetup.c:3862 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "Опција „--tcrypt-hidden“ не може бити обједињена са „--allow-discards“." -#: src/cryptsetup.c:3866 +#: src/cryptsetup.c:3867 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај." -#: src/cryptsetup.c:3872 +#: src/cryptsetup.c:3873 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Достављен је неисправан аргумент за параметар „--veracrypt-pim“." -#: src/cryptsetup.c:3876 +#: src/cryptsetup.c:3877 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "Опција „--veracrypt-pim“ је подржана само за „VeraCrypt“ сагласне уређаје." -#: src/cryptsetup.c:3884 +#: src/cryptsetup.c:3885 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices." msgstr "Опција „--veracrypt-query-pim“ је подржана само за „VeraCrypt“ сагласне уређаје." -#: src/cryptsetup.c:3888 +#: src/cryptsetup.c:3889 msgid "The options --veracrypt-pim and --veracrypt-query-pim are mutually exclusive." msgstr "Опције „--veracrypt-pim“ и „--veracrypt-query-pim“ се узајамно искључују." -#: src/cryptsetup.c:3895 +#: src/cryptsetup.c:3896 msgid "Option --priority can be only ignore/normal/prefer." msgstr "Опција „--priority“ може бити само „ignore/normal/prefer“." -#: src/cryptsetup.c:3900 src/cryptsetup.c:3932 +#: src/cryptsetup.c:3901 src/cryptsetup.c:3939 msgid "Keyslot specification is required." msgstr "Одредба утора кључа је потребна." -#: src/cryptsetup.c:3905 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 msgid "Password-based key derivation function (PBKDF) can be only pbkdf2 or argon2i/argon2id." msgstr "Функција произилажења кључа заснованог на пропусној речи (PBKDF) може бити само „pbkdf2“ или „argon2i/argon2id“." -#: src/cryptsetup.c:3910 src/cryptsetup_reencrypt.c:1698 +#: src/cryptsetup.c:3911 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "„PBKDF“ присиљена понављања се не могу комбиновати са опцијом времена понављања." -#: src/cryptsetup.c:3916 +#: src/cryptsetup.c:3917 msgid "Sector size option is not supported for this command." msgstr "Опција величине сектора није подржана за ову наредбу." -#: src/cryptsetup.c:3927 +#: src/cryptsetup.c:3929 +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 msgid "Key size is required with --unbound option." msgstr "Величина кључа је потребна са опцијом „--unbound“." -#: src/cryptsetup.c:3937 +#: src/cryptsetup.c:3944 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "Опција „--unbound“ се може користити само са радњама „luksAddKey“ и „luksDump“." -#: src/cryptsetup.c:3942 +#: src/cryptsetup.c:3949 msgid "Option --refresh may be used only with open action." msgstr "Опција „--refresh“ се може користити само са радњом отварања." -#: src/cryptsetup.c:3953 +#: src/cryptsetup.c:3960 msgid "Cannot disable metadata locking." msgstr "Не могу да искључим закључавање метаподатака." -#: src/cryptsetup.c:3963 +#: src/cryptsetup.c:3970 msgid "Invalid max reencryption hotzone size specification." msgstr "Неисправна одредба највеће величине вруће зоне поновног шифровања." -#: src/cryptsetup.c:3971 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Неисправна одредба величине уређаја." -#: src/cryptsetup.c:3974 +#: src/cryptsetup.c:3981 msgid "Maximum device reduce size is 1 GiB." msgstr "Највећа величина смањења уређаја је 1 GiB." -#: src/cryptsetup.c:3977 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "Величина смањивања мора бити умножак одељка од 512 бајта." -#: src/cryptsetup.c:3982 +#: src/cryptsetup.c:3989 msgid "Invalid data size specification." msgstr "Неисправна одредба величине података." -#: src/cryptsetup.c:3987 +#: src/cryptsetup.c:3994 msgid "Reduce size overflow." msgstr "Прекорачење величине смањења." -#: src/cryptsetup.c:3991 +#: src/cryptsetup.c:3998 msgid "LUKS2 decryption requires option --header." msgstr "ЛУКС2 дешифровање захтева опцију „--header“." -#: src/cryptsetup.c:3995 +#: src/cryptsetup.c:4002 msgid "Device size must be multiple of 512 bytes sector." msgstr "Величина уређаја мора бити умножак одељка од 512 бајта." -#: src/cryptsetup.c:3999 +#: src/cryptsetup.c:4006 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "Опције „--reduce-device-size“ и „--data-size“ се не могу комбиновати." -#: src/cryptsetup.c:4003 +#: src/cryptsetup.c:4010 msgid "Options --device-size and --size cannot be combined." msgstr "Опције „--device-size“ и „--size“ се не могу комбиновати." @@ -3857,6 +3866,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Нисам успео да упишем „JSON“ датотеку." +#~ msgid "Parameter --refresh is only allowed with open or refresh commands." +#~ msgstr "Параметар „--refresh“ је дозвољен само са наредбама „open“ или „refresh“." + #~ msgid "Replaced with key slot %d.\n" #~ msgstr "Замењен је исеком кључа „%d“.\n" From fd94f036c14e1ac94346b86e1e073842cf99f0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=80=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20=D0=9D?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=BB=D0=B8=D1=9B?= Date: Sat, 17 Oct 2020 12:53:20 +0200 Subject: [PATCH 049/149] po: update sr.po (from translationproject.org) --- po/sr.po | 978 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 503 insertions(+), 475 deletions(-) diff --git a/po/sr.po b/po/sr.po index b4eb2cf5..c2df03cd 100644 --- a/po/sr.po +++ b/po/sr.po @@ -4,10 +4,10 @@ # Мирослав Николић , 2014–2020. msgid "" msgstr "" -"Project-Id-Version: cryptsetup-2.3.3-rc0\n" +"Project-Id-Version: cryptsetup-2.3.4-rc0\n" "Report-Msgid-Bugs-To: dm-crypt@saout.de\n" -"POT-Creation-Date: 2020-05-15 10:45+0200\n" -"PO-Revision-Date: 2020-08-04 09:49+0200\n" +"POT-Creation-Date: 2020-08-27 21:34+0200\n" +"PO-Revision-Date: 2020-10-04 09:41+0200\n" "Last-Translator: Мирослав Николић \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:405 msgid "Cannot initialize device-mapper, running as non-root user." msgstr "Не могу да покренем мапера уређаја, радим као обичан корисник." -#: lib/libdevmapper.c:402 +#: lib/libdevmapper.c:408 msgid "Cannot initialize device-mapper. Is dm_mod kernel module loaded?" msgstr "Не могу да покренем мапера уређаја. Да ли је учитан модул кернела „dm_mod“?" -#: lib/libdevmapper.c:1131 +#: lib/libdevmapper.c:1149 msgid "Requested deferred flag is not supported." msgstr "Затражена одложена заставица није подржана." -#: lib/libdevmapper.c:1198 +#: lib/libdevmapper.c:1216 #, c-format msgid "DM-UUID for device %s was truncated." msgstr "ДМ-УЈИБ за уређај „%s“ је скраћен." -#: lib/libdevmapper.c:1520 +#: lib/libdevmapper.c:1547 msgid "Unknown dm target type." msgstr "Непозната врста „dm“ мете." -#: lib/libdevmapper.c:1623 lib/libdevmapper.c:1679 +#: lib/libdevmapper.c:1660 lib/libdevmapper.c:1665 lib/libdevmapper.c:1725 +#: lib/libdevmapper.c:1728 msgid "Requested dm-crypt performance options are not supported." msgstr "Затражене опције перформанси дм-шифровања нису подржане." -#: lib/libdevmapper.c:1630 +#: lib/libdevmapper.c:1672 lib/libdevmapper.c:1676 msgid "Requested dm-verity data corruption handling options are not supported." msgstr "Затражене опције рада оштећених података дм-веритија нису подржане." -#: lib/libdevmapper.c:1634 +#: lib/libdevmapper.c:1680 msgid "Requested dm-verity FEC options are not supported." msgstr "Затражене „dm-verity FEC“ опције нису подржане." -#: lib/libdevmapper.c:1638 +#: lib/libdevmapper.c:1684 msgid "Requested data integrity options are not supported." msgstr "Затражене опције целовитости података нису подржане." -#: lib/libdevmapper.c:1640 +#: lib/libdevmapper.c:1686 msgid "Requested sector_size option is not supported." msgstr "Затражене опције величине одељка нису подржане." -#: lib/libdevmapper.c:1645 +#: lib/libdevmapper.c:1691 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:1695 lib/libdevmapper.c:1731 lib/libdevmapper.c:1734 +#: lib/luks2/luks2_json_metadata.c:2170 msgid "Discard/TRIM is not supported." msgstr "Одбацивање/ОДСЕЦАЊЕ није подржано." -#: lib/libdevmapper.c:1653 +#: lib/libdevmapper.c:1699 msgid "Requested dm-integrity bitmap mode is not supported." msgstr "Затражени режим битмапе дм-целовитости није подржан." -#: lib/libdevmapper.c:2607 +#: lib/libdevmapper.c:2663 #, c-format msgid "Failed to query dm-%s segment." msgstr "Нисам успео да пропитам „dm-%s“ подеок." @@ -177,7 +177,7 @@ 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:2777 lib/setup.c:4517 #, c-format msgid "Device %s is not active." msgstr "Уређај „%s“ није радан." @@ -200,7 +200,7 @@ 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 +#: src/cryptsetup.c:1238 src/cryptsetup.c:3945 msgid "Unsupported encryption sector size." msgstr "Неподржана величина одељка шифровања." @@ -248,7 +248,7 @@ msgstr "УПОЗОРЕЊЕ: Величина ЛУКС2 метаподатака msgid "WARNING: LUKS2 keyslots area size changed to % bytes.\n" msgstr "УПОЗОРЕЊЕ: Величина области ЛУКС2 утора кључева је промењена на % бајта.\n" -#: lib/setup.c:1882 lib/utils_device.c:828 lib/luks1/keyencryption.c:255 +#: lib/setup.c:1882 lib/utils_device.c:834 lib/luks1/keyencryption.c:255 #: lib/luks2/luks2_reencrypt.c:2356 lib/luks2/luks2_reencrypt.c:3367 #, c-format msgid "Device %s is too small." @@ -411,8 +411,8 @@ msgstr "Настављање није подржано за уређај „%s 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:3282 lib/setup.c:3648 lib/setup.c:4314 lib/setup.c:4327 +#: lib/setup.c:4335 lib/setup.c:4348 lib/setup.c:4698 lib/setup.c:5844 msgid "Volume key does not match the volume." msgstr "Кључ волумена не одговара волумену." @@ -429,7 +429,7 @@ msgstr "Нисам успео да разменим нови утор кључа msgid "Key slot %d is invalid." msgstr "Утор кључа „%d“ није исправан." -#: lib/setup.c:3675 src/cryptsetup.c:1572 src/cryptsetup.c:1917 +#: lib/setup.c:3675 src/cryptsetup.c:1584 src/cryptsetup.c:1929 #, c-format msgid "Keyslot %d is not active." msgstr "Утор кључа „%d“ није радан." @@ -442,7 +442,7 @@ msgstr "Заглавље уређаја се преклапа са облашћ msgid "Reencryption in-progress. Cannot activate device." msgstr "Поновно шифровање је у току. Не могу да активирам уређај." -#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2243 +#: lib/setup.c:3983 lib/luks2/luks2_json_metadata.c:2253 #: lib/luks2/luks2_reencrypt.c:2836 msgid "Failed to get reencryption lock." msgstr "Нисам успео да добавим закључавање поновног шифровања." @@ -451,106 +451,106 @@ msgstr "Нисам успео да добавим закључавање пон msgid "LUKS2 reencryption recovery failed." msgstr "Опоравак ЛУКС2 поновног шифровања није успело." -#: lib/setup.c:4127 lib/setup.c:4379 +#: lib/setup.c:4127 lib/setup.c:4384 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:4175 #, c-format msgid "Device %s already exists." msgstr "Већ постоји уређај „%s“." -#: lib/setup.c:4296 +#: lib/setup.c:4182 +#, c-format +msgid "Cannot use device %s, name is invalid or still in use." +msgstr "Не могу да користим уређај „%s“, назив није исправан или је још у употреби." + +#: lib/setup.c:4301 msgid "Incorrect volume key specified for plain device." msgstr "Наведен је неисправан кључ волумена за обичан уређај." -#: lib/setup.c:4405 +#: lib/setup.c:4410 msgid "Incorrect root hash specified for verity device." msgstr "Наведен је неисправан хеш корена за уређај тачности." -#: lib/setup.c:4412 +#: lib/setup.c:4417 msgid "Root hash signature required." msgstr "Потпис хеша корена је потребан." -#: lib/setup.c:4421 +#: lib/setup.c:4426 msgid "Kernel keyring missing: required for passing signature to kernel." msgstr "Привезак кључева кернела недостаје: потребан је за прослеђивање потписа кернелу." -#: lib/setup.c:4438 lib/setup.c:5915 +#: lib/setup.c:4443 lib/setup.c:5920 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:4496 lib/setup.c:4512 lib/luks2/luks2_json_metadata.c:2306 +#: src/cryptsetup.c:2676 #, c-format msgid "Device %s is still in use." msgstr "Уређај „%s“ је још увеку употреби." -#: lib/setup.c:4516 +#: lib/setup.c:4521 #, c-format msgid "Invalid device %s." msgstr "Неисправан уређај „%s“." -#: lib/setup.c:4632 +#: lib/setup.c:4637 msgid "Volume key buffer too small." msgstr "Међумеморија кључа волумена је премала." -#: lib/setup.c:4640 +#: lib/setup.c:4645 msgid "Cannot retrieve volume key for plain device." msgstr "Не могу да довучем кључ волумена за обичан уређај." -#: lib/setup.c:4657 +#: lib/setup.c:4662 msgid "Cannot retrieve root hash for verity device." msgstr "Не могу да довучем хеш корена за уређај тачности." -#: lib/setup.c:4659 +#: lib/setup.c:4664 #, c-format msgid "This operation is not supported for %s crypt device." msgstr "Ова радња није подржана за криптографски уређај „%s“." -#: lib/setup.c:4865 +#: lib/setup.c:4870 msgid "Dump operation is not supported for this device type." msgstr "Радња исписа није подржана за ову врсту уређаја." -#: lib/setup.c:5190 +#: lib/setup.c:5195 #, c-format msgid "Data offset is not multiple of %u bytes." msgstr "Померај података није умножак %u бајта." -#: lib/setup.c:5475 +#: lib/setup.c:5480 #, c-format msgid "Cannot convert device %s which is still in use." msgstr "Не могу да преобратим уређај „%s“ који је још увек у употреби." -#: lib/setup.c:5772 +#: lib/setup.c:5777 #, c-format msgid "Failed to assign keyslot %u as the new volume key." msgstr "Нисам успео да доделим утор кључа „%u“ као нови кључ волумена." -#: lib/setup.c:5845 +#: lib/setup.c:5850 msgid "Failed to initialize default LUKS2 keyslot parameters." msgstr "Нисам успео да покренем основне параметре ЛУКС2 утора кључа." -#: lib/setup.c:5851 +#: lib/setup.c:5856 #, c-format msgid "Failed to assign keyslot %d to digest." msgstr "Нисам успео да доделим утор кључа „%d“ за преглед." -#: lib/setup.c:5982 +#: lib/setup.c:5987 msgid "Kernel keyring is not supported by the kernel." msgstr "Привезак кључева кернела није подржан кернелом." -#: lib/setup.c:5992 lib/luks2/luks2_reencrypt.c:2952 +#: lib/setup.c:5997 lib/luks2/luks2_reencrypt.c:2952 #, c-format msgid "Failed to read passphrase from keyring (error %d)." msgstr "Нисам успео да прочитам пропусну реч из привеска кључа (грешка %d)." -#: lib/setup.c:6016 +#: lib/setup.c:6021 msgid "Failed to acquire global memory-hard access serialization lock." msgstr "Нисам успео да остварим опште закључавање серијализације приступа чврстој меморији." @@ -610,40 +610,45 @@ msgstr "Уређај „%s“ не постоји или је приступ о msgid "Device %s is not compatible." msgstr "Уређај „%s“ није сагласан." -#: lib/utils_device.c:642 +#: lib/utils_device.c:532 +#, c-format +msgid "Ignoring bogus optimal-io size for data device (%u bytes)." +msgstr "Занемарујем лажну оптималну-уи величину за уређај података (%u бајта)." + +#: lib/utils_device.c:648 #, c-format msgid "Device %s is too small. Need at least % bytes." msgstr "Уређај „%s“ је премали. Захтева барем % бајта." -#: lib/utils_device.c:723 +#: lib/utils_device.c:729 #, 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:733 #, c-format msgid "Cannot use device %s, permission denied." msgstr "Не могу да користим уређај „%s“, овлашћење је одбијено." -#: lib/utils_device.c:730 +#: lib/utils_device.c:736 #, c-format msgid "Cannot get info about device %s." msgstr "Не могу да добавим податке о уређају „%s“." -#: lib/utils_device.c:753 +#: lib/utils_device.c:759 msgid "Cannot use a loopback device, running as non-root user." msgstr "Не могу да користим уређај повратне петље, радим као обичан корисник." -#: lib/utils_device.c:763 +#: lib/utils_device.c:769 msgid "Attaching loopback device failed (loop device with autoclear flag is required)." msgstr "Прикачињање уређаја повратне петље није успело (потребан је уређај петље са опцијом самочишћења)." -#: lib/utils_device.c:809 +#: lib/utils_device.c:815 #, c-format msgid "Requested offset is beyond real size of device %s." msgstr "Захтевани померај је изван стварне величине уређаја „%s“." -#: lib/utils_device.c:817 +#: lib/utils_device.c:823 #, c-format msgid "Device %s has zero size." msgstr "Уређај „%s“ има нулту величину." @@ -754,7 +759,7 @@ 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/luks2/luks2_json_metadata.c:1260 lib/luks2/luks2_keyslot.c:734 #, c-format msgid "Cannot write to device %s, permission denied." msgstr "Не могу да пишем на уређај „%s“, овлашћење је одбијено." @@ -777,7 +782,7 @@ msgstr "Грешка УИ приликом шифровања утора кљу #: 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 +#: lib/verity/verity_fec.c:258 lib/luks2/luks2_json_metadata.c:1263 #: src/cryptsetup_reencrypt.c:200 src/cryptsetup_reencrypt.c:212 #, c-format msgid "Cannot open device %s." @@ -800,42 +805,42 @@ 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/luks2/luks2_json_metadata.c:1091 src/cryptsetup.c:1445 +#: src/cryptsetup.c:1571 src/cryptsetup.c:1628 src/cryptsetup.c:1684 +#: src/cryptsetup.c:1751 src/cryptsetup.c:1854 src/cryptsetup.c:1918 +#: src/cryptsetup.c:2148 src/cryptsetup.c:2343 src/cryptsetup.c:2403 +#: src/cryptsetup.c:2469 src/cryptsetup.c:2633 src/cryptsetup.c:3291 +#: src/cryptsetup.c:3300 src/cryptsetup_reencrypt.c:1388 #, 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:1108 #, 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:1110 #, 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:1117 #, 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:1169 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/luks2/luks2_json_metadata.c:1190 #, 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:1198 #, c-format msgid "Cannot read header backup file %s." msgstr "Не могу да прочитам резервну датотеку заглавља „%s“." @@ -857,7 +862,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:1232 msgid "" "\n" "WARNING: real device header has different UUID than backup!" @@ -910,7 +915,7 @@ msgstr "Поправка није успела." msgid "Requested LUKS hash %s is not supported." msgstr "Затражени ЛУКС хеш „%s“ није подржан." -#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1133 +#: lib/luks1/keymanage.c:509 src/cryptsetup.c:1145 msgid "No known problems detected for LUKS header." msgstr "Нису откривени познати проблеми за ЛУКС заглавље." @@ -929,8 +934,8 @@ 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/luks2/luks2_json_format.c:283 lib/luks2/luks2_json_metadata.c:1009 +#: src/cryptsetup.c:2796 msgid "Wrong LUKS UUID format provided." msgstr "Достављен је погрешан запис ЛУКС УЈИБ-а." @@ -999,11 +1004,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:1022 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:1024 msgid "Ensure you have algif_skcipher kernel module loaded." msgstr "Уверите се да је учитан модул кернела „algif_skcipher“." @@ -1016,16 +1021,16 @@ 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“ заглавља." @@ -1048,73 +1053,73 @@ msgstr "Нађох неочекивану ниску („%s“) приликом msgid "Unexpected metadata entry value '%u' found when parsing supported Volume Master Key." msgstr "Нађох неочекивану вредност уноса метаподатака „%u“ приликом обраде подржаног главног кључа волумена." -#: lib/bitlk/bitlk.c:478 +#: lib/bitlk/bitlk.c:479 #, c-format msgid "Failed to read BITLK signature from %s." msgstr "Нисам успео да прочитам „BITLK“ потпис из „%s“." -#: lib/bitlk/bitlk.c:484 +#: lib/bitlk/bitlk.c:485 msgid "BITLK version 1 is currently not supported." msgstr "„BITLK“ издање 1 тренутно није подржано." -#: lib/bitlk/bitlk.c:490 +#: lib/bitlk/bitlk.c:491 msgid "Invalid or unknown boot signature for BITLK device." msgstr "Неисправан или непознат потпис учитавања за „BITLK“ уређај." -#: lib/bitlk/bitlk.c:502 +#: lib/bitlk/bitlk.c:503 msgid "Invalid or unknown signature for BITLK device." msgstr "Неисправан или непознат потпис за „BITLK“ уређај." -#: lib/bitlk/bitlk.c:509 +#: lib/bitlk/bitlk.c:515 #, c-format msgid "Unsupported sector size %." msgstr "Неподржана величина одељка „%“." -#: lib/bitlk/bitlk.c:517 +#: lib/bitlk/bitlk.c:523 #, c-format msgid "Failed to read BITLK header from %s." msgstr "Нисам успео да прочитам „BITLK“ заглавље из „%s“." -#: lib/bitlk/bitlk.c:542 +#: lib/bitlk/bitlk.c:548 #, c-format msgid "Failed to read BITLK FVE metadata from %s." msgstr "Нисам успео да прочитам „BITLK FVE“ метаподатаке из „%s“." -#: lib/bitlk/bitlk.c:593 +#: lib/bitlk/bitlk.c:599 msgid "Unknown or unsupported encryption type." msgstr "Непозната или неподржана врста криптографије." -#: lib/bitlk/bitlk.c:626 +#: lib/bitlk/bitlk.c:632 #, c-format msgid "Failed to read BITLK metadata entries from %s." msgstr "Нисам успео да прочитам уносе „BITLK“ метаподатака из „%s“." -#: lib/bitlk/bitlk.c:920 +#: lib/bitlk/bitlk.c:926 msgid "This operation is not supported." msgstr "Радња није подржана." -#: lib/bitlk/bitlk.c:928 -msgid "Wrong key size." -msgstr "Погрешна величина кључа." +#: lib/bitlk/bitlk.c:934 +msgid "Unexpected key data size." +msgstr "Неочекивана величина података кључа." -#: lib/bitlk/bitlk.c:980 +#: lib/bitlk/bitlk.c:988 msgid "This BITLK device is in an unsupported state and cannot be activated." msgstr "Овај „BITLK“ уређај је у неподржаном стању и не може бити активиран." -#: lib/bitlk/bitlk.c:986 +#: lib/bitlk/bitlk.c:994 #, c-format msgid "BITLK devices with type '%s' cannot be activated." msgstr "„BITLK“ уређај са врстом „%s“ се не може активирати." -#: lib/bitlk/bitlk.c:1068 +#: lib/bitlk/bitlk.c:1076 msgid "Activation of partially decrypted BITLK device is not supported." msgstr "Активирање делимично дешифрованог „BITLK“ уређаја није подржано." -#: lib/bitlk/bitlk.c:1204 +#: lib/bitlk/bitlk.c:1212 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK IV." msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK IV“." -#: lib/bitlk/bitlk.c:1208 +#: lib/bitlk/bitlk.c:1216 msgid "Cannot activate device, kernel dm-crypt is missing support for BITLK Elephant diffuser." msgstr "Не могу да активирам уређај, „dm-crypt“-у кернела недостаје подршка за „BITLK Elephant“ дифузера." @@ -1265,8 +1270,8 @@ msgstr "Кернел не подржава мапирање дм-целовит 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/luks2/luks2_disk_metadata.c:383 lib/luks2/luks2_json_metadata.c:967 +#: lib/luks2/luks2_json_metadata.c:1252 #, c-format msgid "Failed to acquire write lock on device %s." msgstr "Нисам успео да остварим закључавање писања на уређају „%s“." @@ -1292,40 +1297,40 @@ msgstr "Затражени померај података је премали." msgid "WARNING: keyslots area (% bytes) is very small, available LUKS2 keyslot count is very limited.\n" msgstr "УПОЗОРЕЊЕ: област утора кључа (% бајта) је врло мала, доступан број ЛУКС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:954 lib/luks2/luks2_json_metadata.c:1082 +#: lib/luks2/luks2_json_metadata.c:1158 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:1175 #, 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:1216 msgid "Data offset differ on device and backup, restore failed." msgstr "Померај података се разликује на уређају и резерви, враћање није успело." -#: lib/luks2/luks2_json_metadata.c:1214 +#: lib/luks2/luks2_json_metadata.c:1222 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:1229 #, 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:1230 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:1231 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:1233 msgid "" "\n" "WARNING: unknown LUKS2 requirements detected in real device header!\n" @@ -1335,7 +1340,7 @@ msgstr "" "УПОЗОРЕЊЕ: непознати ЛУКС2 захтеви су откривени у стварном заглављу уређаја!\n" "Замена заглавља резервом може оштетити податке на том уређају!" -#: lib/luks2/luks2_json_metadata.c:1227 +#: lib/luks2/luks2_json_metadata.c:1235 msgid "" "\n" "WARNING: Unfinished offline reencryption detected on the device!\n" @@ -1345,50 +1350,50 @@ msgstr "" "УПОЗОРЕЊЕ: Недовршено ван мрежно поновно шифровање је откривено на уређају!\n" "Замена заглавља резервом може оштетити податке." -#: lib/luks2/luks2_json_metadata.c:1323 +#: lib/luks2/luks2_json_metadata.c:1333 #, 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:2020 lib/luks2/luks2_reencrypt.c:1746 #, 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:2032 lib/luks2/luks2_reencrypt.c:1764 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:2038 lib/luks2/luks2_reencrypt.c:1770 msgid "Failed to set dm-linear segment." msgstr "Нисам успео да подесим „dm-linear“ подеок." -#: lib/luks2/luks2_json_metadata.c:2155 +#: lib/luks2/luks2_json_metadata.c:2165 msgid "Unsupported device integrity configuration." msgstr "Неподржано подешавање целовитости уређаја." -#: lib/luks2/luks2_json_metadata.c:2241 +#: lib/luks2/luks2_json_metadata.c:2251 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:2262 lib/luks2/luks2_reencrypt.c:3190 #, 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:2342 msgid "Failed to read LUKS2 requirements." msgstr "Нисам успео да прочитам ЛУКС2 захтеве." -#: lib/luks2/luks2_json_metadata.c:2339 +#: lib/luks2/luks2_json_metadata.c:2349 msgid "Unmet LUKS2 requirements detected." msgstr "Неоствариви ЛУКС2 захтеви су откривени." -#: lib/luks2/luks2_json_metadata.c:2347 +#: lib/luks2/luks2_json_metadata.c:2357 msgid "Operation incompatible with device marked for legacy reencryption. Aborting." msgstr "Радња је несагласна са уређајем означеним за старо поновно шифровање. Прекидам." -#: lib/luks2/luks2_json_metadata.c:2349 +#: lib/luks2/luks2_json_metadata.c:2359 msgid "Operation incompatible with device marked for LUKS2 reencryption. Aborting." msgstr "Радња је несагласна са уређајем означеним за ЛУКС2 поновно шифровање. Прекидам." @@ -1426,7 +1431,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 "Не могу да преместим област утора кључа." @@ -1675,69 +1680,69 @@ msgstr "Нема слободног утора скупине." msgid "Failed to create builtin token %s." msgstr "Нисам успео да направим уграђену скупину „%s“." -#: src/cryptsetup.c:164 +#: src/cryptsetup.c:166 msgid "Can't do passphrase verification on non-tty inputs." msgstr "Не могу да одрадим проверу пропусне речи на не-конзолним улазима." -#: src/cryptsetup.c:221 +#: src/cryptsetup.c:229 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.c:259 src/cryptsetup.c:971 src/cryptsetup.c:1281 +#: src/cryptsetup.c:3157 src/cryptsetup_reencrypt.c:723 #: src/cryptsetup_reencrypt.c:793 msgid "No known cipher specification pattern detected." msgstr "Није откривен познат образац одреднице шифрера." -#: src/cryptsetup.c:259 +#: src/cryptsetup.c:267 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:275 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:315 #, 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:321 src/cryptsetup.c:1102 src/cryptsetup.c:1154 +#: src/cryptsetup.c:1258 src/cryptsetup.c:1331 src/cryptsetup.c:1986 +#: src/cryptsetup.c:2694 src/cryptsetup.c:2817 src/integritysetup.c:233 msgid "Operation aborted.\n" msgstr "Радња је обустављена.\n" -#: src/cryptsetup.c:381 +#: src/cryptsetup.c:389 msgid "Option --key-file is required." msgstr "Захтевана је опција „--key-file“." -#: src/cryptsetup.c:434 +#: src/cryptsetup.c:442 msgid "Enter VeraCrypt PIM: " msgstr "Унесите „VeraCrypt PIM“: " -#: src/cryptsetup.c:443 +#: src/cryptsetup.c:451 msgid "Invalid PIM value: parse error." msgstr "Неисправна „PIM“ вредност: грешка обраде." -#: src/cryptsetup.c:446 +#: src/cryptsetup.c:454 msgid "Invalid PIM value: 0." msgstr "Неисправна „PIM“ вредност: 0." -#: src/cryptsetup.c:449 +#: src/cryptsetup.c:457 msgid "Invalid PIM value: outside of range." msgstr "Неисправна „PIM“ вредност: изван опсега." -#: src/cryptsetup.c:472 +#: src/cryptsetup.c:480 msgid "No device header detected with this passphrase." msgstr "Није откривено заглавље уређаја са овом пропусном речи." -#: src/cryptsetup.c:541 +#: src/cryptsetup.c:549 #, c-format msgid "Device %s is not a valid BITLK device." msgstr "Уређај „%s“ није исправан „BITLK“ уређај." -#: src/cryptsetup.c:576 +#: src/cryptsetup.c:584 msgid "" "Header dump with volume key is sensitive information\n" "which allows access to encrypted partition without passphrase.\n" @@ -1747,68 +1752,68 @@ msgstr "" "који омогућава приступ шифрованој партицији без лозинке.\n" "Овај избачај треба увек бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:673 +#: src/cryptsetup.c:681 #, c-format msgid "Device %s is still active and scheduled for deferred removal.\n" msgstr "Уређај „%s“ је још увек активан и заказан за одложено уклањање.\n" -#: src/cryptsetup.c:701 +#: src/cryptsetup.c:709 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:850 msgid "Benchmark interrupted." msgstr "Оцењивање је прекинуто." -#: src/cryptsetup.c:859 +#: src/cryptsetup.c:871 #, c-format msgid "PBKDF2-%-9s N/A\n" msgstr "„PBKDF2-%-9s“ Н/Д\n" -#: src/cryptsetup.c:861 +#: src/cryptsetup.c:873 #, 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:887 #, c-format msgid "%-10s N/A\n" msgstr "%-10s Н/Д\n" -#: src/cryptsetup.c:877 +#: src/cryptsetup.c:889 #, 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:913 msgid "Result of benchmark is not reliable." msgstr "Резултат оцењивања није поуздан." -#: src/cryptsetup.c:951 +#: src/cryptsetup.c:963 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:983 #, c-format msgid "#%*s Algorithm | Key | Encryption | Decryption\n" msgstr "#%*s Алгоритам | Кључ | Шифровање | Дешифровање\n" -#: src/cryptsetup.c:975 +#: src/cryptsetup.c:987 #, 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:1006 msgid "# Algorithm | Key | Encryption | Decryption\n" msgstr "# Алгоритам | Кључ | Шифровање | Дешифровање\n" -#: src/cryptsetup.c:1003 +#: src/cryptsetup.c:1015 msgid "N/A" msgstr "Недоступно" -#: src/cryptsetup.c:1083 +#: src/cryptsetup.c:1095 msgid "" "Seems device does not require reencryption recovery.\n" "Do you want to proceed anyway?" @@ -1816,19 +1821,19 @@ msgstr "" "Изгледа да уређај не захтева опоравак поновног шифровања.\n" "Да ли желите да наставите?" -#: src/cryptsetup.c:1089 +#: src/cryptsetup.c:1101 msgid "Really proceed with LUKS2 reencryption recovery?" msgstr "Да наставим са опоравком ЛУКС2 поновног шифровања?" -#: src/cryptsetup.c:1098 +#: src/cryptsetup.c:1110 msgid "Enter passphrase for reencryption recovery: " msgstr "Унесите пропусну реч за опоравак поновног шифровања: " -#: src/cryptsetup.c:1141 +#: src/cryptsetup.c:1153 msgid "Really try to repair LUKS device header?" msgstr "Стварно да покушам да поправим заглавље ЛУКС уређаја?" -#: src/cryptsetup.c:1160 src/integritysetup.c:146 +#: src/cryptsetup.c:1172 src/integritysetup.c:146 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 +1841,104 @@ msgstr "" "Бришем уређај да бих започео суму провере целовитости.\n" "Можете прекинути ово притиском на „CTRL+c“ (остатак необрисаног уређаја садржаће неисправну суму провере).\n" -#: src/cryptsetup.c:1182 src/integritysetup.c:168 +#: src/cryptsetup.c:1194 src/integritysetup.c:168 #, c-format msgid "Cannot deactivate temporary device %s." msgstr "Не могу да деактивирам привремени уређај „%s“." -#: src/cryptsetup.c:1231 +#: src/cryptsetup.c:1243 msgid "Integrity option can be used only for LUKS2 format." msgstr "Опција целовитости се може користити само за ЛУКС2 запис." -#: src/cryptsetup.c:1236 src/cryptsetup.c:1296 +#: src/cryptsetup.c:1248 src/cryptsetup.c:1308 msgid "Unsupported LUKS2 metadata size options." msgstr "Неподржана опција величине ЛУКС2 метаподатака." -#: src/cryptsetup.c:1253 +#: src/cryptsetup.c:1265 #, c-format msgid "Cannot create header file %s." msgstr "Не могу да направим датотеку заглавља „%s“." -#: src/cryptsetup.c:1276 src/integritysetup.c:195 src/integritysetup.c:204 +#: src/cryptsetup.c:1288 src/integritysetup.c:195 src/integritysetup.c:204 #: src/integritysetup.c:213 src/integritysetup.c:284 src/integritysetup.c:293 #: src/integritysetup.c:303 msgid "No known integrity specification pattern detected." msgstr "Није откривен познат образац одреднице целовитости." -#: src/cryptsetup.c:1289 +#: src/cryptsetup.c:1301 #, c-format msgid "Cannot use %s as on-disk header." msgstr "Не могу да користим „%s“ као заглавље на-диску." -#: src/cryptsetup.c:1313 src/integritysetup.c:227 +#: src/cryptsetup.c:1325 src/integritysetup.c:227 #, 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:1366 src/cryptsetup.c:1700 src/cryptsetup.c:1767 +#: src/cryptsetup.c:1869 src/cryptsetup.c:1935 src/cryptsetup_reencrypt.c:553 msgid "Failed to set pbkdf parameters." msgstr "Нисам успео да подесим „pbkdf“ параметре." -#: src/cryptsetup.c:1439 +#: src/cryptsetup.c:1451 msgid "Reduced data offset is allowed only for detached LUKS header." msgstr "Смањени померај података је допуштен само за откачена ЛУКС заглавља." -#: src/cryptsetup.c:1450 src/cryptsetup.c:1761 +#: src/cryptsetup.c:1462 src/cryptsetup.c:1773 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:1500 msgid "Device activated but cannot make flags persistent." msgstr "Уређај је активиран али не могу да учиним заставице трајним." -#: src/cryptsetup.c:1569 src/cryptsetup.c:1639 +#: src/cryptsetup.c:1581 src/cryptsetup.c:1651 #, c-format msgid "Keyslot %d is selected for deletion." msgstr "Утор кључа „%d“ је изабран за брисање." -#: src/cryptsetup.c:1581 src/cryptsetup.c:1642 +#: src/cryptsetup.c:1593 src/cryptsetup.c:1654 msgid "This is the last keyslot. Device will become unusable after purging this key." msgstr "Ово је последњи утор кључа. Уређај ће постати неупотребљив након чишћења овог кључа." -#: src/cryptsetup.c:1582 +#: src/cryptsetup.c:1594 msgid "Enter any remaining passphrase: " msgstr "Унесите неку преосталу пропусну реч: " -#: src/cryptsetup.c:1583 src/cryptsetup.c:1644 +#: src/cryptsetup.c:1595 src/cryptsetup.c:1656 msgid "Operation aborted, the keyslot was NOT wiped.\n" msgstr "Радња је прекинута, утор кључа НИЈЕ обрисан.\n" -#: src/cryptsetup.c:1621 +#: src/cryptsetup.c:1633 msgid "Enter passphrase to be deleted: " msgstr "Унесите пропусну реч за брисање: " -#: src/cryptsetup.c:1702 src/cryptsetup.c:1776 src/cryptsetup.c:1810 +#: src/cryptsetup.c:1714 src/cryptsetup.c:1788 src/cryptsetup.c:1822 msgid "Enter new passphrase for key slot: " msgstr "Унесите нову пропусну реч за утор кључа: " -#: src/cryptsetup.c:1793 src/cryptsetup_reencrypt.c:1343 +#: src/cryptsetup.c:1805 src/cryptsetup_reencrypt.c:1343 #, c-format msgid "Enter any existing passphrase: " msgstr "Унесите неку постојећу пропусну реч: " -#: src/cryptsetup.c:1861 +#: src/cryptsetup.c:1873 msgid "Enter passphrase to be changed: " msgstr "Унесите пропусну реч за мењање: " -#: src/cryptsetup.c:1877 src/cryptsetup_reencrypt.c:1329 +#: src/cryptsetup.c:1889 src/cryptsetup_reencrypt.c:1329 msgid "Enter new passphrase: " msgstr "Унесите нову пропусну реч: " -#: src/cryptsetup.c:1927 +#: src/cryptsetup.c:1939 msgid "Enter passphrase for keyslot to be converted: " msgstr "Унесите пропусну реч за утор кључа за претварање: " -#: src/cryptsetup.c:1951 +#: src/cryptsetup.c:1963 msgid "Only one device argument for isLuks operation is supported." msgstr "Подржан је само један аргумент уређаја за радњу „isLuks“." -#: src/cryptsetup.c:2001 +#: src/cryptsetup.c:2013 msgid "" "The header dump with volume key is sensitive information\n" "that allows access to encrypted partition without a passphrase.\n" @@ -1943,12 +1948,12 @@ msgstr "" "који омогућава приступ шифрованој партицији без лозинке.\n" "Овај избачај треба бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:2066 +#: src/cryptsetup.c:2078 #, c-format msgid "Keyslot %d does not contain unbound key." msgstr "Утор кључа %d не садржи несвезани кључ." -#: src/cryptsetup.c:2072 +#: src/cryptsetup.c:2084 msgid "" "The header dump with unbound key is sensitive information.\n" "This dump should be stored encrypted in a safe place." @@ -1956,30 +1961,30 @@ msgstr "" "Избачај заглавља са кључем волумена је осетљив податак\n" "Овај избачај треба увек бити смештен шифрован на безбедном месту." -#: src/cryptsetup.c:2207 src/cryptsetup.c:2228 +#: src/cryptsetup.c:2219 src/cryptsetup.c:2240 msgid "Option --header-backup-file is required." msgstr "Захтевана је опција „--header-backup-file“." -#: src/cryptsetup.c:2258 +#: src/cryptsetup.c:2270 #, c-format msgid "%s is not cryptsetup managed device." msgstr "„%s“ није уређај управљан криптоподешавањем." -#: src/cryptsetup.c:2269 +#: src/cryptsetup.c:2281 #, c-format msgid "Refresh is not supported for device type %s" msgstr "Освежавање није подржано за врсту уређаја „%s“" -#: src/cryptsetup.c:2311 +#: src/cryptsetup.c:2323 #, c-format msgid "Unrecognized metadata device type %s." msgstr "Непозната врста уређаја метаподатака „%s“." -#: src/cryptsetup.c:2314 +#: src/cryptsetup.c:2326 msgid "Command requires device and mapped name as arguments." msgstr "Наредба захтева уређај и мапирани назив као аргумент." -#: src/cryptsetup.c:2336 +#: src/cryptsetup.c:2348 #, c-format msgid "" "This operation will erase all keyslots on device %s.\n" @@ -1988,95 +1993,95 @@ msgstr "" "Ова радња ће обрисати све уторе кључева на уређају „%s“.\n" "Уређај ће постати неупотребљив након ове радње." -#: src/cryptsetup.c:2343 +#: src/cryptsetup.c:2355 msgid "Operation aborted, keyslots were NOT wiped.\n" msgstr "Радња је прекинута, утори кључева НИСУ обрисани.\n" -#: src/cryptsetup.c:2380 +#: src/cryptsetup.c:2392 msgid "Invalid LUKS type, only luks1 and luks2 are supported." msgstr "Неисправна ЛУКС врста, само „luks1“ и „luks2“ су подржане." -#: src/cryptsetup.c:2398 +#: src/cryptsetup.c:2410 #, c-format msgid "Device is already %s type." msgstr "Уређај је већ „%s“ врсте." -#: src/cryptsetup.c:2403 +#: src/cryptsetup.c:2415 #, c-format msgid "This operation will convert %s to %s format.\n" msgstr "Ова радња ће претворити „%s“ у „%s“ запис.\n" -#: src/cryptsetup.c:2409 +#: src/cryptsetup.c:2421 msgid "Operation aborted, device was NOT converted.\n" msgstr "Радња је прекинута, уређај НИЈЕ претворен.\n" -#: src/cryptsetup.c:2449 +#: src/cryptsetup.c:2461 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:2495 src/cryptsetup.c:2528 src/cryptsetup.c:2551 #, c-format msgid "Token %d is invalid." msgstr "Скупина „%d“ није исправна." -#: src/cryptsetup.c:2486 src/cryptsetup.c:2542 +#: src/cryptsetup.c:2498 src/cryptsetup.c:2554 #, c-format msgid "Token %d in use." msgstr "Скупина „%d“ је у употреби." -#: src/cryptsetup.c:2493 +#: src/cryptsetup.c:2505 #, 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:2514 src/cryptsetup.c:2576 #, c-format msgid "Failed to assign token %d to keyslot %d." msgstr "Нисам успео да доделим скупину „%d“ утору кључа %d." -#: src/cryptsetup.c:2519 +#: src/cryptsetup.c:2531 #, c-format msgid "Token %d is not in use." msgstr "Скупина „%d“ није у употреби." -#: src/cryptsetup.c:2554 +#: src/cryptsetup.c:2566 msgid "Failed to import token from file." msgstr "Нисам успео да увезем скупину из датотеке." -#: src/cryptsetup.c:2579 +#: src/cryptsetup.c:2591 #, c-format msgid "Failed to get token %d for export." msgstr "Нисам успео да добавим скупину „%d“ за извоз." -#: src/cryptsetup.c:2594 +#: src/cryptsetup.c:2606 msgid "--key-description parameter is mandatory for token add action." msgstr "„--key-description“ параметар је обавезан за радњу додавања скупине." -#: src/cryptsetup.c:2600 src/cryptsetup.c:2608 +#: src/cryptsetup.c:2612 src/cryptsetup.c:2620 msgid "Action requires specific token. Use --token-id parameter." msgstr "Радња захтева нарочиту скупину. Користите параметар „--token-id“." -#: src/cryptsetup.c:2613 +#: src/cryptsetup.c:2625 #, c-format msgid "Invalid token operation %s." msgstr "Неисправна радња скупине „%s“." -#: src/cryptsetup.c:2668 +#: src/cryptsetup.c:2680 #, 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:2684 #, c-format msgid "Device %s is not a block device.\n" msgstr "Уређај „%s“ није блок уређај.\n" -#: src/cryptsetup.c:2674 +#: src/cryptsetup.c:2686 #, c-format msgid "Failed to auto-detect device %s holders." msgstr "Нисам успео да самооткријем држаче „%s“ уређаја." -#: src/cryptsetup.c:2676 +#: src/cryptsetup.c:2688 #, c-format msgid "" "Unable to decide if device %s is activated or not.\n" @@ -2089,233 +2094,233 @@ msgstr "" "То може довести до оштећења података ако је уређај заправо активиран.\n" "Да покренете поновно шифровање у режиму на мрежи, користите параметар „--active-name“.\n" -#: src/cryptsetup.c:2756 +#: src/cryptsetup.c:2768 msgid "Invalid LUKS device type." msgstr "Неисправна врста ЛУКС уређаја." -#: src/cryptsetup.c:2761 +#: src/cryptsetup.c:2773 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:2778 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:2787 #, c-format msgid "Adjusting --reduce-device-size value to twice the --offset % (sectors).\n" msgstr "Подешавам „--reduce-device-size“ вредност на двоструко од „--offset“ % (подеока).\n" -#: src/cryptsetup.c:2779 +#: src/cryptsetup.c:2791 msgid "Encryption is supported only for LUKS2 format." msgstr "Шифровање је подржано само за ЛУКС2 запис." -#: src/cryptsetup.c:2801 +#: src/cryptsetup.c:2813 #, 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:2828 #, c-format msgid "Temporary header file %s already exists. Aborting." msgstr "Привремена датотека заглавља „%s“ већ постоји. Прекидам." -#: src/cryptsetup.c:2818 src/cryptsetup.c:2825 +#: src/cryptsetup.c:2830 src/cryptsetup.c:2837 #, c-format msgid "Cannot create temporary header file %s." msgstr "Не могу да направим привремену датотеку заглавља „%s“." -#: src/cryptsetup.c:2889 +#: src/cryptsetup.c:2901 #, 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:3065 src/cryptsetup.c:3071 msgid "Not enough free keyslots for reencryption." msgstr "Нема довољно слободних утора кључева за поновно шифровање." -#: src/cryptsetup.c:3079 src/cryptsetup_reencrypt.c:1294 +#: src/cryptsetup.c:3091 src/cryptsetup_reencrypt.c:1294 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.c:3100 src/cryptsetup_reencrypt.c:1341 #: src/cryptsetup_reencrypt.c:1352 #, c-format msgid "Enter passphrase for key slot %d: " msgstr "Унесите пропусну реч за утор кључа %d: " -#: src/cryptsetup.c:3096 +#: src/cryptsetup.c:3108 #, c-format msgid "Enter passphrase for key slot %u: " msgstr "Унесите пропусну реч за утор кључа %u: " -#: src/cryptsetup.c:3263 +#: src/cryptsetup.c:3283 msgid "Command requires device as argument." msgstr "Наредба захтева уређај као аргумент." -#: src/cryptsetup.c:3285 +#: src/cryptsetup.c:3305 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:3317 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:3327 src/cryptsetup_reencrypt.c:178 msgid "Reencryption of device with integrity profile is not supported." msgstr "Поновно шифровање уређаја са профилом целовитости није подржано." -#: src/cryptsetup.c:3315 +#: src/cryptsetup.c:3335 msgid "LUKS2 reencryption already initialized. Aborting operation." msgstr "ЛУКС2 поновно шифровање је већ покренуто. Прекидам радњу." -#: src/cryptsetup.c:3319 +#: src/cryptsetup.c:3339 msgid "LUKS2 device is not in reencryption." msgstr "ЛУКС2 уређај није у поновном шифровању." -#: src/cryptsetup.c:3346 +#: src/cryptsetup.c:3366 msgid " [--type ] []" msgstr "<уређај> [--type <врста>] [<назив>]" -#: src/cryptsetup.c:3346 src/veritysetup.c:394 src/integritysetup.c:480 +#: src/cryptsetup.c:3366 src/veritysetup.c:399 src/integritysetup.c:480 msgid "open device as " 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/cryptsetup.c:3367 src/cryptsetup.c:3368 src/cryptsetup.c:3369 +#: src/veritysetup.c:400 src/veritysetup.c:401 src/integritysetup.c:481 #: src/integritysetup.c:482 msgid "" msgstr "<назив>" -#: src/cryptsetup.c:3347 src/veritysetup.c:395 src/integritysetup.c:481 +#: src/cryptsetup.c:3367 src/veritysetup.c:400 src/integritysetup.c:481 msgid "close device (remove mapping)" msgstr "затвара уређај (уклања мапирање)" -#: src/cryptsetup.c:3348 +#: src/cryptsetup.c:3368 msgid "resize active device" msgstr "мења величину радног уређаја" -#: src/cryptsetup.c:3349 +#: src/cryptsetup.c:3369 msgid "show device status" msgstr "показује стање уређаја" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 msgid "[--cipher ]" msgstr "[--cipher <шифрер>]" -#: src/cryptsetup.c:3350 +#: src/cryptsetup.c:3370 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:3371 src/cryptsetup.c:3372 src/cryptsetup.c:3373 +#: src/cryptsetup.c:3374 src/cryptsetup.c:3375 src/cryptsetup.c:3382 +#: src/cryptsetup.c:3383 src/cryptsetup.c:3384 src/cryptsetup.c:3385 +#: src/cryptsetup.c:3386 src/cryptsetup.c:3387 src/cryptsetup.c:3388 +#: src/cryptsetup.c:3389 src/cryptsetup.c:3390 msgid "" msgstr "<уређај>" -#: src/cryptsetup.c:3351 +#: src/cryptsetup.c:3371 msgid "try to repair on-disk metadata" msgstr "покушава да поправи метаподатке на-диску" -#: src/cryptsetup.c:3352 +#: src/cryptsetup.c:3372 msgid "reencrypt LUKS2 device" msgstr "ЛУКС2 уређај поновног шифровања" -#: src/cryptsetup.c:3353 +#: src/cryptsetup.c:3373 msgid "erase all keyslots (remove encryption key)" msgstr "брише све уторе кључева (уклања кључ шифровања)" -#: src/cryptsetup.c:3354 +#: src/cryptsetup.c:3374 msgid "convert LUKS from/to LUKS2 format" msgstr "претвара ЛУКС из/у ЛУКС2 запис" -#: src/cryptsetup.c:3355 +#: src/cryptsetup.c:3375 msgid "set permanent configuration options for LUKS2" msgstr "поставља трајне опције подешавања за ЛУКС2" -#: src/cryptsetup.c:3356 src/cryptsetup.c:3357 +#: src/cryptsetup.c:3376 src/cryptsetup.c:3377 msgid " []" msgstr "<уређај> [<нова датотека кључа>]" -#: src/cryptsetup.c:3356 +#: src/cryptsetup.c:3376 msgid "formats a LUKS device" msgstr "форматира ЛУКС уређај" -#: src/cryptsetup.c:3357 +#: src/cryptsetup.c:3377 msgid "add key to LUKS device" msgstr "додаје кључ у ЛУКС уређај" -#: src/cryptsetup.c:3358 src/cryptsetup.c:3359 src/cryptsetup.c:3360 +#: src/cryptsetup.c:3378 src/cryptsetup.c:3379 src/cryptsetup.c:3380 msgid " []" msgstr "<уређај> [<датотека кључа>]" -#: src/cryptsetup.c:3358 +#: src/cryptsetup.c:3378 msgid "removes supplied key or key file from LUKS device" msgstr "уклања достављени кључ или датотеку кључа из ЛУКС уређаја" -#: src/cryptsetup.c:3359 +#: src/cryptsetup.c:3379 msgid "changes supplied key or key file of LUKS device" msgstr "мења достављени кључ или датотеку кључа ЛУКС уређаја" -#: src/cryptsetup.c:3360 +#: src/cryptsetup.c:3380 msgid "converts a key to new pbkdf parameters" msgstr "претвара кључ у нове „pbkdf“ параметре" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid " " msgstr "<уређај> <утор кључа>" -#: src/cryptsetup.c:3361 +#: src/cryptsetup.c:3381 msgid "wipes key with number from LUKS device" msgstr "брише кључ са бројем <утор кључа> са ЛУКС уређаја" -#: src/cryptsetup.c:3362 +#: src/cryptsetup.c:3382 msgid "print UUID of LUKS device" msgstr "исписује УЈИБ ЛУКС уређаја" -#: src/cryptsetup.c:3363 +#: src/cryptsetup.c:3383 msgid "tests for LUKS partition header" msgstr "испробава <уређај> за заглављем ЛУКС партиције" -#: src/cryptsetup.c:3364 +#: src/cryptsetup.c:3384 msgid "dump LUKS partition information" msgstr "исписује податке ЛУКС партиције" -#: src/cryptsetup.c:3365 +#: src/cryptsetup.c:3385 msgid "dump TCRYPT device information" msgstr "исписује податке ТКРИПТ уређаја" -#: src/cryptsetup.c:3366 +#: src/cryptsetup.c:3386 msgid "dump BITLK device information" msgstr "исписује податке „BITLK“ уређаја" -#: src/cryptsetup.c:3367 +#: src/cryptsetup.c:3387 msgid "Suspend LUKS device and wipe key (all IOs are frozen)" msgstr "Обуставља ЛУКС уређај и брише кључ (сви УИ су замрзнути)" -#: src/cryptsetup.c:3368 +#: src/cryptsetup.c:3388 msgid "Resume suspended LUKS device" msgstr "Наставља са обустављеним ЛУКС уређајем" -#: src/cryptsetup.c:3369 +#: src/cryptsetup.c:3389 msgid "Backup LUKS device header and keyslots" msgstr "Прави резерву заглавља „LUKS“ уређаја и утора кључева" -#: src/cryptsetup.c:3370 +#: src/cryptsetup.c:3390 msgid "Restore LUKS device header and keyslots" msgstr "Враћа заглавље „LUKS“ уређаја и уторе кључева" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid " " msgstr "<додај|уклони|увези|извези> <уређај>" -#: src/cryptsetup.c:3371 +#: src/cryptsetup.c:3391 msgid "Manipulate LUKS2 tokens" msgstr "Управља ЛУКС2 скупинама" -#: src/cryptsetup.c:3389 src/veritysetup.c:412 src/integritysetup.c:498 +#: src/cryptsetup.c:3409 src/veritysetup.c:417 src/integritysetup.c:498 msgid "" "\n" " is one of:\n" @@ -2323,7 +2328,7 @@ msgstr "" "\n" "<радња> је једна од следећих:\n" -#: src/cryptsetup.c:3395 +#: src/cryptsetup.c:3415 msgid "" "\n" "You can also use old syntax aliases:\n" @@ -2335,7 +2340,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:3419 #, c-format msgid "" "\n" @@ -2350,7 +2355,7 @@ msgstr "" "<утор кључа> је број ЛУКС утора кључа за мењање\n" "<датотека кључа> изборна датотека кључа за нови кључ за радњу „luksAddKey“\n" -#: src/cryptsetup.c:3406 +#: src/cryptsetup.c:3426 #, c-format msgid "" "\n" @@ -2359,7 +2364,7 @@ msgstr "" "\n" "Основни уграђени запис метаподатака је „%s“ (за „luksFormat“ радњу).\n" -#: src/cryptsetup.c:3411 +#: src/cryptsetup.c:3431 #, c-format msgid "" "\n" @@ -2376,7 +2381,7 @@ msgstr "" "Основни „PBKDF“ за ЛУКС2: %s\n" "\tВреме понављања: %d, Захтевана меморија: %dkB, Паралелне нити: %d\n" -#: src/cryptsetup.c:3422 +#: src/cryptsetup.c:3442 #, c-format msgid "" "\n" @@ -2391,443 +2396,451 @@ msgstr "" "\tобично: %s, Кључ: %d бита, Хеширање лозинке: %s\n" "\tЛУКС: %s, Кључ: %d бита, Хеширање ЛУКС заглавља: %s, РНГ: %s\n" -#: src/cryptsetup.c:3431 +#: src/cryptsetup.c:3451 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:3467 src/veritysetup.c:575 src/integritysetup.c:642 #, 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.c:3500 src/veritysetup.c:462 src/integritysetup.c:536 #: src/cryptsetup_reencrypt.c:1607 msgid "Show this help message" msgstr "Приказује ову поруку помоћи" -#: src/cryptsetup.c:3481 src/veritysetup.c:458 src/integritysetup.c:537 +#: src/cryptsetup.c:3501 src/veritysetup.c:463 src/integritysetup.c:537 #: src/cryptsetup_reencrypt.c:1608 msgid "Display brief usage" msgstr "Прикажите кратку поруку о коришћењу" -#: src/cryptsetup.c:3482 src/veritysetup.c:459 src/integritysetup.c:538 +#: src/cryptsetup.c:3502 src/veritysetup.c:464 src/integritysetup.c:538 #: src/cryptsetup_reencrypt.c:1609 msgid "Print package version" msgstr "Исписује издање пакета" -#: src/cryptsetup.c:3486 src/veritysetup.c:463 src/integritysetup.c:542 +#: src/cryptsetup.c:3506 src/veritysetup.c:468 src/integritysetup.c:542 #: src/cryptsetup_reencrypt.c:1613 msgid "Help options:" msgstr "Опције помоћи:" -#: src/cryptsetup.c:3487 src/veritysetup.c:464 src/integritysetup.c:543 +#: src/cryptsetup.c:3507 src/veritysetup.c:469 src/integritysetup.c:543 #: src/cryptsetup_reencrypt.c:1614 msgid "Shows more detailed error messages" msgstr "Приказује опширније поруке о грешкама" -#: src/cryptsetup.c:3488 src/veritysetup.c:465 src/integritysetup.c:544 +#: src/cryptsetup.c:3508 src/veritysetup.c:470 src/integritysetup.c:544 #: src/cryptsetup_reencrypt.c:1615 msgid "Show debug messages" msgstr "Приказује поруке прочишћавања" -#: src/cryptsetup.c:3489 +#: src/cryptsetup.c:3509 msgid "Show debug messages including JSON metadata" msgstr "Приказује поруке прочишћавања укључујући „JSON“ метаподатке" -#: src/cryptsetup.c:3490 src/cryptsetup_reencrypt.c:1617 +#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1617 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:3511 src/cryptsetup_reencrypt.c:1619 msgid "The hash used to create the encryption key from the passphrase" msgstr "Хеш коришћен за стварање кључа шифровања из лозинке" -#: src/cryptsetup.c:3492 +#: src/cryptsetup.c:3512 msgid "Verifies the passphrase by asking for it twice" msgstr "Проверава лозинку тражећи је два пута" -#: src/cryptsetup.c:3493 src/cryptsetup_reencrypt.c:1621 +#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1621 msgid "Read the key from a file" msgstr "Чита кључ из датотеке" -#: src/cryptsetup.c:3494 +#: src/cryptsetup.c:3514 msgid "Read the volume (master) key from file." msgstr "Чита (главни) кључ вочумена из датотеке." -#: src/cryptsetup.c:3495 +#: src/cryptsetup.c:3515 msgid "Dump volume (master) key instead of keyslots info" msgstr "Даје (главни) кључ волумена уместо података утора кључева" -#: src/cryptsetup.c:3496 src/cryptsetup_reencrypt.c:1618 +#: src/cryptsetup.c:3516 src/cryptsetup_reencrypt.c:1618 msgid "The size of the encryption key" msgstr "Величина кључа шифровања" -#: src/cryptsetup.c:3496 src/cryptsetup.c:3557 src/integritysetup.c:562 +#: src/cryptsetup.c:3516 src/cryptsetup.c:3579 src/integritysetup.c:562 #: src/integritysetup.c:566 src/integritysetup.c:570 #: src/cryptsetup_reencrypt.c:1618 msgid "BITS" msgstr "БИТА" -#: src/cryptsetup.c:3497 src/cryptsetup_reencrypt.c:1634 +#: src/cryptsetup.c:3517 src/cryptsetup_reencrypt.c:1634 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/cryptsetup.c:3517 src/cryptsetup.c:3518 src/cryptsetup.c:3519 +#: src/cryptsetup.c:3520 src/cryptsetup.c:3523 src/cryptsetup.c:3576 +#: src/cryptsetup.c:3577 src/cryptsetup.c:3585 src/cryptsetup.c:3586 +#: src/veritysetup.c:473 src/veritysetup.c:474 src/veritysetup.c:475 +#: src/veritysetup.c:478 src/veritysetup.c:479 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 msgid "bytes" msgstr "бајта" -#: src/cryptsetup.c:3498 src/cryptsetup_reencrypt.c:1633 +#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1633 msgid "Number of bytes to skip in keyfile" msgstr "Број бајтова за прескакање у датотеци кључа" -#: src/cryptsetup.c:3499 +#: src/cryptsetup.c:3519 msgid "Limits the read from newly added keyfile" msgstr "Ограничава читање из новододате датотеке кључа" -#: src/cryptsetup.c:3500 +#: src/cryptsetup.c:3520 msgid "Number of bytes to skip in newly added keyfile" msgstr "Број бајтова за прескакање у новододатој датотеци кључа" -#: src/cryptsetup.c:3501 +#: src/cryptsetup.c:3521 msgid "Slot number for new key (default is first free)" msgstr "Број утора за нови кључ (основно је први слободан)" -#: src/cryptsetup.c:3502 +#: src/cryptsetup.c:3522 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:3522 src/cryptsetup.c:3524 src/cryptsetup.c:3525 +#: src/cryptsetup.c:3531 src/integritysetup.c:552 src/integritysetup.c:559 msgid "SECTORS" msgstr "ОДЕЉЦИ" -#: src/cryptsetup.c:3503 src/cryptsetup_reencrypt.c:1636 +#: src/cryptsetup.c:3523 src/cryptsetup_reencrypt.c:1636 msgid "Use only specified device size (ignore rest of device). DANGEROUS!" msgstr "Користи само наведену величину уређаја (занемарује остатак уређаја). ОВО ЈЕ ОПСАНО!" -#: src/cryptsetup.c:3504 +#: src/cryptsetup.c:3524 msgid "The start offset in the backend device" msgstr "Почетни померај у позадинском уређају" -#: src/cryptsetup.c:3505 +#: src/cryptsetup.c:3525 msgid "How many sectors of the encrypted data to skip at the beginning" msgstr "Број одељака шифрованих података за прескакање на почетку" -#: src/cryptsetup.c:3506 +#: src/cryptsetup.c:3526 msgid "Create a readonly mapping" msgstr "Прави мапирање само за читање" -#: src/cryptsetup.c:3507 src/integritysetup.c:545 +#: src/cryptsetup.c:3527 src/integritysetup.c:545 #: src/cryptsetup_reencrypt.c:1624 msgid "Do not ask for confirmation" msgstr "Не тражи потврђивање" -#: src/cryptsetup.c:3508 +#: src/cryptsetup.c:3528 msgid "Timeout for interactive passphrase prompt (in seconds)" msgstr "Време за упит међудејствене лозинке (у секундама)" -#: src/cryptsetup.c:3508 src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3528 src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "secs" msgstr "секунде" -#: src/cryptsetup.c:3509 src/integritysetup.c:546 +#: src/cryptsetup.c:3529 src/integritysetup.c:546 #: src/cryptsetup_reencrypt.c:1625 msgid "Progress line update (in seconds)" msgstr "Напредак освежења реда (у секундама)" -#: src/cryptsetup.c:3510 src/cryptsetup_reencrypt.c:1626 +#: src/cryptsetup.c:3530 src/cryptsetup_reencrypt.c:1626 msgid "How often the input of the passphrase can be retried" msgstr "Колико често унос лозинке може бити покушан" -#: src/cryptsetup.c:3511 +#: src/cryptsetup.c:3531 msgid "Align payload at sector boundaries - for luksFormat" msgstr "Поравнава утовар на границе одељка — за „luksFormat“" -#: src/cryptsetup.c:3512 +#: src/cryptsetup.c:3532 msgid "File with LUKS header and keyslots backup" msgstr "Датотека са резервом „LUKS“ заглавља и уторима кључева" -#: src/cryptsetup.c:3513 src/cryptsetup_reencrypt.c:1627 +#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1627 msgid "Use /dev/random for generating volume key" msgstr "Користи „/dev/random“ за стварање кључа волумена" -#: src/cryptsetup.c:3514 src/cryptsetup_reencrypt.c:1628 +#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1628 msgid "Use /dev/urandom for generating volume key" msgstr "Користи „/dev/urandom“ за стварање кључа волумена" -#: src/cryptsetup.c:3515 +#: src/cryptsetup.c:3535 msgid "Share device with another non-overlapping crypt segment" msgstr "Дели уређај са другим не-преклапајућим подеоком шифрера" -#: src/cryptsetup.c:3516 src/veritysetup.c:477 +#: src/cryptsetup.c:3536 src/veritysetup.c:482 msgid "UUID for device to use" msgstr "УЈИБ уређаја за коришћење" -#: src/cryptsetup.c:3517 src/integritysetup.c:579 +#: src/cryptsetup.c:3537 src/integritysetup.c:579 msgid "Allow discards (aka TRIM) requests for device" msgstr "Допушта одбацивања (тј. СКРАЋЕЊЕ) захтева за уређај" -#: src/cryptsetup.c:3518 src/cryptsetup_reencrypt.c:1645 +#: src/cryptsetup.c:3538 src/cryptsetup_reencrypt.c:1645 msgid "Device or file with separated LUKS header" msgstr "Уређај или датотека са одвојеним ЛУКС заглављем" -#: src/cryptsetup.c:3519 +#: src/cryptsetup.c:3539 msgid "Do not activate device, just check passphrase" msgstr "Не покреће уређај, само проверава лозинку" -#: src/cryptsetup.c:3520 +#: src/cryptsetup.c:3540 msgid "Use hidden header (hidden TCRYPT device)" msgstr "Користи скривено заглавље (скривени ТКРИПТ уређај)" -#: src/cryptsetup.c:3521 +#: src/cryptsetup.c:3541 msgid "Device is system TCRYPT drive (with bootloader)" msgstr "Уређај је ТКРИПТ диск система (са подизачем система)" -#: src/cryptsetup.c:3522 +#: src/cryptsetup.c:3542 msgid "Use backup (secondary) TCRYPT header" msgstr "Користи резервно (другоразредно) ТКРИПТ заглавље" -#: src/cryptsetup.c:3523 +#: src/cryptsetup.c:3543 msgid "Scan also for VeraCrypt compatible device" msgstr "Такође обавља преглед за уређајима сагласним са Веракриптом" -#: src/cryptsetup.c:3524 +#: src/cryptsetup.c:3544 msgid "Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Лични умножавач понављања за „VeraCrypt“ сагласан уређај" -#: src/cryptsetup.c:3525 +#: src/cryptsetup.c:3545 msgid "Query Personal Iteration Multiplier for VeraCrypt compatible device" msgstr "Пропитује лични умножавач понављања за „VeraCrypt“ сагласан уређај" -#: src/cryptsetup.c:3526 +#: src/cryptsetup.c:3546 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:3547 msgid "Disable password quality check (if enabled)" msgstr "Искључује проверу квалитета лозинке (ако је укључена)" -#: src/cryptsetup.c:3528 +#: src/cryptsetup.c:3548 msgid "Use dm-crypt same_cpu_crypt performance compatibility option" msgstr "Користи опцију сагласности перформансе „same_cpu_crypt“ дм-крипта" -#: src/cryptsetup.c:3529 +#: src/cryptsetup.c:3549 msgid "Use dm-crypt submit_from_crypt_cpus performance compatibility option" msgstr "Користи опцију сагласности перформансе „submit_from_crypt_cpus“ дм-крипта" -#: src/cryptsetup.c:3530 +#: src/cryptsetup.c:3550 +msgid "Bypass dm-crypt workqueue and process read requests synchronously" +msgstr "Заобилази радни ред „dm-crypt“ и захтев читања процеса истовремено" + +#: src/cryptsetup.c:3551 +msgid "Bypass dm-crypt workqueue and process write requests synchronously" +msgstr "Заобилази радни ред „dm-crypt“ и захтев писања процеса истовремено" + +#: src/cryptsetup.c:3552 msgid "Device removal is deferred until the last user closes it" msgstr "Уклањање уређаја је одложено све док га последњи корисник не затвори" -#: src/cryptsetup.c:3531 +#: src/cryptsetup.c:3553 msgid "Use global lock to serialize memory hard PBKDF (OOM workaround)" msgstr "Користи опште закључавање за серијализацију меморије чврстог „PBKDF“ („OOM“ заобилазница)" -#: src/cryptsetup.c:3532 +#: src/cryptsetup.c:3554 msgid "PBKDF iteration time for LUKS (in ms)" msgstr "Време „PBKDF“ понављања за ЛУКС (у милисекундама)" -#: src/cryptsetup.c:3532 src/cryptsetup_reencrypt.c:1623 +#: src/cryptsetup.c:3554 src/cryptsetup_reencrypt.c:1623 msgid "msecs" msgstr "милисекунде" -#: src/cryptsetup.c:3533 src/cryptsetup_reencrypt.c:1641 +#: src/cryptsetup.c:3555 src/cryptsetup_reencrypt.c:1641 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:3556 src/cryptsetup_reencrypt.c:1642 msgid "PBKDF memory cost limit" msgstr "Ограничење трошка „PBKDF“ меморије" -#: src/cryptsetup.c:3534 src/cryptsetup_reencrypt.c:1642 +#: src/cryptsetup.c:3556 src/cryptsetup_reencrypt.c:1642 msgid "kilobytes" msgstr "килобајта" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "PBKDF parallel cost" msgstr "Трошак „PBKDF“ паралеле" -#: src/cryptsetup.c:3535 src/cryptsetup_reencrypt.c:1643 +#: src/cryptsetup.c:3557 src/cryptsetup_reencrypt.c:1643 msgid "threads" msgstr "нити" -#: src/cryptsetup.c:3536 src/cryptsetup_reencrypt.c:1644 +#: src/cryptsetup.c:3558 src/cryptsetup_reencrypt.c:1644 msgid "PBKDF iterations cost (forced, disables benchmark)" msgstr "Трошак „PBKDF“ понављања (присилно, искључује оцењивање)" -#: src/cryptsetup.c:3537 +#: src/cryptsetup.c:3559 msgid "Keyslot priority: ignore, normal, prefer" msgstr "Првенство утора кључа: ignore, normal, prefer" -#: src/cryptsetup.c:3538 +#: src/cryptsetup.c:3560 msgid "Disable locking of on-disk metadata" msgstr "Искључује закључавање метаподатака на-диску" -#: src/cryptsetup.c:3539 +#: src/cryptsetup.c:3561 msgid "Disable loading volume keys via kernel keyring" msgstr "Искључује учитавање кључева волумена путем привеска кернела" -#: src/cryptsetup.c:3540 +#: src/cryptsetup.c:3562 msgid "Data integrity algorithm (LUKS2 only)" msgstr "Алгоритам целовитости података (само ЛУКС2)" -#: src/cryptsetup.c:3541 src/integritysetup.c:573 +#: src/cryptsetup.c:3563 src/integritysetup.c:573 msgid "Disable journal for integrity device" msgstr "Искључује журнал за уређај целовитости" -#: src/cryptsetup.c:3542 src/integritysetup.c:547 +#: src/cryptsetup.c:3564 src/integritysetup.c:547 msgid "Do not wipe device after format" msgstr "Не брише уређај након форматирања" -#: src/cryptsetup.c:3543 src/integritysetup.c:577 +#: src/cryptsetup.c:3565 src/integritysetup.c:577 msgid "Use inefficient legacy padding (old kernels)" msgstr "Користи неделотворно застарело допуњавање (стари кернели)" -#: src/cryptsetup.c:3544 +#: src/cryptsetup.c:3566 msgid "Do not ask for passphrase if activation by token fails" msgstr "Не тражи пропусну реч ако активација скупином не успе" -#: src/cryptsetup.c:3545 +#: src/cryptsetup.c:3567 msgid "Token number (default: any)" msgstr "Број скупине (основно: било који)" -#: src/cryptsetup.c:3546 +#: src/cryptsetup.c:3568 msgid "Key description" msgstr "Опис кључа" -#: src/cryptsetup.c:3547 +#: src/cryptsetup.c:3569 msgid "Encryption sector size (default: 512 bytes)" msgstr "Величина одељка шифровања (основно: 512 бајта)" -#: src/cryptsetup.c:3548 +#: src/cryptsetup.c:3570 msgid "Use IV counted in sector size (not in 512 bytes)" msgstr "Употреба IV је убројано у величину одељка (не у 512 бајта)" -#: src/cryptsetup.c:3549 +#: src/cryptsetup.c:3571 msgid "Set activation flags persistent for device" msgstr "Поставља трајним заставице активирања за уређај" -#: src/cryptsetup.c:3550 +#: src/cryptsetup.c:3572 msgid "Set label for the LUKS2 device" msgstr "Поставља натпис за ЛУКС2 уређај" -#: src/cryptsetup.c:3551 +#: src/cryptsetup.c:3573 msgid "Set subsystem label for the LUKS2 device" msgstr "Поставља натпис подсистема за ЛУКС2 уређај" -#: src/cryptsetup.c:3552 +#: src/cryptsetup.c:3574 msgid "Create or dump unbound (no assigned data segment) LUKS2 keyslot" msgstr "Ствара или избацује неувезане (не додељене подеоке података) ЛУКС2 уторе кључа" -#: src/cryptsetup.c:3553 +#: src/cryptsetup.c:3575 msgid "Read or write the json from or to a file" msgstr "Чита или записује „json“ из или у датотеку" -#: src/cryptsetup.c:3554 +#: src/cryptsetup.c:3576 msgid "LUKS2 header metadata area size" msgstr "Величина области метаподатака ЛУКС2 заглавља" -#: src/cryptsetup.c:3555 +#: src/cryptsetup.c:3577 msgid "LUKS2 header keyslots area size" msgstr "Величина области утора кључева ЛУКС2 заглавља" -#: src/cryptsetup.c:3556 +#: src/cryptsetup.c:3578 msgid "Refresh (reactivate) device with new parameters" msgstr "Освежава (поново активира) уређај са новим параметрима" -#: src/cryptsetup.c:3557 +#: src/cryptsetup.c:3579 msgid "LUKS2 keyslot: The size of the encryption key" msgstr "ЛУКС2 утор кључа: Величина кључа шифровања" -#: src/cryptsetup.c:3558 +#: src/cryptsetup.c:3580 msgid "LUKS2 keyslot: The cipher used for keyslot encryption" msgstr "ЛУКС2 утор кључа: Шифрер коришћен за шифровање исека кључа" -#: src/cryptsetup.c:3559 +#: src/cryptsetup.c:3581 msgid "Encrypt LUKS2 device (in-place encryption)." msgstr "Шифрује ЛУКС2 уређај (у месту шифровање)." -#: src/cryptsetup.c:3560 +#: src/cryptsetup.c:3582 msgid "Decrypt LUKS2 device (remove encryption)." msgstr "Дешифрује ЛУКС2 уређај (уклања шифровање)." -#: src/cryptsetup.c:3561 +#: src/cryptsetup.c:3583 msgid "Initialize LUKS2 reencryption in metadata only." msgstr "Покреће ЛУКС2 поновно шифровање само у метаподацима." -#: src/cryptsetup.c:3562 +#: src/cryptsetup.c:3584 msgid "Resume initialized LUKS2 reencryption only." msgstr "Наставља само са започетим ЛУКС2 поновним шифровањем." -#: src/cryptsetup.c:3563 src/cryptsetup_reencrypt.c:1635 +#: src/cryptsetup.c:3585 src/cryptsetup_reencrypt.c:1635 msgid "Reduce data device size (move data offset). DANGEROUS!" msgstr "Смањује величину уређаја података (премешта померај података). ОВО ЈЕ ОПАСНО!" -#: src/cryptsetup.c:3564 +#: src/cryptsetup.c:3586 msgid "Maximal reencryption hotzone size." msgstr "Највећа величина вруће зоне поновног шифровања." -#: src/cryptsetup.c:3565 +#: src/cryptsetup.c:3587 msgid "Reencryption hotzone resilience type (checksum,journal,none)" msgstr "Врста гипкости вруће зоне поновног шифровања (checksum,journal,none)" -#: src/cryptsetup.c:3566 +#: src/cryptsetup.c:3588 msgid "Reencryption hotzone checksums hash" msgstr "Хеш суме првере вруће зоне поновног шифровања" -#: src/cryptsetup.c:3567 +#: src/cryptsetup.c:3589 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:3605 src/veritysetup.c:505 src/integritysetup.c:595 msgid "[OPTION...] " msgstr "[ОПЦИЈА...] <радња> <посебност-радње>" -#: src/cryptsetup.c:3634 src/veritysetup.c:533 src/integritysetup.c:606 +#: src/cryptsetup.c:3656 src/veritysetup.c:539 src/integritysetup.c:606 msgid "Argument missing." msgstr "Недостаје аргумент <радња>." -#: src/cryptsetup.c:3703 src/veritysetup.c:564 src/integritysetup.c:637 +#: src/cryptsetup.c:3725 src/veritysetup.c:570 src/integritysetup.c:637 msgid "Unknown action." msgstr "Непозната радња." -#: src/cryptsetup.c:3713 +#: src/cryptsetup.c:3735 msgid "Options --refresh and --test-passphrase are mutually exclusive." msgstr "Опције „--refresh“ и „--test-passphrase“ се узајамно искључују." -#: src/cryptsetup.c:3718 +#: src/cryptsetup.c:3740 msgid "Option --deferred is allowed only for close command." msgstr "Опција „--deferred“ је допуштена само за наредбу затварања." -#: src/cryptsetup.c:3723 +#: src/cryptsetup.c:3745 msgid "Option --shared is allowed only for open of plain device." msgstr "Опција „--shared“ је допуштена само за отварање обичног уређаја." -#: src/cryptsetup.c:3728 src/integritysetup.c:654 +#: src/cryptsetup.c:3750 src/integritysetup.c:654 msgid "Option --allow-discards is allowed only for open operation." msgstr "Опција „--allow-discards“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3733 +#: src/cryptsetup.c:3755 msgid "Option --persistent is allowed only for open operation." msgstr "Опција „--persistent“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3738 +#: src/cryptsetup.c:3760 msgid "Option --serialize-memory-hard-pbkdf is allowed only for open operation." msgstr "Опција „--serialize-memory-hard-pbkdf“ је допуштена само за радњу отварања." -#: src/cryptsetup.c:3743 +#: src/cryptsetup.c:3765 msgid "Option --persistent is not allowed with --test-passphrase." msgstr "Опција „--persistent“ није допуштена са опцијом „--test-passphrase“." -#: src/cryptsetup.c:3753 +#: src/cryptsetup.c:3775 msgid "" "Option --key-size is allowed only for luksFormat, luksAddKey,\n" "open and benchmark actions. To limit read from keyfile use --keyfile-size=(bytes)." @@ -2835,255 +2848,259 @@ msgstr "" "Опција „--key-size“ је допуштена само за „luksFormat“, „luksAddKey“, отварање\n" "и оцењивање. Да ограничите читање из датотеке кључа користите „--keyfile-size=(бајтова)." -#: src/cryptsetup.c:3759 +#: src/cryptsetup.c:3781 msgid "Option --integrity is allowed only for luksFormat (LUKS2)." msgstr "Опција „--integrity“ је допуштена само за „luksFormat“ (ЛУКС2)." -#: src/cryptsetup.c:3764 +#: src/cryptsetup.c:3786 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:3792 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:3798 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:3803 src/cryptsetup_reencrypt.c:1708 msgid "Key size must be a multiple of 8 bits" msgstr "Величина кључа мора бити умножак од 8 бита" -#: src/cryptsetup.c:3787 src/cryptsetup_reencrypt.c:1394 +#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1394 #: src/cryptsetup_reencrypt.c:1713 msgid "Key slot is invalid." msgstr "Утор кључа није исправан." -#: src/cryptsetup.c:3794 +#: src/cryptsetup.c:3816 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.c:3823 src/veritysetup.c:582 src/integritysetup.c:663 #: src/cryptsetup_reencrypt.c:1687 msgid "Negative number for option not permitted." msgstr "Негативан број за опцију није допуштен." -#: src/cryptsetup.c:3805 +#: src/cryptsetup.c:3827 msgid "Only one --key-file argument is allowed." msgstr "Дозвољен је само један аргумент „--key-file“." -#: src/cryptsetup.c:3809 src/cryptsetup_reencrypt.c:1679 +#: src/cryptsetup.c:3831 src/cryptsetup_reencrypt.c:1679 #: src/cryptsetup_reencrypt.c:1717 msgid "Only one of --use-[u]random options is allowed." msgstr "Дозвољена је само једна опција „--use-[u]random“." -#: src/cryptsetup.c:3813 +#: src/cryptsetup.c:3835 msgid "Option --use-[u]random is allowed only for luksFormat." msgstr "Опција „--use-[u]random“ је допуштена само за „luksFormat“." -#: src/cryptsetup.c:3817 +#: src/cryptsetup.c:3839 msgid "Option --uuid is allowed only for luksFormat and luksUUID." msgstr "Опција „--uuid“ је допуштена само за „luksFormat“ и „luksUUID“." -#: src/cryptsetup.c:3821 +#: src/cryptsetup.c:3843 msgid "Option --align-payload is allowed only for luksFormat." msgstr "Опција „--align-payload“ је допуштена само за „luksFormat“." -#: src/cryptsetup.c:3825 +#: src/cryptsetup.c:3847 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:3852 msgid "Invalid LUKS2 metadata size specification." msgstr "Неисправна одредба величине ЛУКС2 метаподатака." -#: src/cryptsetup.c:3834 +#: src/cryptsetup.c:3856 msgid "Invalid LUKS2 keyslots size specification." msgstr "Неисправна одредба величине ЛУКС2 утора кључева." -#: src/cryptsetup.c:3838 +#: src/cryptsetup.c:3860 msgid "Options --align-payload and --offset cannot be combined." msgstr "Опције „--align-payload“ и „--offset“ се не могу комбиновати." -#: src/cryptsetup.c:3844 +#: src/cryptsetup.c:3866 msgid "Option --skip is supported only for open of plain and loopaes devices." msgstr "Опција „--skip“ је подржана само за отварање обичних и упетљаних уређаја." -#: src/cryptsetup.c:3851 +#: src/cryptsetup.c:3873 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:3879 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:3884 msgid "Option --tcrypt-hidden cannot be combined with --allow-discards." msgstr "Опција „--tcrypt-hidden“ не може бити обједињена са „--allow-discards“." -#: src/cryptsetup.c:3867 +#: src/cryptsetup.c:3889 msgid "Option --veracrypt is supported only for TCRYPT device type." msgstr "Опција „--veracrypt“ је подржана само за ТКРИПТ уређај." -#: src/cryptsetup.c:3873 +#: src/cryptsetup.c:3895 msgid "Invalid argument for parameter --veracrypt-pim supplied." msgstr "Достављен је неисправан аргумент за параметар „--veracrypt-pim“." -#: src/cryptsetup.c:3877 +#: src/cryptsetup.c:3899 msgid "Option --veracrypt-pim is supported only for VeraCrypt compatible devices." msgstr "Опција „--veracrypt-pim“ је подржана само за „VeraCrypt“ сагласне уређаје." -#: src/cryptsetup.c:3885 +#: src/cryptsetup.c:3907 msgid "Option --veracrypt-query-pim is supported only for VeraCrypt compatible devices." msgstr "Опција „--veracrypt-query-pim“ је подржана само за „VeraCrypt“ сагласне уређаје." -#: src/cryptsetup.c:3889 +#: src/cryptsetup.c:3911 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:3918 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:3923 src/cryptsetup.c:3961 msgid "Keyslot specification is required." msgstr "Одредба утора кључа је потребна." -#: src/cryptsetup.c:3906 src/cryptsetup_reencrypt.c:1693 +#: src/cryptsetup.c:3928 src/cryptsetup_reencrypt.c:1693 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:3933 src/cryptsetup_reencrypt.c:1698 msgid "PBKDF forced iterations cannot be combined with iteration time option." msgstr "„PBKDF“ присиљена понављања се не могу комбиновати са опцијом времена понављања." -#: src/cryptsetup.c:3917 +#: src/cryptsetup.c:3939 msgid "Sector size option is not supported for this command." msgstr "Опција величине сектора није подржана за ову наредбу." -#: src/cryptsetup.c:3929 +#: src/cryptsetup.c:3951 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:3956 msgid "Key size is required with --unbound option." msgstr "Величина кључа је потребна са опцијом „--unbound“." -#: src/cryptsetup.c:3944 +#: src/cryptsetup.c:3966 msgid "Option --unbound may be used only with luksAddKey and luksDump actions." msgstr "Опција „--unbound“ се може користити само са радњама „luksAddKey“ и „luksDump“." -#: src/cryptsetup.c:3949 +#: src/cryptsetup.c:3971 msgid "Option --refresh may be used only with open action." msgstr "Опција „--refresh“ се може користити само са радњом отварања." -#: src/cryptsetup.c:3960 +#: src/cryptsetup.c:3982 msgid "Cannot disable metadata locking." msgstr "Не могу да искључим закључавање метаподатака." -#: src/cryptsetup.c:3970 +#: src/cryptsetup.c:3992 msgid "Invalid max reencryption hotzone size specification." msgstr "Неисправна одредба највеће величине вруће зоне поновног шифровања." -#: src/cryptsetup.c:3978 src/cryptsetup_reencrypt.c:1722 +#: src/cryptsetup.c:4000 src/cryptsetup_reencrypt.c:1722 #: src/cryptsetup_reencrypt.c:1727 msgid "Invalid device size specification." msgstr "Неисправна одредба величине уређаја." -#: src/cryptsetup.c:3981 +#: src/cryptsetup.c:4003 msgid "Maximum device reduce size is 1 GiB." msgstr "Највећа величина смањења уређаја је 1 GiB." -#: src/cryptsetup.c:3984 src/cryptsetup_reencrypt.c:1733 +#: src/cryptsetup.c:4006 src/cryptsetup_reencrypt.c:1733 msgid "Reduce size must be multiple of 512 bytes sector." msgstr "Величина смањивања мора бити умножак одељка од 512 бајта." -#: src/cryptsetup.c:3989 +#: src/cryptsetup.c:4011 msgid "Invalid data size specification." msgstr "Неисправна одредба величине података." -#: src/cryptsetup.c:3994 +#: src/cryptsetup.c:4016 msgid "Reduce size overflow." msgstr "Прекорачење величине смањења." -#: src/cryptsetup.c:3998 +#: src/cryptsetup.c:4020 msgid "LUKS2 decryption requires option --header." msgstr "ЛУКС2 дешифровање захтева опцију „--header“." -#: src/cryptsetup.c:4002 +#: src/cryptsetup.c:4024 msgid "Device size must be multiple of 512 bytes sector." msgstr "Величина уређаја мора бити умножак одељка од 512 бајта." -#: src/cryptsetup.c:4006 +#: src/cryptsetup.c:4028 msgid "Options --reduce-device-size and --data-size cannot be combined." msgstr "Опције „--reduce-device-size“ и „--data-size“ се не могу комбиновати." -#: src/cryptsetup.c:4010 +#: src/cryptsetup.c:4032 msgid "Options --device-size and --size cannot be combined." msgstr "Опције „--device-size“ и „--size“ се не могу комбиновати." -#: src/veritysetup.c:66 +#: src/cryptsetup.c:4036 +msgid "Options --keyslot-cipher and --keyslot-key-size must be used together." +msgstr "Опције „--keyslot-cipher“ и „--keyslot-key-size“ се морају користити заједно." + +#: src/veritysetup.c:67 msgid "Invalid salt string specified." msgstr "Наведена је неисправна ниска присолка." -#: src/veritysetup.c:97 +#: src/veritysetup.c:98 #, c-format msgid "Cannot create hash image %s for writing." msgstr "Не могу да направим хеш слику „%s“ ради уписа." -#: src/veritysetup.c:107 +#: src/veritysetup.c:108 #, c-format msgid "Cannot create FEC image %s for writing." msgstr "Не могу да направим „FEC“ слику „%s“ ради уписа." -#: src/veritysetup.c:179 +#: src/veritysetup.c:182 msgid "Invalid root hash string specified." msgstr "Наведена је неисправна ниска хеша корена." -#: src/veritysetup.c:187 +#: src/veritysetup.c:190 #, c-format msgid "Invalid signature file %s." msgstr "Неисправна датотека потписа „%s“." -#: src/veritysetup.c:194 +#: src/veritysetup.c:197 #, c-format msgid "Cannot read signature file %s." msgstr "Не могу да прочитам датотеку потписа „%s“." -#: src/veritysetup.c:392 +#: src/veritysetup.c:397 msgid " " msgstr "<уређај_података> <уређај_хеша>" -#: src/veritysetup.c:392 src/integritysetup.c:479 +#: src/veritysetup.c:397 src/integritysetup.c:479 msgid "format device" msgstr "форматира уређај" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid " " msgstr "<уређај_података> <уређај_хеша> <хеш_корена>" -#: src/veritysetup.c:393 +#: src/veritysetup.c:398 msgid "verify device" msgstr "проверава уређај" -#: src/veritysetup.c:394 +#: src/veritysetup.c:399 msgid " " msgstr "<уређај_података> <назив> <уређај_хеша> <хеш_корена>" -#: src/veritysetup.c:396 src/integritysetup.c:482 +#: src/veritysetup.c:401 src/integritysetup.c:482 msgid "show active device status" msgstr "показује стање радног уређаја" -#: src/veritysetup.c:397 +#: src/veritysetup.c:402 msgid "" msgstr "<уређај_хеша>" -#: src/veritysetup.c:397 src/integritysetup.c:483 +#: src/veritysetup.c:402 src/integritysetup.c:483 msgid "show on-disk information" msgstr "приказује податке на-диску" -#: src/veritysetup.c:416 +#: src/veritysetup.c:421 #, c-format msgid "" "\n" @@ -3098,7 +3115,7 @@ msgstr "" "<уређај_хеша> јесте уређај који садржи податке проверавања\n" "<хеш_корена> хеш кореног чвора на <уређају_хеша>\n" -#: src/veritysetup.c:423 +#: src/veritysetup.c:428 #, c-format msgid "" "\n" @@ -3109,102 +3126,110 @@ msgstr "" "Основни преведени параметри дм-тачности:\n" "\tХеш: %s, Блок података (бајта): %u, Блок хеша (бајта): %u, Величина присолка: %u, Запис хеша: %u\n" -#: src/veritysetup.c:466 +#: src/veritysetup.c:471 msgid "Do not use verity superblock" msgstr "Не користи суперблок тачности" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "Format type (1 - normal, 0 - original Chrome OS)" msgstr "Врста записа (1 — обично, 0 — изворни Хром ОС)" -#: src/veritysetup.c:467 +#: src/veritysetup.c:472 msgid "number" msgstr "број" -#: src/veritysetup.c:468 +#: src/veritysetup.c:473 msgid "Block size on the data device" msgstr "Величина блока на уређају података" -#: src/veritysetup.c:469 +#: src/veritysetup.c:474 msgid "Block size on the hash device" msgstr "Величина блока на уређају хеша" -#: src/veritysetup.c:470 +#: src/veritysetup.c:475 msgid "FEC parity bytes" msgstr "Бајтови „FEC“ парности" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "The number of blocks in the data file" msgstr "Број блокова у датотеци података" -#: src/veritysetup.c:471 +#: src/veritysetup.c:476 msgid "blocks" msgstr "блокови" -#: src/veritysetup.c:472 +#: src/veritysetup.c:477 msgid "Path to device with error correction data" msgstr "Путања до уређаја са подацима исправке грешке" -#: src/veritysetup.c:472 src/integritysetup.c:549 +#: src/veritysetup.c:477 src/integritysetup.c:549 msgid "path" msgstr "путања" -#: src/veritysetup.c:473 +#: src/veritysetup.c:478 msgid "Starting offset on the hash device" msgstr "Почетни померај на уређају хеша" -#: src/veritysetup.c:474 +#: src/veritysetup.c:479 msgid "Starting offset on the FEC device" msgstr "Почетни померај на „FEC“ уређају" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "Hash algorithm" msgstr "Алгоритам хеша" -#: src/veritysetup.c:475 +#: src/veritysetup.c:480 msgid "string" msgstr "ниска" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "Salt" msgstr "Присолак" -#: src/veritysetup.c:476 +#: src/veritysetup.c:481 msgid "hex string" msgstr "ниска хеша" -#: src/veritysetup.c:478 +#: src/veritysetup.c:483 msgid "Path to root hash signature file" msgstr "Путања до датотеке потписа хеша корена" -#: src/veritysetup.c:479 +#: src/veritysetup.c:484 msgid "Restart kernel if corruption is detected" msgstr "Поново покреће језгро ако је откривено оштећење" -#: src/veritysetup.c:480 +#: src/veritysetup.c:485 +msgid "Panic kernel if corruption is detected" +msgstr "Успаничи језгро ако је откривено оштећење" + +#: src/veritysetup.c:486 msgid "Ignore corruption, log it only" msgstr "Занемарује оштећење, само га бележи у дневник" -#: src/veritysetup.c:481 +#: src/veritysetup.c:487 msgid "Do not verify zeroed blocks" msgstr "Не проверава нулиране блокове" -#: src/veritysetup.c:482 +#: src/veritysetup.c:488 msgid "Verify data block only the first time it is read" msgstr "Проверава блок података само приликом првог читања" -#: src/veritysetup.c:582 +#: src/veritysetup.c:588 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:593 msgid "Option --root-hash-signature can be used only for open operation." msgstr "Опција „--root-hash-signature“ се може користити само за радњу отварања." -#: src/veritysetup.c:592 +#: src/veritysetup.c:598 msgid "Option --ignore-corruption and --restart-on-corruption cannot be used together." msgstr "Опције „--ignore-corruption“ и „--restart-on-corruption“ се не могу користити заједно." +#: src/veritysetup.c:603 +msgid "Option --panic-on-corruption and --restart-on-corruption cannot be used together." +msgstr "Опције „--panic-on-corruption“ и „--restart-on-corruption“ се не могу користити заједно." + #: src/integritysetup.c:84 src/utils_password.c:305 #, c-format msgid "Cannot read keyfile %s." @@ -3866,6 +3891,9 @@ msgstr "" msgid "Failed to write JSON file." msgstr "Нисам успео да упишем „JSON“ датотеку." +#~ msgid "Wrong key size." +#~ msgstr "Погрешна величина кључа." + #~ msgid "Parameter --refresh is only allowed with open or refresh commands." #~ msgstr "Параметар „--refresh“ је дозвољен само са наредбама „open“ или „refresh“." From 07a06f2f40388d4c49862588e84fbb33c5d56e56 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 7 Feb 2021 11:28:59 +0100 Subject: [PATCH 050/149] Set 2.3.5-rc0 version. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4c62c75a..5826ac24 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.67]) -AC_INIT([cryptsetup],[2.3.4]) +AC_INIT([cryptsetup],[2.3.5-rc0]) dnl library version from ..[-] LIBCRYPTSETUP_VERSION=$(echo $PACKAGE_VERSION | cut -f1 -d-) From 15df5904f21755103de79367e1f8f6ead13aa387 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 29 Aug 2020 12:21:32 +0200 Subject: [PATCH 051/149] Fix a memleak in blockwise test. --- tests/unit-utils-io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit-utils-io.c b/tests/unit-utils-io.c index ff5be52e..9e59234b 100644 --- a/tests/unit-utils-io.c +++ b/tests/unit-utils-io.c @@ -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); From 1a819257641733bfe66e28f76585b7871517bde0 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 29 Aug 2020 13:59:42 +0200 Subject: [PATCH 052/149] Fix disaplay of dm-integrity recalculating sector in dump command. Fixes: #578. --- lib/integrity/integrity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/integrity/integrity.c b/lib/integrity/integrity.c index 86305ce4..eb10288e 100644 --- a/lib/integrity/integrity.c +++ b/lib/integrity/integrity.c @@ -92,7 +92,7 @@ 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", From 5518198f97f9125f97c4c6fb8818ed2c38d1f77f Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 29 Aug 2020 15:51:20 +0200 Subject: [PATCH 053/149] Always store dm-verity hash algorithm in superblock in lowercase. Fixes: #586. --- lib/verity/verity.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/verity/verity.c b/lib/verity/verity.c index af31784d..3f294c50 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -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, @@ -186,9 +194,13 @@ 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; + strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)); algorithm[sizeof(sb.algorithm)-1] = '\0'; - strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)-1); + _to_lower(algorithm); + memcpy(sb.salt, params->salt, params->salt_size); memcpy(sb.uuid, uuid, sizeof(sb.uuid)); From 33cc4739da693d87f9c1ad9686539791f36c4eae Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 6 Sep 2020 10:41:49 +0200 Subject: [PATCH 054/149] Print warning if msgfmt utility from gettext is missing. User have to install gettext package or manually disable translation using --disable-nls. Also remove links to GNU packages ftp, all of these should by provided by native distro packaging systems. Fixes: #591. --- autogen.sh | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/autogen.sh b/autogen.sh index c6719f62..ffe5a9e6 100755 --- a/autogen.sh +++ b/autogen.sh @@ -9,16 +9,23 @@ DIE=0 (autopoint --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have autopoint installed." - echo "Download the appropriate package for your distribution," - echo "or see http://www.gnu.org/software/gettext" + echo "Download the appropriate package for your distribution." DIE=1 } + +(msgfmt --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Warning**: You should have gettext installed." + echo "Download the appropriate package for your distribution." + echo "To disable translation, you can also use --disable-nls" + echo "configure option." +} + (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo - echo "**Error**: You must have autoconf installed to." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + echo "**Error**: You must have autoconf installed." + echo "Download the appropriate package for your distribution." DIE=1 } @@ -26,8 +33,7 @@ DIE=0 (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have libtool installed." - echo "Get ftp://ftp.gnu.org/pub/gnu/" - echo "(or a newer version if it is available)" + echo "Download the appropriate package for your distribution." DIE=1 } } @@ -35,8 +41,7 @@ DIE=0 (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have automake installed." - echo "Get ftp://ftp.gnu.org/pub/gnu/" - echo "(or a newer version if it is available)" + echo "Download the appropriate package for your distribution." DIE=1 NO_AUTOMAKE=yes } @@ -47,8 +52,6 @@ test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing aclocal. The version of automake" echo "installed doesn't appear recent enough." - echo "Get ftp://ftp.gnu.org/pub/gnu/" - echo "(or a newer version if it is available)" DIE=1 } From dbb80e41c7311c3105e75c6c349d7c3d745269fd Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Mon, 7 Sep 2020 16:31:20 +0200 Subject: [PATCH 055/149] Do not print opt_io_size warning needlessly. In fallback path min_io_size and opt_io_size could be same and the warning was confusing. --- lib/utils_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils_device.c b/lib/utils_device.c index ddbe8362..32497f15 100644 --- a/lib/utils_device.c +++ b/lib/utils_device.c @@ -528,7 +528,7 @@ void device_topology_alignment(struct crypt_device *cd, if ((temp_alignment < (unsigned long)opt_io_size) && !((unsigned long)opt_io_size % temp_alignment) && !MISALIGNED_4K(opt_io_size)) temp_alignment = (unsigned long)opt_io_size; - else if (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 */ From 7dbd007ac1d7a03a82793daa0a4dfb342f8b8571 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 19 Sep 2020 22:05:42 +0200 Subject: [PATCH 056/149] Print a visible error if requesting resize on unsupported format. Fixes: #571. --- lib/setup.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/setup.c b/lib/setup.c index d8e665c0..2ec5baca 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -2770,6 +2770,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); From e5e09d889bbe1477718cc450c2a33c0055befd89 Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Wed, 16 Sep 2020 14:54:21 -0700 Subject: [PATCH 057/149] Include correct type definition in .h files Right now, cryptsetup makes an attempt to include the correct definitions in all of its header files, allowing the headers to compile regardless of the context in which they are included. A few files were missed, this change fixes them by adding the minimal set of #includes needed to get them to compile. Signed-off-by: Joe Richey --- lib/luks2/luks2.h | 2 ++ lib/utils_blkid.h | 2 ++ lib/utils_dm.h | 3 ++- lib/utils_storage_wrappers.h | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h index 5b29a627..65d2eeeb 100644 --- a/lib/luks2/luks2.h +++ b/lib/luks2/luks2.h @@ -23,6 +23,8 @@ #define _CRYPTSETUP_LUKS2_ONDISK_H #include +#include +#include #include "libcryptsetup.h" diff --git a/lib/utils_blkid.h b/lib/utils_blkid.h index ca50da70..d03d4a50 100644 --- a/lib/utils_blkid.h +++ b/lib/utils_blkid.h @@ -21,6 +21,8 @@ #ifndef _UTILS_BLKID_H #define _UTILS_BLKID_H +#include + struct blkid_handle; typedef enum { PRB_OK = 0, PRB_EMPTY, PRB_AMBIGUOUS, PRB_FAIL } blk_probe_status; diff --git a/lib/utils_dm.h b/lib/utils_dm.h index 22add180..0cd543b0 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -25,7 +25,8 @@ #define _UTILS_DM_H /* device-mapper library helpers */ -#include +#include +#include struct crypt_device; struct volume_key; diff --git a/lib/utils_storage_wrappers.h b/lib/utils_storage_wrappers.h index f360955b..2519c0af 100644 --- a/lib/utils_storage_wrappers.h +++ b/lib/utils_storage_wrappers.h @@ -22,6 +22,9 @@ #ifndef _UTILS_STORAGE_WRAPPERS_H #define _UTILS_STORAGE_WRAPPERS_H +#include +#include + struct crypt_storage_wrapper; struct device; struct volume_key; From fa5d46592e8127628041e95c852bea204bd6976a Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Thu, 17 Sep 2020 15:56:52 +0200 Subject: [PATCH 058/149] bitlk: Try all keyslots even if some checks fails for passphrase We can't easily distinguish between a passphrase and other protectors like recovery passphrase or startup key during activation so we can't stop when attempted passphrase activation fails because a binary startup key can't be conveted to UTF-16 during KDF. --- lib/bitlk/bitlk.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index ea3d0c5b..57a1652f 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -1000,12 +1000,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 happend, 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 happend, 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; From 7c23bdb868c6f3a9f518a7119e30c3acccd3d12b Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Thu, 17 Sep 2020 16:01:05 +0200 Subject: [PATCH 059/149] bitlk: Add support for startup key protected VMKs (keyslots) Fixes: #588 --- lib/bitlk/bitlk.c | 165 +++++++++++++++++++++++++++++++++++++- tests/bitlk-compat-test | 25 ++++++ tests/bitlk-images.tar.xz | Bin 249936 -> 269480 bytes 3 files changed, 188 insertions(+), 2 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 57a1652f..941d6f4a 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -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); @@ -838,6 +858,134 @@ 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; + /* 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; + } + + return 0; +} + +/* 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; + int start = 0; + int end = 0; + int r = 0; + + if (passwordLen < BITLK_BEK_FILE_HEADER_LEN) + return 0; + + 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 0; + + 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; + } + + start = BITLK_BEK_FILE_HEADER_LEN; + end = bek_header.metadata_size; + while (end - start > 2) { + /* size of this entry */ + memcpy(&key_entry_size, password + start, 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); + break; + } + + /* type and value of this entry */ + memcpy(&key_entry_type, password + start + sizeof(key_entry_size), sizeof(key_entry_type)); + memcpy(&key_entry_value, + password + 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); + + if (key_entry_type == BITLK_ENTRY_TYPE_STARTUP_KEY && key_entry_value == BITLK_ENTRY_VALUE_EXTERNAL_KEY) { + r = parse_external_key_entry(cd, password, + start + BITLK_ENTRY_HEADER_LEN + BITLK_STARTUP_KEY_HEADER_LEN, + end, su_key); + if (r < 0) + return r; + } 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; + } + + start += key_entry_size; + } + + if (*su_key == NULL) + log_dbg(cd, "Failed to get VMK from matching BEK key file."); + + return 0; +} + static int bitlk_kdf(struct crypt_device *cd, const char *password, size_t passwordLen, @@ -1024,8 +1172,21 @@ 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; + } + if (vmk_dec_key == NULL){ + /* r = 0 but no key -> given passphrase is not a recovery startup key */ + r = -EPERM; + 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) diff --git a/tests/bitlk-compat-test b/tests/bitlk-compat-test index 38efd0bf..26456098 100755 --- a/tests/bitlk-compat-test +++ b/tests/bitlk-compat-test @@ -59,6 +59,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 ") @@ -117,4 +121,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 diff --git a/tests/bitlk-images.tar.xz b/tests/bitlk-images.tar.xz index e3f07d766897f21ea545fc2445de7edcecda1436..ce983e904d2e41fc52418efdb0dd5d0f40571e1b 100644 GIT binary patch literal 269480 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

|Qjz*q6KBLfVr|3V4cE7!Bmg3;woo_; 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 z

    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 FSz2Dxzd-;1 From e2b4479543ead9ea5df6e7f93e870e1d23adc238 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 21 Sep 2020 20:52:12 +0200 Subject: [PATCH 060/149] bitlk: Fix a compiler warning. --- lib/bitlk/bitlk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 941d6f4a..212ab7d0 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -648,7 +648,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; From efa7c4574ceece1c747323d26e0ff27a75bb2e98 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Tue, 22 Sep 2020 13:32:10 +0200 Subject: [PATCH 061/149] bitlk: Fix test image for startup key We zero data parts of the test images to make them as small as possible and for the latest startup key image I deleted bigger portion of the NTFS header by accident which caused older blkid on CentOS/RHEL 6 to not identify the NTFS filesystem on the cleartext device. --- tests/bitlk-images.tar.xz | Bin 269480 -> 271624 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/bitlk-images.tar.xz b/tests/bitlk-images.tar.xz index ce983e904d2e41fc52418efdb0dd5d0f40571e1b..eea33ed26fc467da286374dae6a987fbd415cec1 100644 GIT binary patch literal 271624 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⩔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%0DZ0(fKYsh_mhIZ}%9dpj} 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 O#Ao{g000001X)@q-Kk>$ literal 269480 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
      : 401670: 41 54 push %r12 401672: bf f0 03 00 00 mov $0x3f0,%edi 401677: 55 push %rbp 401678: 48 83 ec 08 sub $0x8,%rsp 40167c: e8 ff 4d 01 00 callq 416480 <__libc_malloc> 401681: 48 85 c0 test %rax,%rax 401684: 74 2f je 4016b5 401686: 48 c7 00 e8 03 00 00 movq $0x3e8,(%rax) 40168d: 4c 8d 60 08 lea 0x8(%rax),%r12 401691: 48 89 c5 mov %rax,%rbp 401694: be e8 03 00 00 mov $0x3e8,%esi 401699: 4c 89 e7 mov %r12,%rdi 40169c: e8 4f 76 01 00 callq 418cf0 4016a1: 48 8b 75 00 mov 0x0(%rbp),%rsi 4016a5: 4c 89 e7 mov %r12,%rdi 4016a8: e8 43 76 01 00 callq 418cf0 4016ad: 48 89 ef mov %rbp,%rdi 4016b0: e8 3b 54 01 00 callq 416af0 <__free> 4016b5: 48 83 c4 08 add $0x8,%rsp 4016b9: 31 c0 xor %eax,%eax 4016bb: 5d pop %rbp 4016bc: 41 5c pop %r12 4016be: c3 retq 4016bf: 90 nop You can see that the memory allocation and explicit_bzero calls were not optimized away. But the size assignment disappeared. Compiling without -O3 or without -flto does not inline the calls and keeps the assignment. Also the shared library shipped with my distribution has the assignment. --- lib/utils_safe_memory.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/utils_safe_memory.c b/lib/utils_safe_memory.c index 8c1fb5cb..6908ea42 100644 --- a/lib/utils_safe_memory.c +++ b/lib/utils_safe_memory.c @@ -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); } From 8d856d4e1739bba0a1cd058b5da43b9cc97ed5b8 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 21 Dec 2020 20:38:08 +0100 Subject: [PATCH 080/149] Add lore.kernel.org list archive link. --- README | 1 + README.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README b/README index f663509d..1e7973f9 100644 --- a/README +++ b/README @@ -15,6 +15,7 @@ MAILING LIST: E-MAIL: dm-crypt@saout.de URL: https://www.saout.de/mailman/listinfo/dm-crypt + ARCHIVE: https://lore.kernel.org/dm-crypt/ DOWNLOAD: diff --git a/README.md b/README.md index b4130672..b8b8d8cd 100644 --- a/README.md +++ b/README.md @@ -76,5 +76,5 @@ For cryptsetup and LUKS related questions, please use the dm-crypt mailing list, If you want to subscribe just send an empty mail to [dm-crypt-subscribe@saout.de](mailto:dm-crypt-subscribe@saout.de). -You can also browse [list archive](https://www.saout.de/pipermail/dm-crypt/) or read it through -[web interface](https://marc.info/?l=dm-crypt). +You can also browse [list archive](https://www.saout.de/pipermail/dm-crypt/) or read and search it through +[web interface on lore.kernel.org](https://lore.kernel.org/dm-crypt/) or alternatively on [marc.info](https://marc.info/?l=dm-crypt). From f82c1bf90fecb9218233134dfe79bedd59fb4ba5 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 28 Dec 2020 19:47:00 +0100 Subject: [PATCH 081/149] Remove obsolete tpm-luks project link from FAQ. --- FAQ | 4 ---- 1 file changed, 4 deletions(-) diff --git a/FAQ b/FAQ index 3c7dcadb..16842205 100644 --- a/FAQ +++ b/FAQ @@ -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? From 7d4d1baaa7c6811712ba73eed254e5eb05be0279 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 29 Dec 2020 23:13:39 +0100 Subject: [PATCH 082/149] Fix some formatting and typos in man page. --- man/cryptsetup.8 | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 59897430..fc5b3345 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -1,4 +1,4 @@ -.TH CRYPTSETUP "8" "January 2019" "cryptsetup" "Maintenance Commands" +.TH CRYPTSETUP "8" "December 2020" "cryptsetup" "Maintenance Commands" .SH NAME cryptsetup - manage plain dm-crypt and LUKS encrypted volumes .SH SYNOPSIS @@ -280,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 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. +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. @@ -836,8 +838,7 @@ lines are always prefixed by '#'. If \-\-debug\-json is used, additional LUKS2 JSON data structures are printed. .TP .B "\-\-type -Specifies required device type, for more info -read \f BASIC ACTIONS\fR section. +Specifies required device type, for more info read \fIBASIC ACTIONS\fR section. .TP .B "\-\-hash, \-h \fI\fR" Specifies the passphrase hash for \fIopen\fR (for plain and @@ -1447,7 +1448,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). @@ -1457,7 +1459,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 " -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 " This option can be used to set an upper limit on the size of reencryption area (hotzone). @@ -1466,17 +1469,21 @@ size may be less than specified due to other limitations (free space in k available memory). .TP .B "\-\-reduce\-device\-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 sectors of will be used to properly initialize device reencryption. That means any -data at last sectors will be lost. +Last sectors of will be used to properly initialize device reencryption. +That means any data at last sectors will be lost. -It could be useful if you added some space to underlying partition or logical volume (so last sectors contains no data). +It could be useful if you added some space to underlying partition or logical volume +(so last 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 ). +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 ). -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. @@ -1500,7 +1507,8 @@ sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBa 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. +.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 @@ -1749,5 +1757,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. From 178bc9ee39166dc3b68cdefbfd5f7afd4da93b90 Mon Sep 17 00:00:00 2001 From: Arno Wagner Date: Tue, 12 Jan 2021 12:14:27 +0000 Subject: [PATCH 083/149] Update FAQ: Clarified statement about block sizes in 5.16 --- FAQ | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FAQ b/FAQ index 16842205..d829ad35 100644 --- a/FAQ +++ b/FAQ @@ -1608,8 +1608,9 @@ A. Contributors cryptsetup -c aes-xts-plain64 luksFormat - 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? From d8bbfb118b429b84eeb237064d78530729191e6a Mon Sep 17 00:00:00 2001 From: Lars Wendler Date: Mon, 11 Jan 2021 13:43:25 +0100 Subject: [PATCH 084/149] cryptsetup.8: Fix no_write_workqueue option name It's called --perf-no_write_workqueue Signed-off-by: Lars Wendler --- man/cryptsetup.8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index fc5b3345..7d6f102f 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -146,7 +146,7 @@ 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, \-\-perf-no_read_workqueue, \-\-no_write_workqueue +\-\-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 From 7cca38632f7a5a54534dc745ff7469ad1a5eca6b Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Mon, 18 Jan 2021 19:00:24 +0100 Subject: [PATCH 085/149] Add pedantic check for key helpers arguments. --- src/utils_password.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/utils_password.c b/src/utils_password.c index 55c1343f..c9127afc 100644 --- a/src/utils_password.c +++ b/src/utils_password.c @@ -293,7 +293,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 +323,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); From 4c350f4d725d50ad44a1cc6cf9bde5d9fc0cd8e9 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Mon, 25 Jan 2021 14:22:01 +0000 Subject: [PATCH 086/149] verity: improve crypt_activate_by_signed_key debug log Check if a signature is actually available before logging that the volume is being activated with a signed key. --- lib/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/setup.c b/lib/setup.c index 2ec5baca..448a689f 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -4416,7 +4416,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.")); From 255464b0ae223bc70d36e6a3d1c4711f28f75fdf Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Mon, 25 Jan 2021 14:26:24 +0000 Subject: [PATCH 087/149] verity: fix strncpy boundary check compiler warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit lib/verity/verity.c: In function ‘VERITY_write_sb’: lib/verity/verity.c:200:2: warning: ‘strncpy’ specified bound 32 equals destination size [-Wstringop-truncation] strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)); --- lib/verity/verity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/verity/verity.c b/lib/verity/verity.c index 3f294c50..f46b1e20 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -197,7 +197,7 @@ int VERITY_write_sb(struct crypt_device *cd, /* Kernel always use lower-case */ algorithm = (char *)sb.algorithm; - strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)); + strncpy(algorithm, params->hash_name, sizeof(sb.algorithm)-1); algorithm[sizeof(sb.algorithm)-1] = '\0'; _to_lower(algorithm); From a757d84b91ab1a52b48bfbf46dfbd60884f612b8 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 25 Jan 2021 22:00:25 +0100 Subject: [PATCH 088/149] Update Copyright year. --- docs/examples/crypt_log_usage.c | 2 +- docs/examples/crypt_luks_usage.c | 2 +- lib/bitlk/bitlk.c | 6 +++--- lib/bitlk/bitlk.h | 6 +++--- lib/crypt_plain.c | 4 ++-- lib/crypto_backend/argon2_generic.c | 4 ++-- lib/crypto_backend/cipher_check.c | 4 ++-- lib/crypto_backend/cipher_generic.c | 4 ++-- lib/crypto_backend/crypto_backend.h | 4 ++-- lib/crypto_backend/crypto_backend_internal.h | 4 ++-- lib/crypto_backend/crypto_cipher_kernel.c | 4 ++-- lib/crypto_backend/crypto_gcrypt.c | 4 ++-- lib/crypto_backend/crypto_kernel.c | 4 ++-- lib/crypto_backend/crypto_nettle.c | 4 ++-- lib/crypto_backend/crypto_nss.c | 4 ++-- lib/crypto_backend/crypto_openssl.c | 4 ++-- lib/crypto_backend/crypto_storage.c | 2 +- lib/crypto_backend/pbkdf2_generic.c | 4 ++-- lib/crypto_backend/pbkdf_check.c | 4 ++-- lib/integrity/integrity.c | 2 +- lib/integrity/integrity.h | 2 +- lib/internal.h | 4 ++-- lib/libcryptsetup.h | 4 ++-- lib/libdevmapper.c | 4 ++-- lib/loopaes/loopaes.c | 4 ++-- lib/loopaes/loopaes.h | 4 ++-- lib/luks1/af.c | 2 +- lib/luks1/af.h | 2 +- lib/luks1/keyencryption.c | 4 ++-- lib/luks1/keymanage.c | 4 ++-- lib/luks1/luks.h | 2 +- lib/luks2/luks2.h | 4 ++-- lib/luks2/luks2_digest.c | 4 ++-- lib/luks2/luks2_digest_pbkdf2.c | 4 ++-- lib/luks2/luks2_disk_metadata.c | 4 ++-- lib/luks2/luks2_internal.h | 4 ++-- lib/luks2/luks2_json_format.c | 4 ++-- lib/luks2/luks2_json_metadata.c | 6 +++--- lib/luks2/luks2_keyslot.c | 4 ++-- lib/luks2/luks2_keyslot_luks2.c | 4 ++-- lib/luks2/luks2_keyslot_reenc.c | 4 ++-- lib/luks2/luks2_luks1_convert.c | 6 +++--- lib/luks2/luks2_reencrypt.c | 4 ++-- lib/luks2/luks2_segment.c | 4 ++-- lib/luks2/luks2_token.c | 4 ++-- lib/luks2/luks2_token_keyring.c | 4 ++-- lib/random.c | 2 +- lib/setup.c | 4 ++-- lib/tcrypt/tcrypt.c | 4 ++-- lib/tcrypt/tcrypt.h | 4 ++-- lib/utils.c | 4 ++-- lib/utils_benchmark.c | 4 ++-- lib/utils_blkid.c | 2 +- lib/utils_blkid.h | 2 +- lib/utils_crypt.c | 4 ++-- lib/utils_crypt.h | 4 ++-- lib/utils_device.c | 4 ++-- lib/utils_device_locking.c | 4 ++-- lib/utils_device_locking.h | 4 ++-- lib/utils_devpath.c | 4 ++-- lib/utils_dm.h | 4 ++-- lib/utils_fips.c | 2 +- lib/utils_fips.h | 2 +- lib/utils_io.c | 4 ++-- lib/utils_io.h | 4 ++-- lib/utils_keyring.c | 4 ++-- lib/utils_keyring.h | 4 ++-- lib/utils_loop.c | 4 ++-- lib/utils_loop.h | 4 ++-- lib/utils_pbkdf.c | 4 ++-- lib/utils_safe_memory.c | 4 ++-- lib/utils_storage_wrappers.c | 2 +- lib/utils_storage_wrappers.h | 2 +- lib/utils_wipe.c | 4 ++-- lib/verity/rs.h | 2 +- lib/verity/rs_decode_char.c | 2 +- lib/verity/rs_encode_char.c | 2 +- lib/verity/verity.c | 2 +- lib/verity/verity.h | 2 +- lib/verity/verity_fec.c | 2 +- lib/verity/verity_hash.c | 2 +- lib/volumekey.c | 2 +- man/cryptsetup-reencrypt.8 | 6 +++--- man/cryptsetup.8 | 6 +++--- man/integritysetup.8 | 6 +++--- man/veritysetup.8 | 6 +++--- misc/luks2_keyslot_example/keyslot_test.c | 2 +- misc/luks2_keyslot_example/keyslot_test_remote_pass.c | 2 +- src/cryptsetup.c | 4 ++-- src/cryptsetup.h | 4 ++-- src/cryptsetup_reencrypt.c | 4 ++-- src/integritysetup.c | 4 ++-- src/utils_blockdev.c | 4 ++-- src/utils_luks2.c | 6 +++--- src/utils_password.c | 4 ++-- src/utils_tools.c | 4 ++-- src/veritysetup.c | 4 ++-- tests/api-test-2.c | 6 +++--- tests/api-test.c | 6 +++--- tests/api_test.h | 6 +++--- tests/crypto-vectors.c | 2 +- tests/differ.c | 2 +- tests/test_utils.c | 4 ++-- tests/unit-utils-io.c | 2 +- 104 files changed, 192 insertions(+), 192 deletions(-) diff --git a/docs/examples/crypt_log_usage.c b/docs/examples/crypt_log_usage.c index d8364af3..b0cdd56f 100644 --- a/docs/examples/crypt_log_usage.c +++ b/docs/examples/crypt_log_usage.c @@ -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 diff --git a/docs/examples/crypt_luks_usage.c b/docs/examples/crypt_luks_usage.c index 7299a1c8..f99bfc7d 100644 --- a/docs/examples/crypt_luks_usage.c +++ b/docs/examples/crypt_luks_usage.c @@ -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 diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index c054d92b..a425b2bc 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -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 diff --git a/lib/bitlk/bitlk.h b/lib/bitlk/bitlk.h index a7848837..10815194 100644 --- a/lib/bitlk/bitlk.h +++ b/lib/bitlk/bitlk.h @@ -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 diff --git a/lib/crypt_plain.c b/lib/crypt_plain.c index 77d72fca..180d08a6 100644 --- a/lib/crypt_plain.c +++ b/lib/crypt_plain.c @@ -2,8 +2,8 @@ * cryptsetup plain device helper functions * * Copyright (C) 2004 Jana Saout - * 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 diff --git a/lib/crypto_backend/argon2_generic.c b/lib/crypto_backend/argon2_generic.c index 64cf10bd..d8a5b214 100644 --- a/lib/crypto_backend/argon2_generic.c +++ b/lib/crypto_backend/argon2_generic.c @@ -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 diff --git a/lib/crypto_backend/cipher_check.c b/lib/crypto_backend/cipher_check.c index 2119d97d..70515ee5 100644 --- a/lib/crypto_backend/cipher_check.c +++ b/lib/crypto_backend/cipher_check.c @@ -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 diff --git a/lib/crypto_backend/cipher_generic.c b/lib/crypto_backend/cipher_generic.c index 0ddec59b..bce36e01 100644 --- a/lib/crypto_backend/cipher_generic.c +++ b/lib/crypto_backend/cipher_generic.c @@ -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 diff --git a/lib/crypto_backend/crypto_backend.h b/lib/crypto_backend/crypto_backend.h index e44fc6f2..5a49e709 100644 --- a/lib/crypto_backend/crypto_backend.h +++ b/lib/crypto_backend/crypto_backend.h @@ -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 diff --git a/lib/crypto_backend/crypto_backend_internal.h b/lib/crypto_backend/crypto_backend_internal.h index 6128cd4e..9d1bfb26 100644 --- a/lib/crypto_backend/crypto_backend_internal.h +++ b/lib/crypto_backend/crypto_backend_internal.h @@ -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 diff --git a/lib/crypto_backend/crypto_cipher_kernel.c b/lib/crypto_backend/crypto_cipher_kernel.c index b2a92b51..df231758 100644 --- a/lib/crypto_backend/crypto_cipher_kernel.c +++ b/lib/crypto_backend/crypto_cipher_kernel.c @@ -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 diff --git a/lib/crypto_backend/crypto_gcrypt.c b/lib/crypto_backend/crypto_gcrypt.c index 4811f212..906a5545 100644 --- a/lib/crypto_backend/crypto_gcrypt.c +++ b/lib/crypto_backend/crypto_gcrypt.c @@ -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 diff --git a/lib/crypto_backend/crypto_kernel.c b/lib/crypto_backend/crypto_kernel.c index bb80d735..dc3901a4 100644 --- a/lib/crypto_backend/crypto_kernel.c +++ b/lib/crypto_backend/crypto_kernel.c @@ -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 diff --git a/lib/crypto_backend/crypto_nettle.c b/lib/crypto_backend/crypto_nettle.c index c2ec305d..3cffba92 100644 --- a/lib/crypto_backend/crypto_nettle.c +++ b/lib/crypto_backend/crypto_nettle.c @@ -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 diff --git a/lib/crypto_backend/crypto_nss.c b/lib/crypto_backend/crypto_nss.c index f141432e..554daa11 100644 --- a/lib/crypto_backend/crypto_nss.c +++ b/lib/crypto_backend/crypto_nss.c @@ -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 diff --git a/lib/crypto_backend/crypto_openssl.c b/lib/crypto_backend/crypto_openssl.c index 2edec7bb..386251fe 100644 --- a/lib/crypto_backend/crypto_openssl.c +++ b/lib/crypto_backend/crypto_openssl.c @@ -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 diff --git a/lib/crypto_backend/crypto_storage.c b/lib/crypto_backend/crypto_storage.c index 92dbae7c..14ab7fe2 100644 --- a/lib/crypto_backend/crypto_storage.c +++ b/lib/crypto_backend/crypto_storage.c @@ -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 diff --git a/lib/crypto_backend/pbkdf2_generic.c b/lib/crypto_backend/pbkdf2_generic.c index 3f6163ce..b18c7a78 100644 --- a/lib/crypto_backend/pbkdf2_generic.c +++ b/lib/crypto_backend/pbkdf2_generic.c @@ -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 diff --git a/lib/crypto_backend/pbkdf_check.c b/lib/crypto_backend/pbkdf_check.c index 2c86036c..b4c52a92 100644 --- a/lib/crypto_backend/pbkdf_check.c +++ b/lib/crypto_backend/pbkdf_check.c @@ -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 diff --git a/lib/integrity/integrity.c b/lib/integrity/integrity.c index eb10288e..42e89c10 100644 --- a/lib/integrity/integrity.c +++ b/lib/integrity/integrity.c @@ -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 diff --git a/lib/integrity/integrity.h b/lib/integrity/integrity.h index 38c4c5ee..bfdfe58a 100644 --- a/lib/integrity/integrity.h +++ b/lib/integrity/integrity.h @@ -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 diff --git a/lib/internal.h b/lib/internal.h index a418a465..576f6ebc 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index 0e8c07b6..09f5b8a8 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 8f8c94b5..bd5fb01c 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/loopaes/loopaes.c b/lib/loopaes/loopaes.c index 92090aab..e281fc8b 100644 --- a/lib/loopaes/loopaes.c +++ b/lib/loopaes/loopaes.c @@ -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 diff --git a/lib/loopaes/loopaes.h b/lib/loopaes/loopaes.h index 5f6e93f8..e538d19d 100644 --- a/lib/loopaes/loopaes.h +++ b/lib/loopaes/loopaes.h @@ -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 diff --git a/lib/luks1/af.c b/lib/luks1/af.c index a781376b..3aa319d6 100644 --- a/lib/luks1/af.c +++ b/lib/luks1/af.c @@ -2,7 +2,7 @@ * AFsplitter - Anti forensic information splitter * * Copyright (C) 2004 Clemens Fruhwirth - * 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. diff --git a/lib/luks1/af.h b/lib/luks1/af.h index 06ba5224..e63de3e3 100644 --- a/lib/luks1/af.h +++ b/lib/luks1/af.h @@ -2,7 +2,7 @@ * AFsplitter - Anti forensic information splitter * * Copyright (C) 2004 Clemens Fruhwirth - * 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. diff --git a/lib/luks1/keyencryption.c b/lib/luks1/keyencryption.c index cf781d41..e7a38364 100644 --- a/lib/luks1/keyencryption.c +++ b/lib/luks1/keyencryption.c @@ -2,8 +2,8 @@ * LUKS - Linux Unified Key Setup * * Copyright (C) 2004-2006 Clemens Fruhwirth - * 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 diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index b32da096..d5f4886d 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -2,8 +2,8 @@ * LUKS - Linux Unified Key Setup * * Copyright (C) 2004-2006 Clemens Fruhwirth - * 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 diff --git a/lib/luks1/luks.h b/lib/luks1/luks.h index d54276ef..2b5132af 100644 --- a/lib/luks1/luks.h +++ b/lib/luks1/luks.h @@ -2,7 +2,7 @@ * LUKS - Linux Unified Key Setup * * Copyright (C) 2004-2006 Clemens Fruhwirth - * 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 diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h index 65d2eeeb..ac0bdf44 100644 --- a/lib/luks2/luks2.h +++ b/lib/luks2/luks2.h @@ -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 diff --git a/lib/luks2/luks2_digest.c b/lib/luks2/luks2_digest.c index 94b3abf9..2086ace3 100644 --- a/lib/luks2/luks2_digest.c +++ b/lib/luks2/luks2_digest.c @@ -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 diff --git a/lib/luks2/luks2_digest_pbkdf2.c b/lib/luks2/luks2_digest_pbkdf2.c index bf1e4f95..03c6f49e 100644 --- a/lib/luks2/luks2_digest_pbkdf2.c +++ b/lib/luks2/luks2_digest_pbkdf2.c @@ -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 diff --git a/lib/luks2/luks2_disk_metadata.c b/lib/luks2/luks2_disk_metadata.c index 9654cdb8..7f9aae9f 100644 --- a/lib/luks2/luks2_disk_metadata.c +++ b/lib/luks2/luks2_disk_metadata.c @@ -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 diff --git a/lib/luks2/luks2_internal.h b/lib/luks2/luks2_internal.h index a5bcb1f2..a30ee5f3 100644 --- a/lib/luks2/luks2_internal.h +++ b/lib/luks2/luks2_internal.h @@ -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 diff --git a/lib/luks2/luks2_json_format.c b/lib/luks2/luks2_json_format.c index fb695f08..33b7e019 100644 --- a/lib/luks2/luks2_json_format.c +++ b/lib/luks2/luks2_json_format.c @@ -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 diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index 905bc953..cd170ac3 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -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 diff --git a/lib/luks2/luks2_keyslot.c b/lib/luks2/luks2_keyslot.c index 3b8c889d..60a45d75 100644 --- a/lib/luks2/luks2_keyslot.c +++ b/lib/luks2/luks2_keyslot.c @@ -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 diff --git a/lib/luks2/luks2_keyslot_luks2.c b/lib/luks2/luks2_keyslot_luks2.c index c8fa7d71..189a3cb8 100644 --- a/lib/luks2/luks2_keyslot_luks2.c +++ b/lib/luks2/luks2_keyslot_luks2.c @@ -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 diff --git a/lib/luks2/luks2_keyslot_reenc.c b/lib/luks2/luks2_keyslot_reenc.c index b939467f..855cb663 100644 --- a/lib/luks2/luks2_keyslot_reenc.c +++ b/lib/luks2/luks2_keyslot_reenc.c @@ -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 diff --git a/lib/luks2/luks2_luks1_convert.c b/lib/luks2/luks2_luks1_convert.c index ff0a0352..c355dabe 100644 --- a/lib/luks2/luks2_luks1_convert.c +++ b/lib/luks2/luks2_luks1_convert.c @@ -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 diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index a76cb16e..5f80f91b 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -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 diff --git a/lib/luks2/luks2_segment.c b/lib/luks2/luks2_segment.c index 8708ba52..c078c02b 100644 --- a/lib/luks2/luks2_segment.c +++ b/lib/luks2/luks2_segment.c @@ -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 diff --git a/lib/luks2/luks2_token.c b/lib/luks2/luks2_token.c index c8be1c14..25a053ff 100644 --- a/lib/luks2/luks2_token.c +++ b/lib/luks2/luks2_token.c @@ -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 diff --git a/lib/luks2/luks2_token_keyring.c b/lib/luks2/luks2_token_keyring.c index 448ad45c..be4f4a6d 100644 --- a/lib/luks2/luks2_token_keyring.c +++ b/lib/luks2/luks2_token_keyring.c @@ -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 diff --git a/lib/random.c b/lib/random.c index 060be4ff..ee5df63e 100644 --- a/lib/random.c +++ b/lib/random.c @@ -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 diff --git a/lib/setup.c b/lib/setup.c index 448a689f..1c3a5412 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/tcrypt/tcrypt.c b/lib/tcrypt/tcrypt.c index 037244ee..945e0126 100644 --- a/lib/tcrypt/tcrypt.c +++ b/lib/tcrypt/tcrypt.c @@ -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 diff --git a/lib/tcrypt/tcrypt.h b/lib/tcrypt/tcrypt.h index a3b6ad06..ff12cbd6 100644 --- a/lib/tcrypt/tcrypt.h +++ b/lib/tcrypt/tcrypt.h @@ -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 diff --git a/lib/utils.c b/lib/utils.c index 0cf43788..7e850a61 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_benchmark.c b/lib/utils_benchmark.c index f5c677ac..6b2efdcd 100644 --- a/lib/utils_benchmark.c +++ b/lib/utils_benchmark.c @@ -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 diff --git a/lib/utils_blkid.c b/lib/utils_blkid.c index 0e3e7fd4..562b1364 100644 --- a/lib/utils_blkid.c +++ b/lib/utils_blkid.c @@ -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 diff --git a/lib/utils_blkid.h b/lib/utils_blkid.h index d03d4a50..5b618734 100644 --- a/lib/utils_blkid.h +++ b/lib/utils_blkid.h @@ -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 diff --git a/lib/utils_crypt.c b/lib/utils_crypt.c index f09871c2..7dff02e0 100644 --- a/lib/utils_crypt.c +++ b/lib/utils_crypt.c @@ -2,8 +2,8 @@ * utils_crypt - cipher utilities for cryptsetup * * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_crypt.h b/lib/utils_crypt.h index 32b77cb8..9ee6a617 100644 --- a/lib/utils_crypt.h +++ b/lib/utils_crypt.h @@ -2,8 +2,8 @@ * utils_crypt - cipher utilities for cryptsetup * * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_device.c b/lib/utils_device.c index 32497f15..14268820 100644 --- a/lib/utils_device.c +++ b/lib/utils_device.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_device_locking.c b/lib/utils_device_locking.c index dac8315a..ebc846f0 100644 --- a/lib/utils_device_locking.c +++ b/lib/utils_device_locking.c @@ -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 diff --git a/lib/utils_device_locking.h b/lib/utils_device_locking.h index 41d09349..d0bc2420 100644 --- a/lib/utils_device_locking.h +++ b/lib/utils_device_locking.h @@ -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 diff --git a/lib/utils_devpath.c b/lib/utils_devpath.c index b6c8975d..343cd76a 100644 --- a/lib/utils_devpath.c +++ b/lib/utils_devpath.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_dm.h b/lib/utils_dm.h index 0cd543b0..3c628a81 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_fips.c b/lib/utils_fips.c index 34b2daed..4fa22fb9 100644 --- a/lib/utils_fips.c +++ b/lib/utils_fips.c @@ -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 diff --git a/lib/utils_fips.h b/lib/utils_fips.h index 2388ba67..51b110b5 100644 --- a/lib/utils_fips.h +++ b/lib/utils_fips.h @@ -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 diff --git a/lib/utils_io.c b/lib/utils_io.c index 3fae22b2..2681b8fa 100644 --- a/lib/utils_io.c +++ b/lib/utils_io.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_io.h b/lib/utils_io.h index 4e64d86c..3c92549c 100644 --- a/lib/utils_io.h +++ b/lib/utils_io.h @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/utils_keyring.c b/lib/utils_keyring.c index 6e22c198..fdef6748 100644 --- a/lib/utils_keyring.c +++ b/lib/utils_keyring.c @@ -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 diff --git a/lib/utils_keyring.h b/lib/utils_keyring.h index 37a5ac67..10818e0a 100644 --- a/lib/utils_keyring.h +++ b/lib/utils_keyring.h @@ -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 diff --git a/lib/utils_loop.c b/lib/utils_loop.c index 9696a408..dfa67233 100644 --- a/lib/utils_loop.c +++ b/lib/utils_loop.c @@ -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 diff --git a/lib/utils_loop.h b/lib/utils_loop.h index a3572dcd..cc445d42 100644 --- a/lib/utils_loop.h +++ b/lib/utils_loop.h @@ -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 diff --git a/lib/utils_pbkdf.c b/lib/utils_pbkdf.c index 967bb2c6..575d8416 100644 --- a/lib/utils_pbkdf.c +++ b/lib/utils_pbkdf.c @@ -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 diff --git a/lib/utils_safe_memory.c b/lib/utils_safe_memory.c index 6908ea42..61370068 100644 --- a/lib/utils_safe_memory.c +++ b/lib/utils_safe_memory.c @@ -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 diff --git a/lib/utils_storage_wrappers.c b/lib/utils_storage_wrappers.c index 09d16117..37f009d6 100644 --- a/lib/utils_storage_wrappers.c +++ b/lib/utils_storage_wrappers.c @@ -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 diff --git a/lib/utils_storage_wrappers.h b/lib/utils_storage_wrappers.h index 2519c0af..ec55ec2b 100644 --- a/lib/utils_storage_wrappers.h +++ b/lib/utils_storage_wrappers.h @@ -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 diff --git a/lib/utils_wipe.c b/lib/utils_wipe.c index 36071c4c..2d84fc0f 100644 --- a/lib/utils_wipe.c +++ b/lib/utils_wipe.c @@ -2,8 +2,8 @@ * utils_wipe - wipe a device * * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/lib/verity/rs.h b/lib/verity/rs.h index 91718147..d44a230e 100644 --- a/lib/verity/rs.h +++ b/lib/verity/rs.h @@ -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 diff --git a/lib/verity/rs_decode_char.c b/lib/verity/rs_decode_char.c index 920475e5..aa27a640 100644 --- a/lib/verity/rs_decode_char.c +++ b/lib/verity/rs_decode_char.c @@ -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 diff --git a/lib/verity/rs_encode_char.c b/lib/verity/rs_encode_char.c index 00ebb8ba..cab6ae24 100644 --- a/lib/verity/rs_encode_char.c +++ b/lib/verity/rs_encode_char.c @@ -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 diff --git a/lib/verity/verity.c b/lib/verity/verity.c index f46b1e20..f32d4e68 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -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 diff --git a/lib/verity/verity.h b/lib/verity/verity.h index 0b7f0cca..335ec427 100644 --- a/lib/verity/verity.h +++ b/lib/verity/verity.h @@ -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 diff --git a/lib/verity/verity_fec.c b/lib/verity/verity_fec.c index a8a5e86f..220aeac9 100644 --- a/lib/verity/verity_fec.c +++ b/lib/verity/verity_fec.c @@ -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 diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index 61424300..2f10f54e 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -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 diff --git a/lib/volumekey.c b/lib/volumekey.c index 45074518..fafaec6c 100644 --- a/lib/volumekey.c +++ b/lib/volumekey.c @@ -2,7 +2,7 @@ * cryptsetup volume key implementation * * Copyright (C) 2004-2006 Clemens Fruhwirth - * 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/man/cryptsetup-reencrypt.8 b/man/cryptsetup-reencrypt.8 index 3dbb6e1c..333ed581 100644 --- a/man/cryptsetup-reencrypt.8 +++ b/man/cryptsetup-reencrypt.8 @@ -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 . .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. diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 7d6f102f..1107e284 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -1,4 +1,4 @@ -.TH CRYPTSETUP "8" "December 2020" "cryptsetup" "Maintenance Commands" +.TH CRYPTSETUP "8" "January 2021" "cryptsetup" "Maintenance Commands" .SH NAME cryptsetup - manage plain dm-crypt and LUKS encrypted volumes .SH SYNOPSIS @@ -1742,9 +1742,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. diff --git a/man/integritysetup.8 b/man/integritysetup.8 index 44e7e071..4e047aeb 100644 --- a/man/integritysetup.8 +++ b/man/integritysetup.8 @@ -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 @@ -227,9 +227,9 @@ Please attach the output of the failed command with the The integritysetup tool is written by Milan Broz 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. diff --git a/man/veritysetup.8 b/man/veritysetup.8 index d4d7aa42..b26f28cf 100644 --- a/man/veritysetup.8 +++ b/man/veritysetup.8 @@ -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 @@ -221,9 +221,9 @@ The first implementation of veritysetup was written by Chrome OS authors. This version is based on verification code written by Mikulas Patocka and rewritten for libcryptsetup by Milan Broz . .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. diff --git a/misc/luks2_keyslot_example/keyslot_test.c b/misc/luks2_keyslot_example/keyslot_test.c index a19cd294..5b8cc9a2 100644 --- a/misc/luks2_keyslot_example/keyslot_test.c +++ b/misc/luks2_keyslot_example/keyslot_test.c @@ -1,7 +1,7 @@ /* * Example of LUKS2 kesylot handler (EXAMPLE) * - * Copyright (C) 2016-2020 Milan Broz + * Copyright (C) 2016-2021 Milan Broz * * Use: * - generate LUKS device diff --git a/misc/luks2_keyslot_example/keyslot_test_remote_pass.c b/misc/luks2_keyslot_example/keyslot_test_remote_pass.c index 838cd6b3..5aa9500e 100644 --- a/misc/luks2_keyslot_example/keyslot_test_remote_pass.c +++ b/misc/luks2_keyslot_example/keyslot_test_remote_pass.c @@ -1,7 +1,7 @@ /* * Example of LUKS2 token storing third party metadata (EXAMPLE) * - * Copyright (C) 2016-2020 Milan Broz + * Copyright (C) 2016-2021 Milan Broz * * Use: * - generate LUKS device diff --git a/src/cryptsetup.c b/src/cryptsetup.c index ecfd072e..78715b22 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/src/cryptsetup.h b/src/cryptsetup.h index 1afcf433..75e67977 100644 --- a/src/cryptsetup.h +++ b/src/cryptsetup.h @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index a536093b..b9461b77 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -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 diff --git a/src/integritysetup.c b/src/integritysetup.c index 51778da9..b3235690 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -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 diff --git a/src/utils_blockdev.c b/src/utils_blockdev.c index 960b7a79..a96f3091 100644 --- a/src/utils_blockdev.c +++ b/src/utils_blockdev.c @@ -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 diff --git a/src/utils_luks2.c b/src/utils_luks2.c index 535d85f5..b8e0d6cc 100644 --- a/src/utils_luks2.c +++ b/src/utils_luks2.c @@ -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 diff --git a/src/utils_password.c b/src/utils_password.c index c9127afc..c28a665d 100644 --- a/src/utils_password.c +++ b/src/utils_password.c @@ -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 diff --git a/src/utils_tools.c b/src/utils_tools.c index 47bcfe12..7c71e0bc 100644 --- a/src/utils_tools.c +++ b/src/utils_tools.c @@ -3,8 +3,8 @@ * * Copyright (C) 2004 Jana Saout * Copyright (C) 2004-2007 Clemens Fruhwirth - * 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 diff --git a/src/veritysetup.c b/src/veritysetup.c index fcc12a6b..10f61def 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -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 diff --git a/tests/api-test-2.c b/tests/api-test-2.c index 0c3b87e5..19f87f5d 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -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 diff --git a/tests/api-test.c b/tests/api-test.c index 81501ebe..bd16f595 100644 --- a/tests/api-test.c +++ b/tests/api-test.c @@ -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 diff --git a/tests/api_test.h b/tests/api_test.h index d1d9b00d..311abcd4 100644 --- a/tests/api_test.h +++ b/tests/api_test.h @@ -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 diff --git a/tests/crypto-vectors.c b/tests/crypto-vectors.c index 466509a2..f438cd11 100644 --- a/tests/crypto-vectors.c +++ b/tests/crypto-vectors.c @@ -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 diff --git a/tests/differ.c b/tests/differ.c index 827b319a..ec811a48 100644 --- a/tests/differ.c +++ b/tests/differ.c @@ -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/test_utils.c b/tests/test_utils.c index 053f9b99..892cd77a 100644 --- a/tests/test_utils.c +++ b/tests/test_utils.c @@ -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 diff --git a/tests/unit-utils-io.c b/tests/unit-utils-io.c index 9e59234b..8120842d 100644 --- a/tests/unit-utils-io.c +++ b/tests/unit-utils-io.c @@ -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 From 36f424ce71e5042de50269195c07668fdc122d54 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 23 Apr 2020 12:45:00 +0200 Subject: [PATCH 089/149] Properly prefix all popt variables in veritysetup. --- src/veritysetup.c | 72 +++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/veritysetup.c b/src/veritysetup.c index 10f61def..8bed35b7 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -23,16 +23,16 @@ #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 int opt_use_superblock = 1; + +static const char *opt_fec_device = NULL; +static int opt_fec_roots = DEFAULT_VERITY_FEC_ROOTS; +static const char *opt_hash_algorithm = NULL; +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 const char *opt_salt = NULL; static uint64_t hash_offset = 0; static uint64_t fec_offset = 0; static const char *opt_uuid = NULL; @@ -53,16 +53,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; @@ -74,12 +74,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; @@ -102,13 +102,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); } } @@ -116,7 +116,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(¶ms, action_argv[0], flags); @@ -161,12 +161,12 @@ static int _activate(const char *dm_device, 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, ¶ms); } else { r = _prepare_format(¶ms, data_device, flags | CRYPT_VERITY_NO_HEADER); @@ -329,7 +329,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); } @@ -468,17 +468,17 @@ 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") }, + { "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, &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") }, + { "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, &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") }, + { "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 }, @@ -577,7 +577,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)); From 5345a73ca060262dea2b435f7ba46bdab1f03408 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 23 Apr 2020 11:28:44 +0200 Subject: [PATCH 090/149] Group all string options variables together. --- src/cryptsetup.c | 52 ++++++++++++++++++-------------------- src/cryptsetup_reencrypt.c | 18 +++++++------ src/integritysetup.c | 25 ++++++++---------- src/veritysetup.c | 12 ++++----- 4 files changed, 52 insertions(+), 55 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 78715b22..0fa1af94 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -27,19 +27,40 @@ 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 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 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 const char *opt_pbkdf = NULL; +static const char *opt_priority = NULL; /* normal */ +static const char *opt_integrity = NULL; /* none */ +static const char *opt_key_description = NULL; +static const char *opt_label = NULL; +static const char *opt_subsystem = NULL; +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 + +/* helper strings converted to uint64_t later */ +static const char *opt_reduce_size_str = NULL; +static const char *opt_hotzone_size_str = NULL; +static const char *opt_device_size_str = NULL; +static const char *opt_luks2_metadata_size_str = NULL; +static const char *opt_luks2_keyslots_size_str = NULL; + +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 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; @@ -76,53 +97,30 @@ 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 **action_argv; static int action_argc; static const char *null_action_argv[] = {NULL, NULL}; diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index b9461b77..fde97b91 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -35,10 +35,19 @@ 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 const char *opt_pbkdf = NULL; +static const char *opt_header_device = NULL; + +/* helper strings converted to uint64_t later */ +static const char *opt_reduce_size_str = NULL; +static const 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,13 +63,6 @@ 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; diff --git a/src/integritysetup.c b/src/integritysetup.c index b3235690..c7b1d3f7 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -27,8 +27,19 @@ #define DEFAULT_ALG_NAME "crc32c" #define MAX_KEY_SIZE 4096 +static const char *opt_data_device = NULL; +static const char *opt_integrity = DEFAULT_ALG_NAME; +static const char *opt_integrity_key_file = NULL; +static const char *opt_journal_integrity = NULL; /* none */ +static const char *opt_journal_integrity_key_file = NULL; +static const char *opt_journal_crypt = NULL; /* none */ +static const char *opt_journal_crypt_key_file = NULL; + +/* helper strings converted to uint64_t later */ static const 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,28 +48,14 @@ 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_recalculate = 0; static int opt_allow_discards = 0; diff --git a/src/veritysetup.c b/src/veritysetup.c index 8bed35b7..344c7e44 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -23,25 +23,25 @@ #define PACKAGE_VERITY "veritysetup" -static int opt_use_superblock = 1; - static const char *opt_fec_device = NULL; -static int opt_fec_roots = DEFAULT_VERITY_FEC_ROOTS; static const char *opt_hash_algorithm = NULL; +static const char *opt_salt = NULL; +static const char *opt_uuid = NULL; +static const 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 *opt_salt = 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; From ed28583f173ad0528f8c7a0c310a992ddc983e34 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 23 Apr 2020 11:56:28 +0200 Subject: [PATCH 091/149] Do not pass constant strings to option string variables. This is part of effort to eliminate all memory leaks related to options parsing in popt but for that to work we must avoid passing constant strings to free(). --- src/cryptsetup.c | 147 +++++++++++++++++++------------------ src/cryptsetup_reencrypt.c | 8 +- src/integritysetup.c | 16 ++-- 3 files changed, 92 insertions(+), 79 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 0fa1af94..61ee090f 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -35,7 +35,7 @@ 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 const char *opt_type = NULL; static const char *opt_pbkdf = NULL; static const char *opt_priority = NULL; /* normal */ static const char *opt_integrity = NULL; /* none */ @@ -43,8 +43,8 @@ static const char *opt_key_description = NULL; static const char *opt_label = NULL; static const char *opt_subsystem = NULL; 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 const char *opt_resilience_mode = NULL; /* default value "checksum" */ +static const char *opt_resilience_hash = NULL; /* default value "sha256" */ /* helper strings converted to uint64_t later */ static const char *opt_reduce_size_str = NULL; @@ -120,6 +120,8 @@ static int opt_decrypt = 0; /* do not set from command line, use helpers above */ static int64_t opt_data_shift; +static const char *device_type = "luks"; +static const char *set_pbkdf = NULL; static const char **action_argv; static int action_argc; @@ -961,10 +963,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) { @@ -1036,7 +1038,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)) { @@ -1067,7 +1069,7 @@ static int set_keyslot_params(struct crypt_device *cd, int keyslot) 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)) @@ -1139,7 +1141,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.")); @@ -1153,7 +1155,7 @@ 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: if (!r && crypt_get_type(cd) && !strcmp(crypt_get_type(cd), CRYPT_LUKS2)) r = _do_luks2_reencrypt_recovery(cd); @@ -1225,7 +1227,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(); @@ -1441,7 +1443,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; @@ -1567,7 +1569,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; @@ -1624,7 +1626,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; @@ -1747,7 +1749,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; @@ -1850,7 +1852,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; @@ -1968,7 +1970,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; @@ -1985,7 +1987,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) @@ -2144,7 +2146,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; @@ -2184,7 +2186,7 @@ static int action_luksResume(void) if ((r = crypt_init_by_name_and_header(&cd, action_argv[0], uuid_or_device(opt_header_device)))) goto out; - if ((r = crypt_load(cd, luksType(opt_type), NULL))) + if ((r = crypt_load(cd, luksType(device_type), NULL))) goto out; tries = (tools_is_stdin(opt_key_file) && isatty(STDIN_FILENO)) ? opt_tries : 1; @@ -2289,38 +2291,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.")); @@ -2339,7 +2341,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; @@ -2384,9 +2386,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.")); @@ -2705,8 +2707,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 @@ -2750,8 +2752,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, @@ -2760,7 +2762,7 @@ static int action_encrypt_luks2(struct crypt_device **cd) _set_reencryption_flags(¶ms.flags); - type = luksType(opt_type); + type = luksType(device_type); if (!type) type = crypt_get_default_type(); @@ -2800,7 +2802,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 */ @@ -2839,7 +2842,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?) @@ -2925,8 +2931,8 @@ 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, @@ -3138,8 +3144,8 @@ static int action_reencrypt_luks2(struct crypt_device *cd) 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, @@ -3675,26 +3681,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") || @@ -3704,18 +3710,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) @@ -3740,7 +3747,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)); @@ -3792,8 +3799,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)); @@ -3815,7 +3822,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) @@ -3823,7 +3830,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)); @@ -3861,20 +3868,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)); @@ -3884,7 +3891,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)); @@ -3923,7 +3930,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)); @@ -3934,7 +3941,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)); diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index fde97b91..2d70f320 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -34,7 +34,7 @@ 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 const char *opt_type = NULL; static const char *opt_pbkdf = NULL; static const char *opt_header_device = NULL; @@ -66,6 +66,8 @@ static int opt_decrypt = 0; static const char **action_argv; +static const char *set_pbkdf = NULL; + #define MAX_SLOT 32 #define MAX_TOKEN 32 struct reenc_ctx { @@ -484,7 +486,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)) { @@ -1690,7 +1692,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)); diff --git a/src/integritysetup.c b/src/integritysetup.c index c7b1d3f7..ebffd055 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -28,7 +28,7 @@ #define MAX_KEY_SIZE 4096 static const char *opt_data_device = NULL; -static const char *opt_integrity = DEFAULT_ALG_NAME; +static const char *opt_integrity = NULL; /* DEFAULT_ALG_NAME */ static const char *opt_integrity_key_file = NULL; static const char *opt_journal_integrity = NULL; /* none */ static const char *opt_journal_integrity_key_file = NULL; @@ -59,6 +59,7 @@ static int opt_integrity_legacy_padding = 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; @@ -186,8 +187,8 @@ static int action_format(int arg) int r; size_t signatures; - if (opt_integrity) { - r = crypt_parse_hash_integrity_mode(opt_integrity, integrity); + if (integrity_alg) { + r = crypt_parse_hash_integrity_mode(integrity_alg, integrity); if (r < 0) { log_err(_("No known integrity specification pattern detected.")); return r; @@ -275,8 +276,8 @@ 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 (integrity_alg) { + r = crypt_parse_hash_integrity_mode(integrity_alg, integrity); if (r < 0) { log_err(_("No known integrity specification pattern detected.")); return r; @@ -626,6 +627,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; @@ -676,7 +680,7 @@ 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) + if (!integrity_alg && opt_integrity_key_file) usage(popt_context, EXIT_FAILURE, _("Integrity algorithm must be specified if integrity key is used."), poptGetInvocationName(popt_context)); From bc49c83ace6cc39b688978da4a041f59fce4853d Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 24 Apr 2020 13:35:11 +0200 Subject: [PATCH 092/149] Remove const from all opt_ string declarations. Those variables contain pointers to dynamically alocated memory. --- src/cryptsetup.c | 58 +++++++++++++++++++------------------- src/cryptsetup_reencrypt.c | 20 ++++++------- src/integritysetup.c | 16 +++++------ src/veritysetup.c | 10 +++---- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 61ee090f..93e695f3 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -24,34 +24,34 @@ #include "cryptsetup.h" #include -static const char *opt_cipher = NULL; -static const char *opt_keyslot_cipher = NULL; -static const char *opt_hash = NULL; -static const char *opt_json_file = NULL; -static const char *opt_key_file = NULL; -static const char *opt_keyfile_stdin = NULL; -static const char *opt_keyfiles[MAX_KEYFILES]; -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 = NULL; -static const char *opt_pbkdf = NULL; -static const char *opt_priority = NULL; /* normal */ -static const char *opt_integrity = NULL; /* none */ -static const char *opt_key_description = NULL; -static const char *opt_label = NULL; -static const char *opt_subsystem = NULL; -static const char *opt_active_name = NULL; -static const char *opt_resilience_mode = NULL; /* default value "checksum" */ -static const char *opt_resilience_hash = NULL; /* default value "sha256" */ +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 const char *opt_reduce_size_str = NULL; -static const char *opt_hotzone_size_str = NULL; -static const char *opt_device_size_str = NULL; -static const char *opt_luks2_metadata_size_str = NULL; -static const char *opt_luks2_keyslots_size_str = NULL; +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 uint64_t opt_reduce_size = 0; static uint64_t opt_hotzone_size = 0; @@ -500,7 +500,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), @@ -618,7 +618,7 @@ 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), @@ -3615,7 +3615,7 @@ int main(int argc, const char **argv) char *endp; if (r == 6) { - const char *kf = poptGetOptArg(popt_context); + char *kf = poptGetOptArg(popt_context); if (tools_is_stdin(kf)) opt_keyfile_stdin = kf; else if (opt_keyfiles_count < MAX_KEYFILES) diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index 2d70f320..3d86960d 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -29,18 +29,18 @@ #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 = NULL; -static const char *opt_pbkdf = NULL; -static const char *opt_header_device = NULL; +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 const char *opt_reduce_size_str = NULL; -static const char *opt_device_size_str = NULL; +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; diff --git a/src/integritysetup.c b/src/integritysetup.c index ebffd055..6d07bdd6 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -27,16 +27,16 @@ #define DEFAULT_ALG_NAME "crc32c" #define MAX_KEY_SIZE 4096 -static const char *opt_data_device = NULL; -static const char *opt_integrity = NULL; /* DEFAULT_ALG_NAME */ -static const char *opt_integrity_key_file = NULL; -static const char *opt_journal_integrity = NULL; /* none */ -static const char *opt_journal_integrity_key_file = NULL; -static const char *opt_journal_crypt = NULL; /* none */ -static const char *opt_journal_crypt_key_file = 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 const char *opt_journal_size_str = NULL; +static char *opt_journal_size_str = NULL; static uint64_t opt_journal_size = 0; diff --git a/src/veritysetup.c b/src/veritysetup.c index 344c7e44..b58b5c16 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -23,11 +23,11 @@ #define PACKAGE_VERITY "veritysetup" -static const char *opt_fec_device = NULL; -static const char *opt_hash_algorithm = NULL; -static const char *opt_salt = NULL; -static const char *opt_uuid = NULL; -static const char *opt_root_hash_signature = NULL; +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; From 74c943c352217a6a7e80aaf3f1dc810e9c662810 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 23 Apr 2020 13:41:55 +0200 Subject: [PATCH 093/149] Drop unreachable code and useless conditions. integrity_alg variable can not be NULL. --- src/integritysetup.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/integritysetup.c b/src/integritysetup.c index 6d07bdd6..3b4b26ca 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -187,14 +187,12 @@ static int action_format(int arg) int r; size_t signatures; - if (integrity_alg) { - 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; + 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); @@ -276,14 +274,12 @@ static int action_open(int arg) char *integrity_key = NULL; int r; - if (integrity_alg) { - 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; + 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); @@ -680,9 +676,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 (!integrity_alg && 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)) From 4a43a2773a432dbf8601922cfefd653ee34f0405 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 24 Apr 2020 13:05:21 +0200 Subject: [PATCH 094/149] Add utilities cleanup routine. --- src/cryptsetup.c | 4 ++++ src/cryptsetup.h | 3 +++ src/cryptsetup_reencrypt.c | 4 ++++ src/integritysetup.c | 4 ++++ src/utils_tools.c | 1 + src/veritysetup.c | 4 ++++ 6 files changed, 20 insertions(+) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 93e695f3..081e0419 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -127,6 +127,10 @@ static const char **action_argv; static int action_argc; static const char *null_action_argv[] = {NULL, NULL}; +void tools_cleanup(void) +{ +} + static const char *uuid_or_device_header(const char **data_device) { if (data_device) diff --git a/src/cryptsetup.h b/src/cryptsetup.h index 75e67977..6504f896 100644 --- a/src/cryptsetup.h +++ b/src/cryptsetup.h @@ -116,6 +116,9 @@ 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); + /* 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) diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index 3d86960d..3212d123 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -117,6 +117,10 @@ typedef enum { CHECK_OPEN, } header_magic; +void tools_cleanup(void) +{ +} + static void _quiet_log(int level, const char *msg, void *usrptr) { if (!opt_debug) diff --git a/src/integritysetup.c b/src/integritysetup.c index 3b4b26ca..f6106fde 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -63,6 +63,10 @@ static const char *integrity_alg = DEFAULT_ALG_NAME; static const char **action_argv; static int action_argc; +void tools_cleanup(void) +{ +} + // FIXME: move this to tools and handle EINTR static int _read_mk(const char *file, char **key, int keysize) { diff --git a/src/utils_tools.c b/src/utils_tools.c index 7c71e0bc..d523c1aa 100644 --- a/src/utils_tools.c +++ b/src/utils_tools.c @@ -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); } diff --git a/src/veritysetup.c b/src/veritysetup.c index b58b5c16..dfb5c10e 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -46,6 +46,10 @@ static int opt_check_at_most_once = 0; static const char **action_argv; static int action_argc; +void tools_cleanup(void) +{ +} + static int _prepare_format(struct crypt_params_verity *params, const char *data_device, uint32_t flags) From 92b24fd75822cee2db5efc883ca3082f66047280 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 23 Apr 2020 14:29:50 +0200 Subject: [PATCH 095/149] Fix popt string related memory leaks. All POPT_ARG_STRING pointers must be free'd manually in calling application. This is unfortunately not documented well behaviour of popt and we were having memory leaks due to it. --- src/cryptsetup.c | 65 +++++++++++++++++++++++++++++--------- src/cryptsetup.h | 2 ++ src/cryptsetup_reencrypt.c | 15 +++++++-- src/integritysetup.c | 11 +++++++ src/veritysetup.c | 23 ++++++++++---- 5 files changed, 92 insertions(+), 24 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 081e0419..d0de25fa 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -129,6 +129,34 @@ 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) @@ -3460,10 +3488,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 @@ -3504,7 +3534,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 }, @@ -3520,19 +3549,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") }, @@ -3616,25 +3645,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) { - 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; @@ -3991,6 +4024,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); } @@ -4048,6 +4082,7 @@ int main(int argc, const char **argv) poptGetInvocationName(popt_context)); r = run_action(action); + tools_cleanup(); poptFreeContext(popt_context); return r; } diff --git a/src/cryptsetup.h b/src/cryptsetup.h index 6504f896..eb77dbe2 100644 --- a/src/cryptsetup.h +++ b/src/cryptsetup.h @@ -119,6 +119,8 @@ int tools_lookup_crypt_device(struct crypt_device *cd, const char *type, /* 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) diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index 3212d123..27a24d9d 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -119,6 +119,16 @@ typedef enum { 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) @@ -1598,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 @@ -1772,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); } diff --git a/src/integritysetup.c b/src/integritysetup.c index f6106fde..27dfc10a 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -65,6 +65,14 @@ 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 @@ -504,10 +512,12 @@ static void help(poptContext popt_context, log_std(_("\nDefault compiled-in dm-integrity parameters:\n" "\tChecksum algorithm: %s\n"), DEFAULT_ALG_NAME); + 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 @@ -716,6 +726,7 @@ int main(int argc, const char **argv) } r = run_action(action); + tools_cleanup(); poptFreeContext(popt_context); return r; } diff --git a/src/veritysetup.c b/src/veritysetup.c index dfb5c10e..fc32cca0 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -48,6 +48,11 @@ 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, @@ -435,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 @@ -459,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 }, @@ -477,10 +483,10 @@ int main(int argc, const char **argv) { "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, &popt_tmp, 1, N_("The number of blocks in the data file"), N_("blocks") }, + { "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, &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-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 }, @@ -510,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; @@ -614,6 +622,7 @@ int main(int argc, const char **argv) } r = run_action(action); + tools_cleanup(); poptFreeContext(popt_context); return r; } From 79442539c7cd6ff21510efdab8b9e2157a579624 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 24 Apr 2020 11:52:52 +0200 Subject: [PATCH 096/149] Remove bogus valgrind suppressions. --- tests/cryptsetup-valg-supps | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/tests/cryptsetup-valg-supps b/tests/cryptsetup-valg-supps index b2530f7c..493e1258 100644 --- a/tests/cryptsetup-valg-supps +++ b/tests/cryptsetup-valg-supps @@ -12,25 +12,3 @@ 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 -} From 616dd5a304ca03f453129ff100d5f47147154cfe Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 27 May 2020 16:08:34 +0200 Subject: [PATCH 097/149] Allow bitlk tests to run with valgrind. --- tests/Makefile.am | 1 + tests/bitlk-compat-test | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/tests/Makefile.am b/tests/Makefile.am index 5a7e21de..07b34747 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -119,6 +119,7 @@ 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 ./bitlk-compat-test @VALG=1 ./compat-test .PHONY: valgrind-check diff --git a/tests/bitlk-compat-test b/tests/bitlk-compat-test index 26456098..c8210b50 100755 --- a/tests/bitlk-compat-test +++ b/tests/bitlk-compat-test @@ -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() @@ -75,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" From c74f17c6e75dd1e63e2381f0da7b36a9a7905756 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 23 Jan 2021 20:14:02 +0100 Subject: [PATCH 098/149] Fix copy & paste typo in integrity test. --- tests/integrity-compat-test | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integrity-compat-test b/tests/integrity-compat-test index c1272975..0329d0a0 100755 --- a/tests/integrity-compat-test +++ b/tests/integrity-compat-test @@ -294,7 +294,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." @@ -302,14 +302,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]" } @@ -377,7 +377,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]" @@ -390,7 +390,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]" @@ -403,7 +403,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 From 0a6f89cfa6f343caa90828f35c3b00d32d6014c5 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 23 Jan 2021 20:08:19 +0100 Subject: [PATCH 099/149] Fix dm-integrity HMAC recalculation problem. This patch adds support for Linux kernel (since version 5.11) dm-integrity fixes that disables integrity recalculation if keyed algorithms (HMAC) is used. Original dm-integrity superblock version <=4 is recalculation offset field not protected by HMAC. An attacker can move this pointer and force the kernel to recalculate the data area, ignoring original HMAC tags. N.B. dm-integrity was not intended to protect against intentional changes. Better use authenticated encryption (AEAD) in combination with dm-crypt. It is designed to protect against random data corruption caused by hardware or storage medium faults. Despite that, we try to keep the system secure if keyed algorithms are used. There are two possible keyed algorithms in dm-integrity - algorithm used to protect journal and superblock (--journal-integrity) and algorithms for protecting data (--integrity). The dm-integrity superblock is guarded by --journal-integrity, so if you want to protect data with HMAC, you should always also use HMAC for --journal-integrity. The keys are independent. If HMAC is used for data but not for the journal, recalculation is disabled by default. For new kernel dm-integrity, the HMAC option also uses salt in superblock to avoid an easy way to distinguish that the HMAC key is the same for two devices (if data are the same). The new HMAC and superblock are enabled automatically if the kernel supports it (you can see superblock version 5 and fix_hmac flag in dump command). If you need to use (insecure) backward compatibility, then 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 version format (with HMAC). Libcryptsetup API also introduces flags CRYPT_COMPAT_LEGACY_INTEGRITY_HMAC and CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC to set these through crypt_set_compatibility() call. --- lib/integrity/integrity.c | 16 +++++++++++++--- lib/integrity/integrity.h | 2 ++ lib/libcryptsetup.h | 4 ++++ lib/libdevmapper.c | 29 ++++++++++++++++++++++++++++ lib/utils_dm.h | 3 +++ man/integritysetup.8 | 15 +++++++++++++++ src/integritysetup.c | 13 ++++++++++++- tests/integrity-compat-test | 38 ++++++++++++++++++++++++++++++++++++- 8 files changed, 115 insertions(+), 5 deletions(-) diff --git a/lib/integrity/integrity.c b/lib/integrity/integrity.c index 42e89c10..15005058 100644 --- a/lib/integrity/integrity.c +++ b/lib/integrity/integrity.c @@ -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; @@ -95,11 +95,12 @@ int INTEGRITY_dump(struct crypt_device *cd, struct device *device, uint64_t offs 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; } diff --git a/lib/integrity/integrity.h b/lib/integrity/integrity.h index bfdfe58a..1f496120 100644 --- a/lib/integrity/integrity.h +++ b/lib/integrity/integrity.h @@ -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]; diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index 09f5b8a8..4a956dcc 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -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. diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index bd5fb01c..72bf4952 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -239,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; } @@ -912,12 +915,25 @@ static char *get_dm_integrity_params(const struct dm_target *tgt, uint32_t flags 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 (tgt->u.integrity.fix_hmac) { + num_options++; + snprintf(feature, sizeof(feature), "fix_hmac "); + strncat(features, feature, sizeof(features) - strlen(features) - 1); + } + + if (tgt->u.integrity.legacy_recalc) { + num_options++; + snprintf(feature, sizeof(feature), "legacy_recalculate "); + strncat(features, feature, sizeof(features) - strlen(features) - 1); + } + if (flags & CRYPT_ACTIVATE_RECALCULATE) { num_options++; snprintf(feature, sizeof(feature), "recalculate "); @@ -2474,6 +2490,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 */ @@ -3060,6 +3080,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; diff --git a/lib/utils_dm.h b/lib/utils_dm.h index 3c628a81..9a52aeba 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -72,6 +72,7 @@ static inline uint32_t act2dmflags(uint32_t act_flags) #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 }; @@ -149,6 +150,8 @@ struct dm_target { struct device *meta_device; bool fix_padding; + bool fix_hmac; + bool legacy_recalc; } integrity; struct { uint64_t offset; diff --git a/man/integritysetup.8 b/man/integritysetup.8 index 4e047aeb..a115501c 100644 --- a/man/integritysetup.8 +++ b/man/integritysetup.8 @@ -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. diff --git a/src/integritysetup.c b/src/integritysetup.c index 27dfc10a..7cec07e1 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -56,6 +56,8 @@ 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; @@ -254,6 +256,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, ¶ms); if (r < 0) /* FIXME: call wipe signatures again */ goto out; @@ -319,7 +324,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; @@ -335,6 +340,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: @@ -584,6 +592,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 }; diff --git a/tests/integrity-compat-test b/tests/integrity-compat-test index 0329d0a0..e1e79316 100755 --- a/tests/integrity-compat-test +++ b/tests/integrity-compat-test @@ -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,7 +26,7 @@ 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() @@ -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_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 @@ -436,4 +441,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 From d20929194f9ffaaedf11cce7f3756c53ca750b4c Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Fri, 29 Jan 2021 13:34:27 +0100 Subject: [PATCH 100/149] Fix previous commit error condition. This hints actually failed even if return code was OK. --- lib/integrity/integrity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/integrity/integrity.c b/lib/integrity/integrity.c index 15005058..d9f3d6e7 100644 --- a/lib/integrity/integrity.c +++ b/lib/integrity/integrity.c @@ -281,9 +281,9 @@ int INTEGRITY_activate_dmd_device(struct crypt_device *cd, if (r < 0 && (dmd->flags & CRYPT_ACTIVATE_RECALCULATE) && !(crypt_get_compatibility(cd) & CRYPT_COMPAT_LEGACY_INTEGRITY_RECALC) && - (sb_flags & SB_FLAG_FIXED_HMAC) ? + ((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)) { + (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; } From 2f6698d1a708716436d46feaef0047fd0614db48 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 29 Jan 2021 17:58:10 +0100 Subject: [PATCH 101/149] Test crypt_keyslot_change_by_passphrase does not break tokens. --- tests/api-test-2.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/api-test-2.c b/tests/api-test-2.c index 19f87f5d..0cfaef9f 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -1803,6 +1803,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"; @@ -1947,6 +1948,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(); From 6e71e2d6edd132b2770ccdd340bd572d7569e246 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 29 Jan 2021 17:58:44 +0100 Subject: [PATCH 102/149] Fix crypt_keyslot_change_by_passphrase tokens bug. crypt_keyslot_change_by_passphrase broke token references to keyslots while existing keyslot id was different from new keyslot id. --- lib/luks2/luks2.h | 6 ++++++ lib/luks2/luks2_token.c | 44 ++++++++++++++++++++++++++++++++++------- lib/setup.c | 3 +++ 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h index ac0bdf44..e43bf779 100644 --- a/lib/luks2/luks2.h +++ b/lib/luks2/luks2.h @@ -332,6 +332,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, diff --git a/lib/luks2/luks2_token.c b/lib/luks2/luks2_token.c index 25a053ff..1e340451 100644 --- a/lib/luks2/luks2_token.c +++ b/lib/luks2/luks2_token.c @@ -576,16 +576,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; + json_object *jobj, *jobj_token_keyslots, + *jobj_token = LUKS2_get_token_jobj(hdr, token); - if (keyslot < 0 || keyslot >= LUKS2_KEYSLOTS_MAX || token < 0 || token >= LUKS2_TOKENS_MAX) - return -EINVAL; - - jobj_token = LUKS2_get_token_jobj(hdr, token); if (!jobj_token) return -ENOENT; @@ -600,6 +596,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 +613,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; +} diff --git a/lib/setup.c b/lib/setup.c index 1c3a5412..022b1295 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3464,6 +3464,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 */ From e8f2bb4a1a70bfd8c4ddeae583b7301b8042d9d5 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 31 Jan 2021 16:05:31 +0100 Subject: [PATCH 103/149] Disable alternative backends in CI build for now. These will run in release time only. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index adf612be..0bb8c39e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,9 @@ compiler: - gcc env: - - MAKE_CHECK="gcrypt" + # MAKE_CHECK="gcrypt" - MAKE_CHECK="openssl" - - MAKE_CHECK="kernel" + # MAKE_CHECK="kernel" branches: only: From e123263975c0c5df63fdf95671677c49fb0e919b Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 1 Feb 2021 10:50:08 +0100 Subject: [PATCH 104/149] Fix LUKS1 repair code. We cannot trust possibly broken keyslots metadata here through LUKS_keyslots_offset(). Expect first keyslot is aligned, if not, then manual repair is neccessary. (This situation happen if partition table signarture overwrites slot 4 area). Also, if keyslot order is different, current repair code does not work properly (this can happen only with downconverting LUKS2 device). --- lib/luks1/keymanage.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index d5f4886d..b6575841 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -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; } From ec657332c679b030a9fd71e152e4a85234c55f12 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 3 Feb 2021 19:37:33 +0100 Subject: [PATCH 105/149] Rephrase lockinging dir warning and move it to debug level. System should later provide safe transition to tempdir configuration. --- lib/utils_device_locking.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils_device_locking.c b/lib/utils_device_locking.c index ebc846f0..1940f508 100644 --- a/lib/utils_device_locking.c +++ b/lib/utils_device_locking.c @@ -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, _("WARNING: Locking directory %s/%s will be created with default compiled-in permissions.\n"), 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) From 312efd8582f3aa61c3451e54f76cee2030373b1f Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 3 Feb 2021 19:56:33 +0100 Subject: [PATCH 106/149] Remove redundant EOL in the previous patch. --- lib/utils_device_locking.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils_device_locking.c b/lib/utils_device_locking.c index 1940f508..a6705582 100644 --- a/lib/utils_device_locking.c +++ b/lib/utils_device_locking.c @@ -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_dbg(cd, _("WARNING: Locking directory %s/%s will be created with default compiled-in permissions.\n"), dir, base); + log_dbg(cd, _("WARNING: 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) From 660edf7959a46e62a3cdfd53ef2feb5441f96853 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 3 Feb 2021 21:14:17 +0100 Subject: [PATCH 107/149] Remove WARNING from the debug message. --- lib/utils_device_locking.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils_device_locking.c b/lib/utils_device_locking.c index a6705582..36e64964 100644 --- a/lib/utils_device_locking.c +++ b/lib/utils_device_locking.c @@ -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_dbg(cd, _("WARNING: Locking directory %s/%s will be created with default compiled-in permissions."), 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) From 3d58f480ee4ed2b75ee642a85ce9b0877a97b81b Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 3 Feb 2021 21:14:52 +0100 Subject: [PATCH 108/149] Avoid "output may be truncated" gcc warnings. These are false positives and gcc internal detection of this pattern seems to be broken again. In this path we must avoid memcpy the whole buffer, it can contain some bytes after null char, so use MIN/strlen here. --- lib/luks2/luks2_disk_metadata.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/luks2/luks2_disk_metadata.c b/lib/luks2/luks2_disk_metadata.c index 7f9aae9f..8029c429 100644 --- a/lib/luks2/luks2_disk_metadata.c +++ b/lib/luks2/luks2_disk_metadata.c @@ -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); From e064406f854384343a7f774fb27a2ec7a3916fad Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Thu, 4 Feb 2021 14:49:54 +0100 Subject: [PATCH 109/149] bitlk: Fix parsing startup key metadata This fixes multiple issues found by coverity in the startup key code and also makes the parsing less complicated -- we don't need to loop through all metadata entries in the BEK file if we are expecting only one metadata entry of a specific type. --- lib/bitlk/bitlk.c | 76 +++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 48 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index a425b2bc..8846660f 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -904,6 +904,7 @@ static int parse_external_key_entry(struct crypt_device *cd, const char *data, i *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) ; @@ -915,7 +916,8 @@ static int parse_external_key_entry(struct crypt_device *cd, const char *data, i start += key_entry_size; } - return 0; + /* 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 */ @@ -931,12 +933,9 @@ static int get_startup_key(struct crypt_device *cd, uint16_t key_entry_size = 0; uint16_t key_entry_type = 0; uint16_t key_entry_value = 0; - int start = 0; - int end = 0; - int r = 0; if (passwordLen < BITLK_BEK_FILE_HEADER_LEN) - return 0; + return -EPERM; memcpy(&bek_header, password, BITLK_BEK_FILE_HEADER_LEN); @@ -945,7 +944,7 @@ static int get_startup_key(struct crypt_device *cd, if (strcmp(guid_buf, vmk->guid) == 0) log_dbg(cd, "Found matching startup key for VMK %s", vmk->guid); else - return 0; + return -EPERM; if (bek_header.metadata_version != 1) { log_err(cd, "Unsupported BEK metadata version %" PRIu32 "", bek_header.metadata_version); @@ -957,44 +956,31 @@ static int get_startup_key(struct crypt_device *cd, return -EINVAL; } - start = BITLK_BEK_FILE_HEADER_LEN; - end = bek_header.metadata_size; - while (end - start > 2) { - /* size of this entry */ - memcpy(&key_entry_size, password + start, 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); - break; - } - - /* type and value of this entry */ - memcpy(&key_entry_type, password + start + sizeof(key_entry_size), sizeof(key_entry_type)); - memcpy(&key_entry_value, - password + 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); - - if (key_entry_type == BITLK_ENTRY_TYPE_STARTUP_KEY && key_entry_value == BITLK_ENTRY_VALUE_EXTERNAL_KEY) { - r = parse_external_key_entry(cd, password, - start + BITLK_ENTRY_HEADER_LEN + BITLK_STARTUP_KEY_HEADER_LEN, - end, su_key); - if (r < 0) - return r; - } 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; - } - - start += key_entry_size; + /* 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; } - if (*su_key == NULL) - log_dbg(cd, "Failed to get VMK from matching BEK key file."); - - return 0; + /* 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, @@ -1189,12 +1175,6 @@ int BITLK_activate(struct crypt_device *cd, next_vmk = next_vmk->next; continue; } - if (vmk_dec_key == NULL){ - /* r = 0 but no key -> given passphrase is not a recovery startup key */ - r = -EPERM; - next_vmk = next_vmk->next; - continue; - } log_dbg(cd, "Trying to use external key found in provided password."); } else { /* only passphrase, recovery passphrase and startup key VMKs supported right now */ From bea6e0da74e5ff9dc488866f7ce446487f9f44ae Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 4 Feb 2021 17:54:36 +0100 Subject: [PATCH 110/149] Fix an error path memory leak. --- src/cryptsetup.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index d0de25fa..bff46963 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -2393,8 +2393,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); From bce9d695e3d87b48743aa1080c18cf2f9da4c076 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Thu, 4 Feb 2021 18:01:45 +0100 Subject: [PATCH 111/149] Coverity workaround for tainted warnings. Password can be any string and the function allocates string properly, so mark it is as sanitized. --- src/utils_password.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/utils_password.c b/src/utils_password.c index c28a665d..cbeec1df 100644 --- a/src/utils_password.c +++ b/src/utils_password.c @@ -62,7 +62,7 @@ static int tools_check_pwquality(const char *password) #elif defined ENABLE_PASSWDQC #include -static int tools_check_pwquality(const char *password) +static int tools_check_passwdqc(const char *password) { passwdqc_params_t params; char *parse_reason; @@ -87,12 +87,19 @@ static int tools_check_pwquality(const char *password) return 0; } -#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 int untimed_read(int fd, char *pass, size_t maxlen) @@ -276,7 +283,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; } From 1380efa1c650a79f16df8b6120472f08da18652c Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 8 Feb 2021 17:33:19 +0100 Subject: [PATCH 112/149] Fix compat interactive test to run with valgrind too. --- tests/Makefile.am | 2 +- tests/compat-test | 68 +++++++++++++++++++++++++++-------------------- tests/valg-api.sh | 2 +- tests/valg.sh | 2 +- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 07b34747..e9f28031 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -112,6 +112,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 @@ -120,6 +121,5 @@ valgrind-check: api-test api-test-2 differ @INFOSTRING="api-test-002" ./valg-api.sh ./api-test-2 @VALG=1 ./luks2-reencryption-test @VALG=1 ./bitlk-compat-test - @VALG=1 ./compat-test .PHONY: valgrind-check diff --git a/tests/compat-test b/tests/compat-test index a61453ea..0947667b 100755 --- a/tests/compat-test +++ b/tests/compat-test @@ -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 @@ -801,10 +811,10 @@ 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 - >/dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null < Date: Fri, 26 Feb 2021 00:13:48 +0100 Subject: [PATCH 113/149] Backport device_is_identical() changes needed for following patch. --- lib/setup.c | 12 ++++++------ lib/utils_device.c | 24 +++++++++++++----------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index 022b1295..084c6457 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -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; @@ -2413,7 +2413,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 +2467,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; } @@ -3694,7 +3694,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 */ diff --git a/lib/utils_device.c b/lib/utils_device.c index 14268820..1b503ffb 100644 --- a/lib/utils_device.c +++ b/lib/utils_device.c @@ -860,14 +860,21 @@ int device_direct_io(const struct device *device) return device->o_direct; } -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; + + 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 st.st_rdev; + return 0; } int device_is_identical(struct device *device1, struct device *device2) @@ -878,15 +885,10 @@ 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) From d733e4d0e82e6de8b4c6fe57ea75bed061f4aa96 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Fri, 5 Feb 2021 12:42:32 +0100 Subject: [PATCH 114/149] Add a missing stdbool include. --- lib/utils_device_locking.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/utils_device_locking.h b/lib/utils_device_locking.h index d0bc2420..d3b55a02 100644 --- a/lib/utils_device_locking.h +++ b/lib/utils_device_locking.h @@ -22,6 +22,8 @@ #ifndef _CRYPTSETUP_UTILS_LOCKING_H #define _CRYPTSETUP_UTILS_LOCKING_H +#include + struct crypt_device; struct crypt_lock_handle; struct device; From 3ebbceaef211a4d6bba1327e6bd1e1399db619fa Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 13 Feb 2021 18:51:14 +0100 Subject: [PATCH 115/149] Fix veritysetup exit code for bad root hash with FEC enabled. If FEC was enabled, the error for bad root hash was replaced by error correction (datga were ok, only root hash was wrong). Do not run recovery test if root hash is incorrect. --- lib/verity/verity_hash.c | 2 +- tests/verity-compat-test | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index 2f10f54e..13b4c531 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -373,7 +373,7 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, 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) ? -EINVAL : 0; if (r) log_err(cd, _("Verification of root hash failed.")); else diff --git a/tests/verity-compat-test b/tests/verity-compat-test index ca6ebcf2..89eacd70 100755 --- a/tests/verity-compat-test +++ b/tests/verity-compat-test @@ -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 @@ -363,6 +387,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 From dbd20776bc1c81e9e606123523130cef74b0b612 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 13 Feb 2021 18:55:36 +0100 Subject: [PATCH 116/149] Fix dm-verity FEC calculation if stored in the same image with hashes. 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 FEC area itself. This produces unusable and too large FEC data. (There is not a problem if FEC image is a separate image.) This patch fixes the problem, introducing FEC blocks calculation as: -If hash device is in a separate image, metadata covers the whole rest of the image after hash area. (Unchanged behaviour.) -If hash and FEC device is in the image, metadata ends on the FEC area offset. This should probably fix several issues reported with FEC wrong calculations. Fixes: #554 --- lib/libdevmapper.c | 8 +++--- lib/utils_dm.h | 7 ++--- lib/verity/verity.c | 2 +- lib/verity/verity.h | 4 +++ lib/verity/verity_fec.c | 59 ++++++++++++++++++++++++++++++---------- tests/verity-compat-test | 25 ++++++++++++----- 6 files changed, 75 insertions(+), 30 deletions(-) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 72bf4952..ee4c3ae8 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -731,7 +731,7 @@ static char *get_dm_verity_params(const struct dm_target *tgt, uint32_t flags) snprintf(fec_features, sizeof(fec_features)-1, " 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); } else *fec_features = '\0'; @@ -3020,8 +3020,8 @@ int dm_crypt_target_set(struct dm_target *tgt, uint64_t seg_offset, uint64_t seg 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 char* root_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; @@ -3039,7 +3039,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; diff --git a/lib/utils_dm.h b/lib/utils_dm.h index 9a52aeba..d5a2b43e 100644 --- a/lib/utils_dm.h +++ b/lib/utils_dm.h @@ -122,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 { @@ -191,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 char* root_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, diff --git a/lib/verity/verity.c b/lib/verity/verity.c index f32d4e68..9063aea6 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -310,7 +310,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; diff --git a/lib/verity/verity.h b/lib/verity/verity.h index 335ec427..2269649b 100644 --- a/lib/verity/verity.h +++ b/lib/verity/verity.h @@ -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 diff --git a/lib/verity/verity_fec.c b/lib/verity/verity_fec.c index 220aeac9..f185574f 100644 --- a/lib/verity/verity_fec.c +++ b/lib/verity/verity_fec.c @@ -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,7 @@ 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; struct fec_input_device inputs[FEC_INPUT_DEVICES] = { { .device = crypt_data_device(cd), @@ -214,7 +216,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 +233,10 @@ int VERITY_FEC_process(struct crypt_device *cd, return -EINVAL; } - r = -EIO; + if (!inputs[0].count || !inputs[1].count) { + log_err(cd, _("Invalid FEC segment length.")); + return -EINVAL; + } if (check_fec) fd = open(device_path(fec_device), O_RDONLY); @@ -259,15 +265,6 @@ 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); out: if (inputs[0].fd != -1) @@ -279,3 +276,37 @@ int VERITY_FEC_process(struct crypt_device *cd, 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; + blocks -= VERITY_hash_offset_block(params); + + /* Protected data */ + blocks += params->data_size; + + return blocks; +} diff --git a/tests/verity-compat-test b/tests/verity-compat-test index 89eacd70..7f381e7c 100755 --- a/tests/verity-compat-test +++ b/tests/verity-compat-test @@ -252,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 @@ -450,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" @@ -467,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 From c760ae36ea76fcc8f4ce7432a3ab0b4c3a5af8e3 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 13 Feb 2021 19:40:00 +0100 Subject: [PATCH 117/149] Get rid of the long paramete list in FEC verity function. Also params struct will be needed in following patch. --- lib/verity/verity_hash.c | 115 +++++++++++++-------------------------- 1 file changed, 38 insertions(+), 77 deletions(-) diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index 13b4c531..d7dc4a45 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -241,20 +241,9 @@ 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; @@ -263,35 +252,31 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, off_t hash_level_size[VERITY_MAX_LEVELS]; off_t data_file_blocks; off_t data_device_size = 0, hash_device_size = 0; + off_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); + 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 < 0 || hash_position < 0) { - log_err(cd, _("Invalid size parameters for verity device.")); - return -EINVAL; - } - - 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 (mult_overflow(&data_device_size, params->data_size, params->data_block_size)) { log_err(cd, _("Device offset overflow.")); return -EINVAL; } - 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; @@ -299,17 +284,17 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, log_dbg(cd, "Using %d hash levels.", levels); - if (mult_overflow(&hash_device_size, hash_position, hash_block_size)) { + if (mult_overflow(&hash_device_size, hash_position, params->hash_block_size)) { log_err(cd, _("Device offset overflow.")); return -EINVAL; } 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; @@ -317,10 +302,10 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, 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 +315,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,16 +342,16 @@ 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) @@ -403,19 +388,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,19 +406,7 @@ 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) From 75447d0d80eab45348cf3b332af21c78c9ff966a Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 13 Feb 2021 19:55:14 +0100 Subject: [PATCH 118/149] Fix debug message displaying required hash device size. If located on the same device with hashes, offset must be subtracted. (Also there could be one block more for superblock.) --- lib/verity/verity_hash.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index d7dc4a45..3f74e786 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -251,7 +251,7 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, 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; + off_t data_device_offset_max = 0, hash_device_offset_max = 0; off_t hash_position = VERITY_hash_offset_block(params); uint64_t dev_size; int levels, i, r; @@ -271,26 +271,25 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, } else data_file_blocks = params->data_size; - if (mult_overflow(&data_device_size, params->data_size, params->data_block_size)) { + if (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(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, params->hash_block_size)) { + if (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(crypt_data_device(cd)), "r"); if (!data_file) { log_err(cd, _("Cannot open device %s."), @@ -300,8 +299,6 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, goto out; } - log_dbg(cd, "Hash device size required: %" PRIu64 " bytes.", - hash_device_size); hash_file = fopen(device_path(crypt_metadata_device(cd)), verify ? "r" : "r+"); if (!hash_file) { log_err(cd, _("Cannot open device %s."), From e97ac9f58ca6a9ce3595fb7e5ef22d189c127db2 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 13 Feb 2021 20:43:33 +0100 Subject: [PATCH 119/149] Get rid of off_t integers and use uint64_t. Also move uint64 multiplication overflow check to internal library. --- lib/internal.h | 8 +++++++ lib/verity/verity_hash.c | 49 ++++++++++++++++------------------------ 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/lib/internal.h b/lib/internal.h index 576f6ebc..7540d20c 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -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 */ diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index 3f74e786..7a81b028 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -89,20 +89,12 @@ static int verify_hash_block(const char *hash_name, int version, 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; } @@ -248,11 +239,11 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, 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_offset_max = 0, hash_device_offset_max = 0; - off_t hash_position = VERITY_hash_offset_block(params); + 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; @@ -271,7 +262,7 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, } else data_file_blocks = params->data_size; - if (mult_overflow(&data_device_offset_max, params->data_size, params->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; } @@ -282,7 +273,7 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, log_err(cd, _("Hash area overflow.")); return -EINVAL; } - if (mult_overflow(&hash_device_offset_max, hash_position, params->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; } @@ -408,7 +399,7 @@ int VERITY_create(struct crypt_device *cd, 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), From b40018860b532af6722c71313d9613fe647cfdec Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Mon, 15 Feb 2021 16:49:23 +0100 Subject: [PATCH 120/149] Add tests for various keyslot cipher null bugs. --- tests/api-test-2.c | 24 +++++++++++++++++++++--- tests/luks2-reencryption-test | 27 +++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/tests/api-test-2.c b/tests/api-test-2.c index 0cfaef9f..8b62cb63 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -2884,6 +2884,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); @@ -2897,7 +2903,7 @@ static void Luks2KeyslotParams(void) 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)); @@ -2956,7 +2962,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); @@ -2985,7 +2991,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)); @@ -2995,6 +3001,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(); } diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index 37d6d2c1..353085ad 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -1384,5 +1384,32 @@ $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 +$CRYPTSETUP status $DEV_NAME | grep -q "key location: keyring" || fail +$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 -c aes-xts-plain64 -q $FAST_PBKDF_ARGON || fail +check_hash $PWD1 $HASH1 +# both keyslot and segment cipher must not be null +$CRYPTSETUP luksDump $DEV | grep -q "cipher_null" && fail + remove_mapping exit 0 From 7058b81bb67efe5c7466b6011d5de481e28cdc22 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 10 Feb 2021 17:48:56 +0100 Subject: [PATCH 121/149] Move cipher_null check in internal function crypt_is_cipher_null. Also removes tools helper so that we keep check in one place. --- lib/utils_crypt.c | 7 +++++++ lib/utils_crypt.h | 3 +++ src/cryptsetup.c | 8 ++++---- src/cryptsetup.h | 1 - src/utils_tools.c | 8 -------- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/utils_crypt.c b/lib/utils_crypt.c index 7dff02e0..5c88f8f2 100644 --- a/lib/utils_crypt.c +++ b/lib/utils_crypt.c @@ -177,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")); +} diff --git a/lib/utils_crypt.h b/lib/utils_crypt.h index 9ee6a617..9b749699 100644 --- a/lib/utils_crypt.h +++ b/lib/utils_crypt.h @@ -23,6 +23,7 @@ #ifndef _UTILS_CRYPT_H #define _UTILS_CRYPT_H +#include #include #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 */ diff --git a/src/cryptsetup.c b/src/cryptsetup.c index bff46963..9fb01f8a 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -1327,7 +1327,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))) { @@ -1725,7 +1725,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; @@ -1792,7 +1792,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); @@ -1895,7 +1895,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)); diff --git a/src/cryptsetup.h b/src/cryptsetup.h index eb77dbe2..5a23eeb5 100644 --- a/src/cryptsetup.h +++ b/src/cryptsetup.h @@ -97,7 +97,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); diff --git a/src/utils_tools.c b/src/utils_tools.c index d523c1aa..390590a5 100644 --- a/src/utils_tools.c +++ b/src/utils_tools.c @@ -597,14 +597,6 @@ int tools_wipe_all_signatures(const char *path) 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). */ From ba7fd45ba6f7d3bd89400a170767ed2c19cfc98e Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 10 Feb 2021 17:50:49 +0100 Subject: [PATCH 122/149] Fix broken detection of null cipher in LUKS2. This bug enabled to create LUKS2 keyslots encrypted by cipher_null when explicitely requested by user. LUKS2 was never meant to allow keyslot encryption with cipher_null. cipher_null is meant for debug purposes only as a segment cipher. --- lib/luks2/luks2_keyslot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/luks2/luks2_keyslot.c b/lib/luks2/luks2_keyslot.c index 60a45d75..074cda6a 100644 --- a/lib/luks2/luks2_keyslot.c +++ b/lib/luks2/luks2_keyslot.c @@ -148,7 +148,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) From 17bb1e2fddd915f1cf387b3443f2bb41f8051460 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 11 Feb 2021 11:15:20 +0100 Subject: [PATCH 123/149] Do not upload vk in keyring for cipher_null segment. It does not make sense to upload volume keys in kernel keyring if segment cipher is cipher_null. The real volume_key is thrown away and replaced with empty key anyway. --- lib/luks2/luks2_token.c | 9 ++++++++- lib/setup.c | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/luks2/luks2_token.c b/lib/luks2/luks2_token.c index 1e340451..80b6c0f4 100644 --- a/lib/luks2/luks2_token.c +++ b/lib/luks2/luks2_token.c @@ -383,6 +383,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 +405,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; } diff --git a/lib/setup.c b/lib/setup.c index 084c6457..488ecc9b 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3887,6 +3887,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; @@ -3898,8 +3899,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) @@ -4282,6 +4288,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; @@ -4357,8 +4364,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) From 1e68d73bc32a63091218f2b9dcd65a98d5e99fdb Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 11 Feb 2021 11:43:10 +0100 Subject: [PATCH 124/149] Fix device comparison for dm-crypt with cipher_null. Do not compare volume keys if segment uses cipher_null. The key is ignored by lower layer (internal libdevmapper) anyway. --- lib/setup.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index 488ecc9b..d0b8b7cf 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -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; From 196477d1946536c96d7956b24e34bbe068283ea8 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 11 Feb 2021 12:17:02 +0100 Subject: [PATCH 125/149] Replace bogus cipher_null keyslots before reencryption. By mistake LUKS2 allowed keyslots 'not-so-encrypted' by cipher_null (only explicitly requested by --cipher or --keyslot-cipher parameters). If we encounter such old key during reencryption let's replace the cipher for new keyslot with default LUKS2 keyslot cipher. --- src/cryptsetup.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 9fb01f8a..bf8bf278 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -1097,6 +1097,12 @@ 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; From 27eee9cfcb30071f78397584abe3913240045f39 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 12 Feb 2021 11:37:43 +0100 Subject: [PATCH 126/149] Add debug message for activated cipher_null device. --- lib/libdevmapper.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index ee4c3ae8..11578df0 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -1670,6 +1670,14 @@ int dm_create_device(struct crypt_device *cd, const char *name, 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))) From 44a9e7aa6220b708232647a1e0ff966c1f2b2be0 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 12 Feb 2021 18:09:30 +0100 Subject: [PATCH 127/149] Improve key handling with cipher_null in reencryption. --- lib/luks2/luks2_reencrypt.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index 5f80f91b..7297451c 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -2238,7 +2238,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 +2254,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; } @@ -2664,6 +2664,7 @@ static int reencrypt_load_by_passphrase(struct crypt_device *cd, struct luks2_hdr *hdr; struct crypt_lock_handle *reencrypt_lock; struct luks2_reenc_context *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 */ @@ -2730,6 +2731,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); From f25a1c92ece5336fdeb938088e3302453d7b59ed Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 16 Feb 2021 17:08:53 +0100 Subject: [PATCH 128/149] Prefer default cipher when reencrypting cipher_null device. By default when reencrypting LUKS2 device we regenerate only the volume key. But if the device was 'encrypted' by cipher_null this change did not make sense. The key was always empty. Change the behaviour so that unless user specifies --cipher parameter on command line, we change data encryption cipher to default when old segment cipher was cipher_null. --- src/cryptsetup.c | 5 +++++ tests/luks2-reencryption-test | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index bf8bf278..9366f806 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -3194,6 +3194,11 @@ static int action_reencrypt_luks2(struct crypt_device *cd) _set_reencryption_flags(¶ms.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); diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index 353085ad..014330cd 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -1406,9 +1406,9 @@ $CRYPTSETUP close $DEV_NAME 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 -c aes-xts-plain64 -q $FAST_PBKDF_ARGON || fail +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 +# both keyslot and segment cipher must not be null after reencryption with default params $CRYPTSETUP luksDump $DEV | grep -q "cipher_null" && fail remove_mapping From 207383782a5f81c3d20c943d3997e43d95f03d41 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 17 Feb 2021 15:00:19 +0100 Subject: [PATCH 129/149] Fix reencryption test on systems w/o keyring. --- tests/luks2-reencryption-test | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index 014330cd..93bddde7 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -653,6 +653,18 @@ function reencrypt_online_fixed_size() { fi } +function setup_luks2_env() { + echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $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 + $CRYPTSETUP close $DEV_NAME || fail +} + function valgrind_setup() { which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind." @@ -704,9 +716,11 @@ 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 @@ -1399,7 +1413,9 @@ 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 -$CRYPTSETUP status $DEV_NAME | grep -q "key location: keyring" || fail +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) From fb8aa6d03b4a92930722bc8a47b2f051aaca9d14 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 18 Feb 2021 11:08:32 +0100 Subject: [PATCH 130/149] Fix default xts mode key size in reencryption. Reencryption did not take into account adjusted xts key size configuration option. This patch fix the issue by using same logic as in luksFormat with xts mode selected for data encryption. --- src/cryptsetup.c | 31 ++++++++++++++++++------------- tests/luks2-reencryption-test | 6 +++++- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 9366f806..a003b11d 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -1242,6 +1242,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; @@ -1374,15 +1389,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); @@ -3215,10 +3222,8 @@ 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); diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index 93bddde7..56813b3c 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -654,7 +654,7 @@ function reencrypt_online_fixed_size() { } function setup_luks2_env() { - echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_ARGON $DEV || fail + 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 @@ -662,6 +662,8 @@ function setup_luks2_env() { 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 } @@ -736,6 +738,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 From c8c28cf6ddff082b909711841d1e528ceb3290cf Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 18 Feb 2021 14:19:09 +0100 Subject: [PATCH 131/149] Use crypt_is_cipher_null check where possible. --- lib/libdevmapper.c | 2 +- lib/luks1/keymanage.c | 2 +- lib/utils_storage_wrappers.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 11578df0..d3cb2442 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -651,7 +651,7 @@ static char *get_dm_crypt_params(const struct dm_target *tgt, uint32_t flags) } 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) { diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index b6575841..695d466a 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -1015,7 +1015,7 @@ static int LUKS_open_key(unsigned int keyIndex, 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: crypt_safe_free(AfKey); diff --git a/lib/utils_storage_wrappers.c b/lib/utils_storage_wrappers.c index 37f009d6..80d275b2 100644 --- a/lib/utils_storage_wrappers.c +++ b/lib/utils_storage_wrappers.c @@ -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; From 7825e0d4a638420d5968fadcb61e70cfca64b933 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 18 Feb 2021 14:22:51 +0100 Subject: [PATCH 132/149] Bypass keyring activation flag if cipher is null. --- lib/libdevmapper.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index d3cb2442..374ada13 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -654,11 +654,13 @@ static char *get_dm_crypt_params(const struct dm_target *tgt, uint32_t flags) 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; From ca1b41cf968ea6dd4e892b0d538d79bbf2b324b0 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 18 Feb 2021 15:01:01 +0100 Subject: [PATCH 133/149] Extend LUKS2 reencryption tests w/ cipher_null. --- tests/luks2-reencryption-test | 106 +++++++++++++++++++++++++++++++++- 1 file changed, 104 insertions(+), 2 deletions(-) diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index 56813b3c..c8246f22 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -296,7 +296,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 @@ -317,7 +317,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 @@ -1431,5 +1431,107 @@ 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 -c aes-cbc-essiv:sha256 --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 -c aes-cbc-essiv:sha256 --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 From b01ec207032fd6bf29bdd2146782d02cea377e26 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 23 Feb 2021 12:23:20 +0100 Subject: [PATCH 134/149] veritysetup: do not increase hash image size if hash area is not used. Do not write more than needed header if hash area is not used later. All space in hash area is then used in FEC calculation, so it makes no sense to add unused area. --- lib/verity/verity.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/verity/verity.c b/lib/verity/verity.c index 9063aea6..b7c63871 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -162,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; @@ -181,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)); @@ -204,7 +212,7 @@ int VERITY_write_sb(struct crypt_device *cd, 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."), From 4e2561df6d23b1eb86d4bd3be136de08707d22df Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 23 Feb 2021 12:33:39 +0100 Subject: [PATCH 135/149] verity: do not calculate hash offset if hash area is not used. Sometimes device is so small that there is only root hash needed and the hash area is not used. --- lib/verity/verity_fec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/verity/verity_fec.c b/lib/verity/verity_fec.c index f185574f..f97e3485 100644 --- a/lib/verity/verity_fec.c +++ b/lib/verity/verity_fec.c @@ -303,7 +303,8 @@ uint64_t VERITY_FEC_blocks(struct crypt_device *cd, } blocks /= params->data_block_size; - blocks -= VERITY_hash_offset_block(params); + if (blocks) + blocks -= VERITY_hash_offset_block(params); /* Protected data */ blocks += params->data_size; From 973474503a5b3780cb364b1bc9b8bb0c4f7199c2 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 23 Feb 2021 12:37:09 +0100 Subject: [PATCH 136/149] verity: do not process hash image if it is empty. --- lib/verity/verity_fec.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/verity/verity_fec.c b/lib/verity/verity_fec.c index f97e3485..e076c970 100644 --- a/lib/verity/verity_fec.c +++ b/lib/verity/verity_fec.c @@ -207,6 +207,7 @@ int VERITY_FEC_process(struct crypt_device *cd, unsigned int *errors) { int r = -EIO, fd = -1; + size_t ninputs = FEC_INPUT_DEVICES; struct fec_input_device inputs[FEC_INPUT_DEVICES] = { { .device = crypt_data_device(cd), @@ -233,10 +234,12 @@ int VERITY_FEC_process(struct crypt_device *cd, return -EINVAL; } - if (!inputs[0].count || !inputs[1].count) { + 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); @@ -265,7 +268,7 @@ int VERITY_FEC_process(struct crypt_device *cd, goto out; } - 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); From db8ce3f8187b11a6e54278763543e0ea5d59cf2b Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 23 Feb 2021 12:43:37 +0100 Subject: [PATCH 137/149] verity: run FEC check even if root hash fails. The error correction can fix even problem with root hash. For now, always return fail if initial check of root hash failed. FIXME: The FEC verify code need to be rewritten to repair only blocks where hash is wrong and the re-check hash after recovery, inclkuding root hash. Now we do not check hash after FEC recovery. The Reed-Solomon decoder can then "repair" code wrongly if parity is too damaged. For now, the information about FEC repaired errors is only advisory, it does not mean device is fully repaireable. --- lib/verity/verity.c | 11 ++++++++--- lib/verity/verity_hash.c | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/verity/verity.c b/lib/verity/verity.c index b7c63871..278f34ac 100644 --- a/lib/verity/verity.c +++ b/lib/verity/verity.c @@ -261,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, @@ -280,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) diff --git a/lib/verity/verity_hash.c b/lib/verity/verity_hash.c index 7a81b028..a4937813 100644 --- a/lib/verity/verity_hash.c +++ b/lib/verity/verity_hash.c @@ -346,7 +346,7 @@ static int VERITY_create_or_verify_hash(struct crypt_device *cd, bool verify, 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) ? -EINVAL : 0; + r = memcmp(root_hash, calculated_digest, digest_size) ? -EFAULT : 0; if (r) log_err(cd, _("Verification of root hash failed.")); else From 855628f796fb70fdba7cfafc095e798a8d9dd72f Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 23 Feb 2021 12:25:16 +0100 Subject: [PATCH 138/149] Add tests for cipher_null suspend/resume. --- tests/api-test-2.c | 27 +++++++++++++++++++++++++++ tests/api-test.c | 27 +++++++++++++++++++++++++++ tests/compat-test | 6 ++++++ tests/compat-test2 | 6 ++++++ 4 files changed, 66 insertions(+) diff --git a/tests/api-test-2.c b/tests/api-test-2.c index 8b62cb63..c6b03a73 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -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(1, 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) diff --git a/tests/api-test.c b/tests/api-test.c index bd16f595..22e6b2b9 100644 --- a/tests/api-test.c +++ b/tests/api-test.c @@ -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) diff --git a/tests/compat-test b/tests/compat-test index 0947667b..51c71011 100755 --- a/tests/compat-test +++ b/tests/compat-test @@ -712,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 diff --git a/tests/compat-test2 b/tests/compat-test2 index 912be598..7045c843 100755 --- a/tests/compat-test2 +++ b/tests/compat-test2 @@ -662,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 From 91e8f5ffd9181215173fa6bd8dcced80ea9a4fca Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 19 Feb 2021 13:02:45 +0100 Subject: [PATCH 139/149] Remove redundant check. It can't be non-LUKS2 device at this branching. --- lib/setup.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index d0b8b7cf..9efab370 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3138,10 +3138,6 @@ int crypt_resume_by_passphrase(struct crypt_device *cd, 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) @@ -3209,10 +3205,6 @@ int crypt_resume_by_keyfile_device_offset(struct crypt_device *cd, 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) From b2135a75e24a8ac5552dbf09b6173bd8e12e0c0a Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 19 Feb 2021 13:10:09 +0100 Subject: [PATCH 140/149] Do not upload VK in keyring when data cipher is null. --- lib/setup.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index 9efab370..226a6c59 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3137,7 +3137,7 @@ int crypt_resume_by_passphrase(struct crypt_device *cd, keyslot = r; - if (crypt_use_keyring_for_vk(cd)) { + if (crypt_use_keyring_for_vk(cd) && !crypt_cipher_is_null(crypt_get_cipher_spec(cd))) { r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd, &cd->u.luks2.hdr, vk, keyslot); if (r < 0) @@ -3204,7 +3204,7 @@ int crypt_resume_by_keyfile_device_offset(struct crypt_device *cd, goto out; keyslot = r; - if (crypt_use_keyring_for_vk(cd)) { + if (crypt_use_keyring_for_vk(cd) && !crypt_cipher_is_null(crypt_get_cipher_spec(cd))) { r = LUKS2_volume_key_load_in_keyring_by_keyslot(cd, &cd->u.luks2.hdr, vk, keyslot); if (r < 0) @@ -3284,7 +3284,7 @@ int crypt_resume_by_volume_key(struct crypt_device *cd, goto out; r = 0; - if (crypt_use_keyring_for_vk(cd)) { + if (crypt_use_keyring_for_vk(cd) && !crypt_cipher_is_null(crypt_get_cipher_spec(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); From c68cd0a4835c835d2dbe842574d4a1442a832c62 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 19 Feb 2021 18:49:07 +0100 Subject: [PATCH 141/149] Unify crypt_resume_by internal code. --- lib/setup.c | 89 ++++++++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index 226a6c59..67a888b2 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3098,6 +3098,37 @@ int crypt_suspend(struct crypt_device *cd, 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; + + /* LUKS2 path only */ + if (crypt_use_keyring_for_vk(cd) && !crypt_is_cipher_null(crypt_get_cipher_spec(cd))) { + 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); + + return r; +} + int crypt_resume_by_passphrase(struct crypt_device *cd, const char *name, int keyslot, @@ -3133,28 +3164,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) && !crypt_cipher_is_null(crypt_get_cipher_spec(cd))) { - 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 == -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; } @@ -3193,31 +3209,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) && !crypt_cipher_is_null(crypt_get_cipher_spec(cd))) { - 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 +3287,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) && !crypt_cipher_is_null(crypt_get_cipher_spec(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; } From 56a01574ff6eed663abe8f994a2108abe7ac3c66 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 19 Feb 2021 19:00:59 +0100 Subject: [PATCH 142/149] Allow LUKS resume for device with cipher_null. --- lib/libdevmapper.c | 8 ++++++-- lib/setup.c | 12 ++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/libdevmapper.c b/lib/libdevmapper.c index 374ada13..e6d7e68a 100644 --- a/lib/libdevmapper.c +++ b/lib/libdevmapper.c @@ -2943,7 +2943,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 @@ -2955,7 +2957,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); diff --git a/lib/setup.c b/lib/setup.c index 67a888b2..fc44075d 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -3104,9 +3104,15 @@ static int resume_by_volume_key(struct crypt_device *cd, const char *name) { int digest, r; + struct volume_key *zerokey = NULL; - /* LUKS2 path only */ - if (crypt_use_keyring_for_vk(cd) && !crypt_is_cipher_null(crypt_get_cipher_spec(cd))) { + 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; @@ -3126,6 +3132,8 @@ static int resume_by_volume_key(struct crypt_device *cd, if (r < 0) crypt_drop_keyring_key(cd, vk); + crypt_free_volume_key(zerokey); + return r; } From 83811b5ea9ceb85f625b038cb2afb3b4c8002942 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 23 Feb 2021 11:28:03 +0100 Subject: [PATCH 143/149] Fix keyslots size overflow when device too small. It properly failed but debug message was confusing. Now it fails later properly with "device too small" error message. --- lib/luks2/luks2_json_format.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/luks2/luks2_json_format.c b/lib/luks2/luks2_json_format.c index 33b7e019..9ac49828 100644 --- a/lib/luks2/luks2_json_format.c +++ b/lib/luks2/luks2_json_format.c @@ -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); } From 426a8b9df0567c5315a8ff954693a801c0ffeb82 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 23 Feb 2021 13:22:45 +0100 Subject: [PATCH 144/149] Fix reversed condition in LUKS2 api test. get_luks2_offsets is based on get_luks_offsets from api-test.c but for some odd reason 'metadata_device' parameter had reversed meaning. --- tests/api-test-2.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/tests/api-test-2.c b/tests/api-test-2.c index c6b03a73..2f11f0be 100644 --- a/tests/api-test-2.c +++ b/tests/api-test-2.c @@ -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; } @@ -612,7 +612,7 @@ static void SuspendDevice(void) OK_(crypt_deactivate(cd, CDEVICE_1)); CRYPT_FREE(cd); - 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)); /* Resume device with cipher_null */ @@ -672,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)); @@ -727,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)); @@ -996,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 @@ -1187,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 @@ -1292,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 @@ -1421,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 @@ -1515,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)); @@ -1671,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 @@ -1863,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 @@ -2139,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) @@ -2551,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)); @@ -2796,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 */ @@ -2924,7 +2924,7 @@ 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); @@ -3064,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 @@ -3349,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)); @@ -3530,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)); @@ -3746,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)); From 93382071a53f3b1a2829413beda37d922f1bd35b Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 23 Feb 2021 20:46:56 +0100 Subject: [PATCH 145/149] Fix luksResume when called on non-LUKS device. --- lib/setup.c | 2 +- src/cryptsetup.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/setup.c b/lib/setup.c index fc44075d..f68bdb39 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -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) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index a003b11d..02378c3a 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -2227,12 +2227,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(device_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 { From 969be38a7a3456d0ead2ce35697f6047ebfbfcc9 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 24 Feb 2021 12:59:05 +0100 Subject: [PATCH 146/149] Add error message when suspending wrong device. In case user tries to suspend LUKS data device instead of dm-crypt mapping. See issue#622. --- src/cryptsetup.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 02378c3a..6e3120e4 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -2214,8 +2214,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; From 7d1b40a3a6b9e2785879c1472a39d04d89a769ff Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 24 Feb 2021 13:11:47 +0100 Subject: [PATCH 147/149] Silent error messages in tests. --- tests/compat-test | 2 +- tests/compat-test2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/compat-test b/tests/compat-test index 51c71011..8b038036 100755 --- a/tests/compat-test +++ b/tests/compat-test @@ -767,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 diff --git a/tests/compat-test2 b/tests/compat-test2 index 7045c843..1612569d 100755 --- a/tests/compat-test2 +++ b/tests/compat-test2 @@ -724,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 From 9e5c87b4496e701d9c9e89db8bb3f5a1e5acf6a8 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 24 Feb 2021 22:45:43 +0100 Subject: [PATCH 148/149] Fix allocation of volume key in LUKS1 open_key. This function should not return allocated key on error path. Recent patch (suspend/resume) introduced a memory leak because of this. --- lib/luks1/keymanage.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index 695d466a..180407e0 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -962,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; @@ -981,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; @@ -1008,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 && 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; @@ -1033,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, From e99767e7f17661060e9f1f0b1c2ab10bc59e5fe1 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 31 Oct 2017 12:25:22 +0100 Subject: [PATCH 149/149] Test coverity scan triggered by Travis. --- .travis.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0bb8c39e..3ce2a6ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,15 +9,18 @@ compiler: - gcc env: - # MAKE_CHECK="gcrypt" - - MAKE_CHECK="openssl" - # MAKE_CHECK="kernel" + global: + # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created + # via the "travis encrypt" command using the project repo's public key + - secure: "xkOTgfKxiBanrd1OjkOnoceEQpYAsNeiBBZcVXsTgxHJZSYy7zWFFZ/tgAYdaicFsgqGaU+zkBkoAiHb+9hb/dFosZuLvyCZ6yJagENpsEgVvWk8BljHAlJ7+ISWPEqzAZeIiuS9G8hl0Lx236LZHmcVbklFCbaiyeJurjEVm2pqbsTaofdQVGbeDrRI7IFfeTK9WHDkIdPvr3//1IgbhLVlYWNdcCxBQkXzcFIjNT0PwzlabNniaznt6kv8RnlXINTJGbuU+4aYWbGCx5j+ktDfEZap8eU/Ne7h4utPoqE+UVNFGMqCezplJG5GVnvrX/xSovN/+GVr1QUxkXF11DKZ1/W+RhAqCO4jkdQ2ONaO4QIHDZLQVgFZ6KoX/i/9f33sBF8fazJYE2fjqw/h21ajlrUeS0UfcY03+JBS2yFHO3C8b8dhsACX153PCmxCrAORUIYNhVrdYj/tHzGUkYVDMTw7vpIIXW/gGaIwhxSP6fxHiPw4iKRNHF/Du4V9NYp4SC8Y9U2vWcuLPrGPtyTSkAIW6RTzr0U7sRfc87zWvc1MG2Y1TKW2e4VrNe+mbVkWs5l+ymsYsgQQnXX2FmIN+UkgtgfvAPCeZtzZV+INUc5xEjZf4bl6FFpCGNiA2rZM2YWY+fXVX0iBe6VGRHg8PpPXUbpk+U7ZVQyRNBg=" + - MAKE_CHECK="openssl_compile" branches: only: - master - wip-luks2 - v2.3.x + - coverity_scan before_install: - uname -a @@ -40,3 +43,13 @@ script: after_script: - travis_after_script + +addons: + coverity_scan: + project: + name: "mbroz/cryptsetup" + description: "Build submitted via Travis CI" + notification_email: gmazyland@gmail.com + build_command_prepend: "./configure; make clean" + build_command: "make -j 2" + branch_pattern: coverity_scan

      S|#2GJ0Sqx6} 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 CO<`OB From 7f0ddcbed4ecc89ec437d3ffd2dca8a0d1e335f0 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Tue, 22 Sep 2020 14:09:20 +0200 Subject: [PATCH 062/149] bitlk: Show better error when trying to open an NTFS device Both BitLocker version 1 and NTFS have the same bootcode eb 52 90 so when trying to open an NTFS device user will get error message saying that BitLocker version 1 is not supported. This patch switches to check the superblock first to inform user that the device is not a BITLK device. --- lib/bitlk/bitlk.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 212ab7d0..0b202113 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -501,18 +501,6 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params) 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; - goto out; - } else if (memcmp(sig.boot_code, BITLK_BOOTCODE_V2, sizeof(sig.boot_code)) == 0) - ; - else { - log_err(cd, _("Invalid or unknown boot signature for BITLK device.")); - r = -EINVAL; - goto out; - } - if (memcmp(sig.signature, BITLK_SIGNATURE, sizeof(sig.signature)) == 0) { params->togo = false; fve_offset = BITLK_HEADER_METADATA_OFFSET; @@ -525,6 +513,18 @@ int BITLK_read_sb(struct crypt_device *cd, struct bitlk_metadata *params) 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; + goto out; + } else if (memcmp(sig.boot_code, BITLK_BOOTCODE_V2, sizeof(sig.boot_code)) == 0) + ; + else { + log_err(cd, _("Invalid or unknown boot 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."); From 1d615cf6dd780cceaa64e46e2dbcd927cad97dce Mon Sep 17 00:00:00 2001 From: Samanta Navarro Date: Sat, 3 Oct 2020 11:26:46 +0000 Subject: [PATCH 063/149] fix typo in manual page --- man/cryptsetup.8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 643012d4..01c59a86 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -142,7 +142,7 @@ Updates parameters of active device 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, From 745c75b5b09496a538dc1e73e2541a8615e3d248 Mon Sep 17 00:00:00 2001 From: dofrupisla <2624412-dofrupisla@users.noreply.gitlab.com> Date: Mon, 5 Oct 2020 19:46:35 +0000 Subject: [PATCH 064/149] Fix typo --- man/cryptsetup.8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 01c59a86..08c722b6 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -1093,7 +1093,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. From d63d399c17ab980c1527d84cb9b87431b4b6d98d Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Mon, 12 Oct 2020 12:23:31 +0200 Subject: [PATCH 065/149] Fix cryptsetup resize using LUKS2 tokens. Fix a bug where cryptsetup needlessly asked for passphrase even though volume key was already unlocked via LUKS2 token. Fixes: #601. --- src/cryptsetup.c | 6 ++++-- tests/compat-test2 | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index b32f167d..557056f0 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -715,7 +715,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, @@ -731,7 +733,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; diff --git a/tests/compat-test2 b/tests/compat-test2 index c3852cd3..912be598 100755 --- a/tests/compat-test2 +++ b/tests/compat-test2 @@ -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 From 782f4c5029795e4a2e3a6bcb3fc0b0db4dd4d149 Mon Sep 17 00:00:00 2001 From: lixiaokeng Date: Mon, 9 Nov 2020 09:26:08 +0800 Subject: [PATCH 066/149] lib: check return value of malloc in BITLK_read_sb The return value of malloc vmk and params->fvek is not checked. Here we add checking. Signed-off-by: Lixiaokeng Signed-off-by: Linfeilong --- lib/bitlk/bitlk.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 0b202113..b62d6d58 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -674,6 +674,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); @@ -702,6 +706,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)); From 82490aaaa3c5836b6ad1bd9ef04430e708864862 Mon Sep 17 00:00:00 2001 From: lixiaokeng Date: Mon, 9 Nov 2020 09:34:51 +0800 Subject: [PATCH 067/149] lib: fix potential segfault in _keyslot_repair The value of vk may be NULL in _keyslot_repair. It will be dereferenced in LUKS_generate_phdr. Check it to avoid segfault. Signed-off-by: Lixiaokeng Signed-off-by: Linfeilong --- lib/luks1/keymanage.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index a08ff50f..b32da096 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -386,6 +386,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.")); From 0d90efac887deb7e1657cd63d48eab265e128bbc Mon Sep 17 00:00:00 2001 From: lixiaokeng Date: Mon, 9 Nov 2020 09:42:38 +0800 Subject: [PATCH 068/149] lib: fix potential segfault in _crypt_cipher_crypt The value of header may be NULL. Check it to avoid segfault. Signed-off-by: Lixiaokeng Signed-off-by: Linfeilong --- lib/crypto_backend/crypto_cipher_kernel.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/crypto_backend/crypto_cipher_kernel.c b/lib/crypto_backend/crypto_cipher_kernel.c index 1a8aecfc..b2a92b51 100644 --- a/lib/crypto_backend/crypto_cipher_kernel.c +++ b/lib/crypto_backend/crypto_cipher_kernel.c @@ -152,6 +152,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; From 78f33946f1f635cb630051c6c838418354a34b51 Mon Sep 17 00:00:00 2001 From: lixiaokeng Date: Mon, 9 Nov 2020 09:45:42 +0800 Subject: [PATCH 069/149] lib: fix potential segfault in LUKS2_token_buffer_free The value of h may be NULL. Check it vefore visiting its memeber to avoid segfault. Signed-off-by: Lixiaokeng Signed-off-by: Linfeilong --- lib/luks2/luks2_token.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/luks2/luks2_token.c b/lib/luks2/luks2_token.c index ad6722a3..c8be1c14 100644 --- a/lib/luks2/luks2_token.c +++ b/lib/luks2/luks2_token.c @@ -329,7 +329,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); From 1bc6caceb1420bf1c02833d3919985c11aba020b Mon Sep 17 00:00:00 2001 From: lixiaokeng Date: Mon, 9 Nov 2020 09:52:32 +0800 Subject: [PATCH 070/149] lib: fix memory leak in crypt_pbkdf_check There is a memory leak when PBKDF2_temp > UINT32_MAX. Here, we change return to goto out to free key. Signed-off-by: Lixiaokeng Signed-off-by: Linfeilong --- lib/crypto_backend/pbkdf_check.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/crypto_backend/pbkdf_check.c b/lib/crypto_backend/pbkdf_check.c index 7444e0aa..2c86036c 100644 --- a/lib/crypto_backend/pbkdf_check.c +++ b/lib/crypto_backend/pbkdf_check.c @@ -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; } From b5894ce1ab63fb9c48eb9cc5182e4e8dd42a6347 Mon Sep 17 00:00:00 2001 From: Joerg Kastning Date: Fri, 23 Oct 2020 18:35:36 +0000 Subject: [PATCH 071/149] Update cryptsetup.8 * Rename "BASIC COMMANDS" to "BASIC ACTIONS" * Changed a sentence saying that luksFormat would work on unmapped luks containers, only. * Insert 6 examples of using cryptsetup for luks containers --- man/cryptsetup.8 | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index 08c722b6..ff680a47 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -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 \-\-type @@ -280,7 +280,7 @@ 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. +In case the device you are going to call luksFormat on already contains a LUKS device that is mapped, you have to close the device first in order to be able to format it. To use LUKS2, specify \fI\-\-type luks2\fR. @@ -837,7 +837,7 @@ If \-\-debug\-json is used, additional LUKS2 JSON data structures are printed. .TP .B "\-\-type Specifies required device type, for more info -read \fIBASIC COMMANDS\fR section. +read \f BASIC ACTIONS\fR section. .TP .B "\-\-hash, \-h \fI\fR" Specifies the passphrase hash for \fIopen\fR (for plain and @@ -1486,6 +1486,27 @@ 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. From 829a2379a149980c7736b086a88ee139c2a041a6 Mon Sep 17 00:00:00 2001 From: Joerg Kastning Date: Tue, 10 Nov 2020 12:17:14 +0000 Subject: [PATCH 072/149] Update cryptsetup.8 * Improved information about calling luksFormat on devices. --- man/cryptsetup.8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/cryptsetup.8 b/man/cryptsetup.8 index ff680a47..59897430 100644 --- a/man/cryptsetup.8 +++ b/man/cryptsetup.8 @@ -280,7 +280,7 @@ 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. -In case the device you are going to call luksFormat on already contains a LUKS device that is mapped, you have to close the device first in order to be able to format it. +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. From 82f8fb653cdfe313645ed9d70f61a9dabb4f6d22 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Tue, 10 Nov 2020 14:59:35 +0100 Subject: [PATCH 073/149] bitlk: Allow running bitlk_metadata_free with NULL --- lib/bitlk/bitlk.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index b62d6d58..74d7df42 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -456,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); From 505effe0853cfd9819e0b22990991e9a1edac81b Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Tue, 10 Nov 2020 15:00:33 +0100 Subject: [PATCH 074/149] bitlk: Fix key sizes for BITLK encryption types It makes more sense to return "real" key sizes, e.g. 256 bit for AES-XTS 128 and 256/512 bit for AES-CBC with Elephant which has a separate key for the Elephant mode. --- lib/bitlk/bitlk.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 74d7df42..3da57214 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -587,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; @@ -609,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; @@ -1098,7 +1098,7 @@ static int decrypt_key(struct crypt_device *cd, } 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, From 51bf5435f9706f6783d8876f121528578ff215c3 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 23 Nov 2020 13:40:31 +0100 Subject: [PATCH 075/149] Enable Travis test for GOST crypto in VeraCrypt (install GOST external kernel crypto modules). --- .travis-functions.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis-functions.sh b/.travis-functions.sh index dbb1444b..f852b282 100644 --- a/.travis-functions.sh +++ b/.travis-functions.sh @@ -102,7 +102,13 @@ function travis_install_script keyutils \ libjson-c-dev \ libblkid-dev \ + dkms \ + linux-headers-$(uname -r) \ + linux-modules-extra-$(uname -r) \ || return + + # For VeraCrypt test + sudo apt-get install gost-crypto-dkms } function travis_before_script From 3a29cbbf5d529bf3411e1fde7d36ea082ad3e2b9 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 21 Oct 2020 11:44:44 +0200 Subject: [PATCH 076/149] Add missing translation anotation. --- src/cryptsetup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 557056f0..ecfd072e 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -1256,8 +1256,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."); From d2ee949d88f021b3f9131092711cf94798d09693 Mon Sep 17 00:00:00 2001 From: Samanta Navarro Date: Sat, 28 Nov 2020 11:40:28 +0000 Subject: [PATCH 077/149] lib: fix utils_safe_memory function comments. --- lib/libcryptsetup.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index 3d002c0c..1d7bb324 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -2336,17 +2336,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); @@ -2356,17 +2354,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); From 7866e71d6f95b62fdf03b76acc0b1db6f1221681 Mon Sep 17 00:00:00 2001 From: Samanta Navarro Date: Sat, 28 Nov 2020 11:41:18 +0000 Subject: [PATCH 078/149] Fix typos. Typos found with codespell. --- FAQ | 6 +++--- lib/bitlk/bitlk.c | 4 ++-- lib/libcryptsetup.h | 8 ++++---- tests/luks2-reencryption-test | 2 +- tests/reencryption-compat-test | 2 +- tests/reencryption-compat-test2 | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/FAQ b/FAQ index 82e8f4ab..3c7dcadb 100644 --- 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 @@ -973,7 +973,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 @@ -2632,7 +2632,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. diff --git a/lib/bitlk/bitlk.c b/lib/bitlk/bitlk.c index 3da57214..c054d92b 100644 --- a/lib/bitlk/bitlk.c +++ b/lib/bitlk/bitlk.c @@ -1160,14 +1160,14 @@ int BITLK_activate(struct crypt_device *cd, if (next_vmk->protection == BITLK_PROTECTION_PASSPHRASE) { r = bitlk_kdf(cd, password, passwordLen, false, next_vmk->salt, &vmk_dec_key); if (r) { - /* something wrong happend, but we still want to check other key slots */ + /* 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) { - /* something wrong happend, but we still want to check other key slots */ + /* something wrong happened, but we still want to check other key slots */ next_vmk = next_vmk->next; continue; } diff --git a/lib/libcryptsetup.h b/lib/libcryptsetup.h index 1d7bb324..0e8c07b6 100644 --- a/lib/libcryptsetup.h +++ b/lib/libcryptsetup.h @@ -1485,11 +1485,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); @@ -1499,7 +1499,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); @@ -2295,7 +2295,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. diff --git a/tests/luks2-reencryption-test b/tests/luks2-reencryption-test index df02d8ac..37d6d2c1 100755 --- a/tests/luks2-reencryption-test +++ b/tests/luks2-reencryption-test @@ -275,7 +275,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} diff --git a/tests/reencryption-compat-test b/tests/reencryption-compat-test index 263da0d6..6dc85bd5 100755 --- a/tests/reencryption-compat-test +++ b/tests/reencryption-compat-test @@ -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 diff --git a/tests/reencryption-compat-test2 b/tests/reencryption-compat-test2 index 4ec26fa0..812788a4 100755 --- a/tests/reencryption-compat-test2 +++ b/tests/reencryption-compat-test2 @@ -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 From fb49d9630dd5468a2935dc521b3273665280c3ca Mon Sep 17 00:00:00 2001 From: Samanta Navarro Date: Sat, 28 Nov 2020 11:36:19 +0000 Subject: [PATCH 079/149] lib: always clear size in crypt_safe_free Writing into allocated memory right before calling free can be optimized away by smart compilers. To prevent this, a volatile access must be performed. This happens already in crypt_safe_memzero. It was difficult to provoke GCC to remove the assignment, but I was able to find a way to prove the theory: * Build cryptsetup with: CFLAGS="-flto -O3 -g" ./configure --enable-static * Create main.c: #include int main(void) { char *x = crypt_safe_alloc(64); crypt_safe_free(x); return 0; } * Build the program with: gcc -O3 -flto -static -o main main.c -lcryptsetup * Disassemble: objdump -d main My output on an amd64 system is: 0000000000401670

    |Qjz*q6KBLfVr|3V4cE7!Bmg3;woo_; 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 z

    S|#2GJ0Sqx6} zc{|!~NB9&+k3{q_#IV0@(UK1YXY@O!W))18?^Q{~RkNVi>03KEf5V_ZZl87SbHL@# z&xJ*C^rJ|}G#TbQKub9+&@iu5*el0zm?_-(8f{+R{z87sHYUV26XN$a&%$Ku-hu`z z>%kc^oG**h{tL%?>Zx&u^RzMvjAuld%{lEjg-6zekMx`TH)5Si+Mm37l?}Cd*drug zBZsI!koAf+kY(l7Uv8YizWK~h>+l18{%ag^{rCqdIS(9EQ*gY{9MnFF$IPlNsK2qs zS@XI4aD%EEUpAvXsp?7cLTmA{Rr753@w$?A5&iqq4+5)B1xaLFAd?nmepj*vvOHn+ zwA80u8Ky5X$bG@p-nT`7Yxt|mG&pnLEhcUtQTkb~8j*TW-c)(Q)rc{_aTQ}^=j`u( z{;3y@>576B&aaOiDOh(%zY;E_(jylr+YBoN?>edef5Av|rEi&1$4U@DB7U%joU-p^ zowjWIW7!U2(`*`mAaU~#XUCK8v~su+LI)%Lo@hH@z6*I0&$N9K10zDj_Y;tW7Z`Pe zv?ERj2rG|RcBpl`1m zdBwi_|B&nTb|ZOa8rX08d4av4pan9@r=wa}h6g64{MUwE0(C{4&!A1LwJ;m`Ph{1V zVVB)~Ta(KKbV(cgob1^M+A1SzFQ$*RZb$X{8!LLR{&g8CRUDvVXWjE=L_K}v#Rnxy74o1_aE z4(~llEpq#}tjoNB6-ulIw4OhF-o;d%2mqr_b#)Uw0JrmG#E+%~2sBE3K2ZwiQI@8L zp10)lT8%ydJw=UEZFsgOc%9Z)sQ`A_ExLzu$EC>&^VxMW8nQT9aQ&?F>o9rsRs~0& zcN4QhKI%0XjI7==djEs`NdyKJ3WlB4WZ$IWYOxCQWDA@lUA2*`v`)0hBnYmHj<!`>^aDOaou(iv;|P*B&m^M}?A<31hx=KJ?K>URp@|LnW8J znN}Qj`-=gC5wGz<$KE#GPe>myw`Dmz8P0K8RN#JMDyoSc%{j?xV!oB6fL1&h(9Q6S zs@(RI5;zG~eZ(}2*e;mWamuzHTMFim)g=rUN$mSquf3EOm%{pO5*$QcHW1?Rh?W-p za5rbW0_C_Nm#yN{A7qeeI%ST{ha%kGXTjF&WE-VkL1opW1))ttvXzGJcZ}Nbz_5t) zIM$onFzGxy=A>ONQgcSs6OFA}u90G4mpDv0E12K}#0x2B! ze~LH@Uj#-(P8g&1x4FRI`NAs^g`G}9fWHjn4$HNht3ri1&T4`l%8{4Bw^+3J`ti$YgT|0h3 z>mPay4sW~bX)e=BsaGiQht<}VvjISAib(G@$veL~c3E&GY{XNm%XFy#a59hMlH#RI zt3}yEj-M(Q{w+5Ygu}feG?=-LdAj26jy0h+Wn73(p!Ahx1{+kJ`D|9cl#l7a&kjCw z)s`e{zD#1zZzFq)kiTsCAO2ZCwaYtGjk&t>#j?c@hK^y!=k>^cU*>fOX@24O6r{Wx z$>ueLp5g>CxKd(n^eqEd6rM&YMQT( z{Y3p@>FQt3IzE94Bak zS|7FaJ8F0zC$yS3)U}~yUhvhM=3t=4U(gZ8N}F%6(fL#S3ww5zkg5`~fw>yu?7a zqJK%J5HyCFK&pvlMNR=jMwKB^w)j_duUSpdjWTikvhChz%z8ZK$XM&V!=#jSd!#9zCXzXl!8%kgt<*sj{g_s zrX5!co^1i8Ob}j{|Ik18Q@g_}_;ls?P%Gy2Ef*z?< z(_*@n)=246Zoj4az<}!y-lP36T){0*NT4@<W&w+YlmujrlS1t+bVRgWK$GL_b$vvd;B*#=7&}!3 zb#aV0&po%Xt(S=)C&!P7B{#?b6GI)6cnV<@5xOd*3Tdp;{gOT)6WT+?-V^6 zX9}}6v?549D+*gWMoWrjqmHf+Mh)cx)7SbHE*ge`-Ingp4{JSO1TYJDGT9U5Y?l?4 z-aH+ZwlIh=Cfaa-kg7=~5~K9LolWQS^6D^KFgXIcBZ!7Ql@CbgWwQm>egF6t`BVA+ z3PI_>5Z|sKf6*+fro~U|ZOgY^nM3VdrF7-|cgNA5;*gKhU8>X#agyqlInPi65bnTU z*#FNve!FinDhV2v-SO-GFX}~Q@pDpdYeRFmiHyrwF6s~_-O8|lpBnZ(JSi1Q^lDd*%U&s3zYi0E4#tR z(g7EftV-gy3I`$IVDx^T9PO33NWsa5QsBoSSQm?xYFER0QBn`!JlkW*A*K3uN6R<7 z-hbAr+PLoj>n+xTmnF67co=&}2YRY~eGDbN^E-*S*c=zX-Mtj}jIZ-yz*jhgp-e+D z567uvt~z2gu;aKA%$^&QA<@f%>ZJd7mV+V)h}0honKA-^-vTIv+>%$RP6KN4BVGCa z;>p?5OIQDiZLAgsj9OP2qj5=|;Oj}dljNr|2O}S_w=ZJ41o;#ORP4PNp0HL z7+EUk1~LNp?SyIN*;Bo< zRR4)KeW8s?wMY>fDHRE&GDXi8z2e-FLrZYGyV2Qt5g&bQ!3%U`K+0FryuX!2_Ni`W z6E5>&!_eCGy!`-%de|8H*Y<>r@y+dh8RZ`+P~4=~^$=yHd$2cpVKD{PdzFm&FKcsVQudJ}#MwQjKhe$joa1T$Lbu>V#R zR>K#I4$Jr?m(f8?Gh!D#|oc2OqNaolf8sF8JA)NHPVg}O_x{s zbQa>0WQcnj$B%qUenR?ZY^E08?IJ{iA4oR& zUo$xFF`hJFi!uN{*O#OpT47y|P;8q`J!W$uTm5XW@V0J&?(6SWb6KC$D_fF;OQiyCwz7V-|3s3FaYGiaM=?&wy6LNS zH>#bD+iuW-9&)WV*X9(-s3LSvujQZ4zVqxa$ zsL7RKTf-t&tZYrQJCR4tW9F^obd{OdBhFcXT0ti)PVI*XD}=TQ@kOt1f}4`?PeS(T zD|<6YLL$NAD&_Ef$}QIzu+3kUvyo^e9YB*!FgQDk+hpSEyk`Y=Q zPN$mFver4zlR|V6^KUv=;fiQxZq-iRQ9^!73?L;LK+9QXI>LXtGQ1vZHv}L?zLCi zN&0B7{4_(_5dl^c3ArBv_7+U}`l|N}kq2wDJRqn5W^HfgwqOe%VVHlnR7|K{ z#m#)!-B6LfXZWQ>NgDQWdbK#Gq3&%7K5beH6Ao2Aot4Q!4@u)n-sok;rkNgn4y?_IUr>i^*pek)*NTY9%DdX@b2P9(@l*HM z6e7u(%t&XcI1O04+@$k0pQ4)+S8 zoNC;5gTt%5m0fqAdWeTNe*B_X27j>DhBF;qx(9xd!Hbd(fgGOT{vA#1N6dBNH+d$`jR!q_idP7A5;NPufWF3uAk zIdxS$u!?dz3Dm+}sIee(--+h*ZD#_yUvU?mUB_znmHGOL8&U|*?+y^U3TNH;5 zM=kK#UsK|7@ff1@KliMJ;tCOEv{#?rf^F50p{^bCoB8bac4J2YS`%<7ukgEZ^qF!pY*Yd|^q@tJd!+~J z{A8T;>Nbf1mE(^%)$zwLDizX|b#a%#Vz0`niTJpZIZ0r(piMJfJ{FU`YFUbJqx28( zRbO)n+TkO^Qz};XC5&!*v*D&|{;@g38cjoPjm~=`Ug@bx(=eHtE`XV_u;^KtY4a~( z!HYUxQv>=3&t_;@ly=Owp`8T8#)&(jL-*&DTA(Lq=~)GUBz$nhHW|FWw=_wAz9iw? z9(96#lATth&Wu;b{&nyY9R&A=VeWc19rzTanGEGm7>ij2nWDCxWI`GbG$EU>O&``~ z2Jv=`dY0}}Wq;7II(?kUf?u!JA1{<+Cp@jK9B@i8j1Gcn5vivss zQ+aQ;)`5?Jfno~Qt1#ErgO%(ddGv7{2DLD&4=!lLYq5 zlWxB?8Q(2=O_kB-657&)E}E`fxOn{)kKh8hMIVX|1Xa6gAqUYE$%Sj>0e8o&?WyjkEzuKm2 zkj!p>c%W`s&Sd(GFqrU3$xjD7E>HfzPnn+%pSn*5IDGKJELna&WDvWz-8~<^5aVXg zmhfWgX9#boPmL%oAIldw>W!r!pkbuvnSB}mE!B3sWuV?pcFB79NCC{oe}m6-#v4pe3kjrH;F!8ToDAqtV` z?%y(xugP5f!CAglG>{SKmoBX}^Cms@qS1nxZa#(b`ltYTIF1lvGP+(GE3}=+hZ$nV z@|goz+ZgBxdx7uLPLv2As>0l3z|>zhO3c{=%g5S2Aj^{p_UWON95P%m6>tvq8#_I{ z{r0DcJs-e;nUASrgyG^VrD$BCgim%BR})tXcP9EY-E`85GqClLJ2p z_!l}0@x-facg(P=?NIAk_^djnY3w8?Cl$OHNc?0;KKR#PY?AJ` zFVfC^ah4%`o1e0mq3Y}3PMrvHs9M>IBUpJYfNK7} z!Ahh#j#Jviyy3~#N2M5}JQq^`QJ?(#Jl!b0^62gEERSwEUB?g7dAc}mVMfyS39aln z^V+p}0LX?Eex=i@n{WHiHoU)VYVD%-oz?}P$}nlVnK~{q4JD}9b7#T4djx41$u5zA z7Wg|n-6{$eHD$o0Xt!}?mUsN?s!tsE4O|D|TWcMs>)1q!3Xu3#F}tlIndcD78u=^i z&Hkhqr`^t4Kfm7xv zJ;z}VqD0)(y=m$wRF{sOIo}*`Q%%!RqR?P!4et@T(thS|A)3ncOgcnaRu1>unkaG0 zbdcMSy^7kCGNOm*t{qnH2bbZM>L3GhK7Cmodm=zhbN<}%3yLBaJDIeq?3Q|Kc%?Mp z1#hl^RyUd#ZP&^qu04@Dy1AfJbRGTHHRuB)6e;HZku%d(2`#qwf@lh)?)XeuTqj-t z!%l0*m&|(855eOE`IeTve0(pS3#R}1hb^WOYwM}33*cn#;cvt~u}H`5AsZjhVUib( z=2-2sgS(ZwXO$UE(}!a1=;_ds>eDRaZxD_mF!srGr{`S;9e0hu%dD4VKE}r@4Vfz} z{peH@esczveSnZYUw6(o>X2JS9?Yc{*tWJQ+?+zac{d?f48Hwwc5xt!J673r-O!k1N1Z%NAD+z#+l;$80 zNlf_Wtywo(A<&Hg3DhtUhyS`Iw7y0byh@6(hVL^Ihzry|MpVLG$Q#Kafm5G)&jz4l zMb?u{m=w%N*`+*xFb-i>Hcu9KPaixOHg0K)Lm5Z50sEVnAmwZ{D|lhMqKI)tXQg&u z1|$Z7_b}YDy2U_jTsa)T0DQGzxK=sL3wZ?2jsD8|#bR5c_tlzeK#|mXv7B2!*_XY~ zIv;<2Q)K4@UWn_8YpOWP=yS?k_pAd+J+kdC+hRt$pb7Sytm;YQv*Us+qqnr|@S~ja zg=RXEtAf+f{i`c4|1*DiYq=>I;XOcjJ*@Hh z{<>x%k|{i8wZN-$u$U@~b~Zpv87GovYY!HWe-Xyl$b;WaD?t4NE$;r zxs_NR$N5s={pI~!!iuA5`*dL`~m`B>o`^}mI+_!6dD6W1nR;1N7Jh$m~QK6iJXJ!=sT3-mzqS+8R zYK1TqMaXH4i-02(l9Q={u2d8+$sq07MH081q}BPf!vEV@hx?wqZI|^FPZ%|F9z^Dg3T4XpBLQS zej|SiuG?(59OLB4@p|VI=Pa!8^YNEQ{gg#+Olnq=s4KG$HeqX}=51___Yz8<620KL zjJe=v(Pd0hHt@|riR;|!zorb=?yI5`SBk5|Xqw00A9|Qf{lkgTfb2x*s zl^TGR>O8mYQ2mTl>k+P19i$R{#zP^_#Rm*XJcx*4jF}zq1vp1O4?Mo>TiFVWMD05b zY}qAjY5(dLZ4r!mMahC@y%ZD$+#FZOFQY;j^m@P~yXoS0K6#J{r}F=V^qr-u+hG-_ zE3%l6qy@dr($nPqZd;NqrAHA?=naZ9!TK~(3I-w<9~c@x$UzkPh}T0ZunW4)fc8(3 zn2boN)OOTgSwAQdUqK=vGa!;RdD!`!=+S0l#_n4C@Z!a*{yTIL%%OB}H!FR;PW21H z<6cv`(Xt<{Bz!icQ5ih1|60Ir%h=kBk)zQ>w+v?P;=cfk5ie&zvO|anwA<3?WpMip z7CK$fi}yixEkkVoxuZGfIy=Cd7*Y)A0>A^&eEV%iN8<6(bt?~`9)@AAg0?8x7xKNCtuQJ zfTuY~ofD8z5C{TctNuS>y?oK!*|sAsN)HX`QR{X|D*ot?ZhfW|yx*0~uuRnaXxagh zhK>>VbDC=e3`^Y?*#hq!5n@xnTbhZYOh$|qItSDty=*k`nqU{_BLt2&YPn%1+ z{gIaSu~>r{zoK%s%F1tsoPUFDC|Z5-^*)e8WL;Yk2;{xoQ@GT*mBG}GcUqZCg~iA6 z!4b#0IqNO*(TMQsTJ7Qcq_Z#@LFts;5fEwUz=q~rKx9?~v7b3Jsgn}oT&WQ^%;o1| zrPd=RJ^IzwEzF$?cd?P9U=$f<%b{T-2yp0!$fViU7p0*4*m-zVJs^mg;^HI$Hc;ND z2mA8ws4|HrWA%A5U^Mp%Kt#bzk{XxMUT#Id&zqqy4=uZ;c}z{nwf;0`w^#8kx`tl6 z4K`ygmezg_UXV&v4=4mAP@5a}eSinOEPZv1S11|bM=CaH62arO%d=NRh zfJ2#zIO4Qn<)|(_-?ag!T}5~AT5bccfyg%O`0)6XyU4wheMzG|-LcN(QmKML@ThN! zfx|nWV6dj_!r9%Nv}UH_C*v#)(i4tV#Nt2Ucsb?5Pm~7Mh1pz5rHIarlVaF!1Tku> z&E(E7Y^ntYa2vPDP7h7*e3^E0^*bXFJ7?V-h88u}Znnm1q^lE%_2z40lLzgoV!#gQ zv)lnq>P34=exsj+-a(NfTaTjw5TTgWd?+)zjfNM!FYt7;AglyIP^0qElF0UT+aI;- zm8^+19D1T;NQ^(_Q0z6N4@!{g&kRSzS(=eSzjLib!3@rP?u&C{0S-dTzLE}`lvM>c zDNM)`LADA|qZ5!Z-8Y zH9IFK7tMIXFO|(NUC5D89uXwzSEY>_#nUq zTqzEs)~*?k5mvrTOwA;<~`eiz1WyB_u3;*rI*5cw*hl)5?K5;(HX%6 z5=jz3$}RU4VummP@g_-b`05ke03%u@dpgqOh2gf7?ckGo$+$1JppkAfe!bsc47kn} za-W#Fm2c%-mmw)K^vT*`)1hOpZRNAhThN~UuVoiHU?c}NhE~|QMHCOkNq=Bhtt)aH z9x>Rhh@=QWTLQvzfNZNwEk+!VGegoKsp7AgGwy!*OrU6%SdRc|<;~I{&7Q5-2Ja!y zG+)T*FQ&=8Ykn$NNy`{z$}0PN-0epmIvH=t0Of6)#Z(I(61FET7ca;V(Vu{?n_-ph&L=}eAjkbQg_B;aM}@%aLJhl7Cj{Gt3r&4>peRkEvni5?n39vF zR6zxF4LF%W@+S9g2Vbmxkq1?+UnT5;Lvn2Nnbx(@=8LuKS59ZcIg!g%u`x18F)MHE|C7)Q)orDRV@T5Mi*cc=y2Z`oDwNF<&W8!-H zP4wKtl}=Z^tzv5og#B{!3@5BluW8W?sk}%Mt3yUc#mH zTzL&W7?aIC@iXPH>4?6hdX^{>`0z`Kd49x>ZuMAKG#Ql+}9rMWa zCme@9J9)=BCseRldHE;6g09l~CZcnb7RpTa#yBoY3{l=hdS8}2o!^%&0JqFhgU@nIb?`kUXT@^)( zi=+Pq0(bV8LsI$Mp7So$w%$${iS0dn;XO@9hD!TL;8@(LJIv}$`6@poPXPHWxL{4Q^shs*0Dgge+9F{d3pxn{! z;v}fr^g%(tt~>-M1!(rj=Lt}IGXY+i)jJ$B@1tBt{iIai`p1gSyxE9 zpZ#B@=nt5Ejhdw3m%4K5p(z6}vi*==EE*e||5wl!IG7bdm6j1YQh|ZKAC5n(Xn3x@ z4+D&B+iH`b`~^PGTjn}9)t2p7xkI|-+g)l?FLk6esL^ekcor#6Hj^>y^JlAKxGNKz zT3pWPQL9${{%>2GNb?#O1E-DV6y~Dy`1=gBQ+VC9pQecT{8TO$&bOlerWfS!Kp{Bm280XFB3D)N zuii4}`YN$19u+ub19G{zjp`w3)(=GTP>0(+gD!;F(l4?&lvTEWQles5HB*>&T!0CfBZc zb^_zQ@>khgpHCzqdl6z{0VllvBRvY#`2tN(I7=oD-6Pid=ZqG%cq9u#^lTJ_QM6|$ z6|C?Yrgq~aQ|5ZN*0IjB>o-U~tr@%e2l}=|N~#l~e~3Hc?R6fEb#_34=72w}1zo0c zuBck~_>OPjft;Q3SkWvJqs@LltvqvBo&HDL?L37Y{g&)CPXlB49U4C2^%`*H!-4L! z;=KRrRIMHbKXVk52N{E# zt$H`q-}Mk1AIkB|4dY~>oESsjk+qe^KOH=O3{eKWqiHfHo?c?*K;(TY8RM?3@@36X z8<|!(5yBR6PoZxISr)-IZNJ; z1DVfz>$HE=&l0=WQ~%_3|B`e#Dye@rzVmDJBRwWc)C0s)MtEwndO6@YN9}A^Xud=> zr&Mu}mRut?2z7EQCW}-!wc3J{mHv&;zIOSc=54;gFc(mVGK|wl+B2y$Uy)mX>U61S z(_`ZTQ*Mz;PhplwzappFbL~X;1Q7EgUeDcyMCXr#Ey$HD52F6Ti-^Pv3%l-U>1(=d z5LwtU(7h}}CmjdviA_HNm`^4ib|?nT-nLAlYr~l)6viQVHeu}c^iD9CnRKTMO(!R# zgg{!{8FXUE^U!IWsgfV0Q@3L&SYw=3>h*~ zl8YWJlOem*B0WRSNxYuBs0CmSZ_hAy3?!lxwuIX~L?_!A^zqJ2puX;l`8Z_8N5+ni zEVIOYRV%z}CMW=ixz6UW2l*9Vs^#(Dyg=qX7}!u9_Q|**W#aF~!B96;-U2^_(HE-{ zxs7(uD|IGuISL)c(XG~(u_uP=hoh!S-w{b{2YwD=xvN7`Jf6+-UxAd(rN9*trLj+o zZA63G(L)Aeu*uO76MFjM)m=tX_~mEhv51CH7!LuCn)_v@HF^s;w*v}yvSrRN%vb(c zhuJ9hUl1W`q#d|(>XRIT4D_0ayUoR)@TBT-L%0wLc(u01vE@fS+$>Zycx>&?8fVUW zmAYwC@f`OVl?|-d_r^15c00yXd_2MEvwtxFQ41_)qJW$6OHRr$Kkm4E&1M){hi&OO z{LpxCS*nYgM_SEY4!b2c=rma|2O)jCWfg6F%BJOHwNKB9oWR!tf_ua-lb$eZi-`G9 ztq&he(oju=Zso}+o(GDyR9xmDa7KV#mi{_{sKbAU>8`-l8;PE^^tn99S=xh%Tr%kg z1W(qux?cYT1*sPxbS-N5@oeHOEq6hAw13a04CVH8?q&XY?CC3KG1LI8N%>Tt!zrsx zItsc|$%ym0+Jv%JWiUyj+M289-VuS<@zbfCIo~}mIPl#>5Vt*xB|B&i0nH96)-|fS zt{8Wc8TM0EtKIU>{BvG@$NYCnu9C6r@_#Vi31o6{virglnD{XHiID>ZBf$GLuGFij z5WFJ1uKPB}gMPAFi=Grk0Xf7K+wlU(qCV2jq2y2rO93VRiK+4?|naPTSElDjfl20;&iZ~uzYrHpUnHmDYGLD_=`NVOS@o%!rUHN zGO|P=*){KgL&+Bl6yGtSrJ$I7UtDF7%Ue&Dl^0Gh~Z2O_W zZg>W;pj9crnA5PvU+9}|^MZz~4J=L=F##c4#}m+w0MYe2wz^D@tkh(=Y%MvSE&O7%|aSN$zxu)bgKm*rgm~bc` zeBeY~!vfAc%vZLcMf>991?gX>Y<=g zT7bkux)U@-pX)_9ayWopNPf*b$K1s_3@Y?g*3BdJ=Up^|p!=b!iT@3w`WhSUhsLF#PG~y*-M99s->tsA=C@e1H%d@R#Y#z%d(ip&PZ{0oN|e?wiClUty-e{ zuqtyIMdcAWfu)YS6cWqKPViRwmzlf5Dn9Qz=nN*A1Iy-M2#gx~B5K!yBi^FI^)GAH^69X^etRxz1=)2Fu{c{a%*$tg zL|GD0)sQeRIdJHEzz+>mPnfaR&yWpn=K?ilegz@X6VlQ zJ^cx26adu;MntrS&S8tUnxdPJ&ArjPz}Fo#KdS8_kuk9!gdioxx>4DAcrjT?uOtn9 zDtqMbWtgcTN57F8ttB39_|Q~30}2x4EHS}xaPczj8P{ z4CGW#Kbxw;yaJl2qtPf{Z%Hm_#&g^;>5~vGxpo@~Wd9@s#RD z4BOWcF(ZO&HMXJD`bLh%y5;%>{*IcRP?P9(M|eRwP4o+Owob4 z(MAV9%y|mcx_82Vjj>2D8;Lz$>NVaz=sk7~jp#p3bK%sJndB2(m;n6EB=Yk!%i*S$he@w4^E~6isuzwY_wbz+ z*=u5Hvh?yaYLdQ!gp;DLQ;!q~C&z}Liww{06E^#PqGr^V!|b8=Ts>%VRi!snvN~Bw z2Xkr<5xjR$?W!IHHR0=C%o#4#R?#xk+ReFS!h)_C0$mxauTfPQ#{l;>zX7E?EZ07{DXm0BYPo0|U+ zpQ%y}=+ml}I(1>h`Q;2cr4Vx7u$AW4CuG`j+4!80SOM)2&(Op+dbOG0J4G-xYBWK-7MBu@`*?+n|r?(ev4 zvlem%!534~Y2}ImGe8!cs7ZR{ynaOB3AH?vg%(nv-DalzZ0tAZS&=QIk)iega_2H6 z0FwgGO$l@%_~8O!?q&!}zphuZ;X7YsV=JwDI8qmtcom&MCVdWRG`(27+s-o%Da~r{ z(404o@_ds0^dYX#j$8RuKbKw`8sJ$N^K9>c24U9R69*FVrc`1NIs0~fB|0;KusYDG zfQ_prF|eE=lfzpm>~$UGg7T@`5CNrje5?F{Qe0|%@R2pC7Hu~p#Xa|v$OtUG8wvC= zy}5~2h!dM4lfmPK=UbBE(({BLBer{}prm)F45Tm+IS4yx_c}mr0<5yLULAD8W%3c5Vzlpeox%2ar8TqqtM;S2> zsqYN6!E+yhm5WzFb{EgT6!mG%LX$31Nw1Z7N+TR{lInzogh6#9&kVNAv-oD8I0oxG z1xClJm%9r!7Kc;;LFcpGw=}A&&gmO;2Tx~`nWW&E5ZY-z`{!=FtFIrVPw+^8pr=UJDgzo~#c zl3v@*$!Wkld7zc3!na6wDS_qThw|8(N@xHSc`X#(NSP>-Jnz;o7`=XIl!*@q@i{3@4IE^2`kCFAxx{{b6+UJg zGvK7J#DPMpv-xR!Yjfr06T;jGDPS;PtT#8;{rV3s%@kGYu#*(4%{JwJdL-m;n8U`9 zu7M+t#~IB?9MV6p7+h{M}>BLC&0V)x& zxWEf50gL8_nfM?I`F{f<(fdeYDgxT=)rP{0oD`&iwFpW1qXAXkmkzd4@Z-HONi(0> z9a4|@m+Gufs_L7Bcfb`Bj5RcpvQ@z#ww4uAq-3SRRX!JZDH(zE!xL4&^->%e{w{TLiumV-flGJEbT zFub_Sa#-4&sz>HWsmrQ!GZ2!GlgWv(?BZF5qNn`NzPZK@k4>4MWIe}=JcdT0QLMrN z2-iCBr3QwXxpasRHtaOYKex`wncN(OlZIswqk`e+m~h%he*-Ger0<)kgI^8gb{CHq zIa0NzN-?MCcgLk+mqcW-DyYL1?DYPB)Gcb$fGk7k`U#xNu|r_f;>){yR!&I;5D`gXwO8l)UPe+$4x{NA4Z%@Vb}-z6>c7MW))v#E>+lm{yj0ze)+z}*P(qV67h=J7*xs7ZuY8jMGKJxpPEkwvTfRWODw8E(l_7~ zL|&$}a|F4uMytO>ShhM*mc3Wjj)AYJn+lZewi~&-_GJg}-`!SWEKyC*v>H0!w<;kn z7fn4K1l$n!;e_!u_rO$i-kMjiJ=axKOWSEsJ=y@e=)HG2X>WnXw`Z_a;Ox!1MhRp_ zi_*CCwI1J0+^P28BuTVO%V~irJNJ!F03hJ(9$x`$v4mE7P%{?4%y~&$KfH)?jKn<* z9ZuO&wYY?EySc#q+*I#7V(>a379(2G1AMHcR_*Maq7`;U@y&B%A&nXS)9$!%dG%6or#<*{1!?7{*FYp zE_JA%?f!vj2!$L5a`Ms*mrqyo%K4QAC{`EY(7VXWME02I`$13w?QjK2ka{ut)-20MR$HPtcAAm26~5-{Fkv)2i8d=TvwW-73=d@eDZp6@{@1cm$|R zilY5b3kk8MLDXgfaNh|fel1w)Y@{(`chBPtWFp~B&?Z=ZVoQ)JwuFeYT7 z!6QT6xQE0bWBN*-fPEMAW!MerxEn)lxyLO9_TbqGmj0iH1ZJ9e>+6u1SBSHpMf8tP z8gSCn!@|8kB*t=&w}&*B`WO^~8V0>@gJ@J@SVzHa-M}IgAQ4+PGO%Nc+2ox$k~}M8 zkq~l!Or={opLNbOMq&K|r?&k?d4MS;_;-wqk5UBhg_|TAkv~V5Fzx=V7UvG6E_pkDrX8H>F)^%=i}V~-qCIhY ztSd%J9G^g&4rELNHN`x*iozSuYth^9mFy;)Y_O5<%SWrr)iPz&A5`rx0tO{)KK|`o zcRw6ijcGiU0h4)`NE9JtL^$V9Uybk18$F&E=*b!Yi{PergEJcMV8Fd&7O%)*g%=y+ zkW=^3iC}H*-WrrH;Et?!yl6LlmUwq=J2YHzm?6GMJdJ*J_%UqmWP{12$R#BGKZHqp%I!&(=PVKkrCvfMdBn4#7 zk`jYjqiI)D&5|#pOA~EZD4bne=X{taAAiszm6q@>4Z$ZG$w3pvwc4jn7OYszs z>6KbC)AT<-DwSxVidS4Ff3q1eRQia$ChV?_uK0!RI$GeP)NyW&w*645mYP! zKj>$bK9>qAzo0>S&E^_QMC3#jywE4veac~%67u?`hDE6#R0%URNdztF14H?i-HVDY3sS&*VYg5K+HluGKYMS z;IH(%Dr%l6G?lG_uviAtF*k(8H^0d%6`Q83?er{wkE1cEFyD!tcPhBT|5o*y%5}0h zsSOHm9;)iYGa?^3EJ@xz6)ohdWjOp>Cfz;Qrv#C$|JiZ;-eaL3f?kN_WpDrM!+udI zT!^HL4GrU)cB~{3d)*MWavd8V%`FB!?0f4VgJwQVl8UlKSSZ2p@t*H*e?Qnzr2o~K zFW3{$ofCUG^YS|Npre710(%|QQ243)O}lY+XU_(Y)B zOBMJ*1U|p5>+Ak6fz=>S5rr?g&GueU4JE)pG)l7U4tzp78CMdc-(THU4XTtWMPFXk zxyIxnP2A9!{Z#5JSG=b@+vDVGl(L|=*ksS8>XIN@=J8o4Ef5EMc` z@@@xJ)V;Pm6o{BP^-N+Ja1R5v=w9fQu;W_Q^fYVa`s9q1 z(=wGZZ`^zdLQKyc#X7*^<0q91%H4>$SB%2ss0BnB$i@=oUEtj^IXNWJ%1)Cd5!_!z z@grO?SqVOZ4FaJUeRt?haYcVOa(pF{WDc;h<}y1U1BV$~faJX)5U7EYyddhBDz^DB zCbzH5gyHULB7lZ(fFIB%X=Cf7^qf%$z$Jh+NP0~+kp<%(2*()*zG6x#PS)Ki-M^G$ z_2J&*bqG7ogv9Q0b^hVOr~O#M6N*9#b(xDWN+V59JLS{vsx5ltpmNhG^Yv(hkE`l= zM#$0!=3*Ei?W!)bL52Da;OVr{Ja6`=eYAFA;VzSPh$d@v5n+0GCB_8N561TC>-!v1 z+13W$x&PyBtd6cONtuZg6tL7%re?O}|WTQmp4Va+hLF^_M< zXNFi4egX17|F~0cPCxjgH;Nz%NkC9F7G`zk{@YbMHErXW#+g8_tpVsx&88Y(fo*Q- zQYMwm+X?Fu*#(WT3F_131%)I!b&2o>P1@vW7jq;%HwjnlYz`!2Lk+aoioDv zO03@Ro=`k#v&+`|2E0THPqjxU_;8KpUK3YCt@y@MluTF3!HYQ2cg*(R&&9x8+1 zvI2KEunOWeAp9lelcyYAS*0JyGn8m=`y^TaQVAPc_X)8OfZ-T(32b zSyAEEuNn`7wyp074m^LmR1slZ(ZvnsNKO9UmJs^i3D^5teQ7NFUa!zYYNP zO zfNRam{FDY1i!4)?kSU5<^W=Aa95VB|n;{ zPmrEShHG9wk=R^1y58)C#|LXCFOC=o4^zsF8S>ZQKCmK_0BSC`OmM3bL+K8NePd zLaHBzeZ*N{JH5~^NwOh|bV~!4JAu+xGS;OMD{(H!&bsul3z%;DmZt&f?+ds!-i{n# zy>?7!&Bvt{5iaUiM7}qbE^KC;K9!j*t)C7pK7*6Ncnp5!7~YFY6}M-qo4;bm(pX&EeEFduP}!;dmvEIAM^YsZE!lVYs;9q$rERIKxPA1^#bbWD zg7AwuI9S#~yA%Vt`)@+WF?uBQEYb4YowTT6i~$N41N>QVZ#G__SJEnTu)H4O_OJu>d!8RkF{3e;}1mJkdAh6=}?L zI_5EcnRpR#|4qR=?`@&r(k*+jbS?g^fGZ&lF-TX}I|$Q&{;;8rA*h(tOfm&YfXlq& zKnFq+bM^%Q>n^D?q+!Q5^noXN7mp$waQGx^UEK0$;p_v8O`(yj@%q6zun>6=UzweQ zi~D4PaOs38so0$~Ff+qxk6|S9G`B@rfKJF$y4t96*@=N-QeevRqz6;*GS-<~*h0$R zDz`;DE8?d_5DRP>H>x$xxMbwZNz+544Z%z7)w2%lcN(`Dy_?+wDa=%O8>7`r6X_AF zoB_!61K(f+O4~k8Hp^>axik3ir*;=bp&PBERyZ~q=94(xCWsXh@M|iN7T~|e3_1&) z%za6Ryq+NEzU7xT2*=mXoG1JYr=h`q1^fk|?>*a@98kV;zqkPS%VJ}PK?}1SP0y+x z5fI@9?uIuMOMVl$YcNg=CQVlGdFea{-yXAT!Yu;hH5V(wpqv$b$}OU5z_-ngdI6iF zz-K8@K0>=RP#Z?lX{@lClzYW~kn_R{4q~MIN zd=6Mj^-pfef!8ZC{ z_!YN`Hi;}(h7SPj@w9yOAU2sqR0c+iU=aibsM+7lO!Wli-MWf7edP4Ql$U;!arR!D zD}yxLZAGdYc0#NRZw;|tbBeoxw*&U9I36*yBF*d37_n}lt`jYZ|5`TOVXcbI68mz) zL!hzqLutRkWB2<_ukPAg1Js3D&%Vd+%k*-W!#^&ET9JUm3eH6!pv_P?*Y(W)<7oZ- zd7I5_t&l;;Gs>&APpeF$wai~yl~i?e|NSwBls%6?{EEv)ZFG)nog7=2{duf>^lR8d zge+hL_N_G!08<41DYgBn5w}D72%%Iec*H^`l{SK2Fv>poYST#1#X>){z4ttlA#hvXH|`SeeT%^L|01e6 z^VJ7Sn{KK`Kc)>OjNCDa3kS8`T_uqwKE1Qu0#pv#_F06Gn~Dwv!}2mm-`Y6kzRg1g zt>mubtIM9G_*R)fmS$IZZQoDUWD88AU`_GcqODc316iP_I|ouEgsYp6@;p(RrFYF< z;l?$?b*5_9|B*ZCMD<1_1ln9sRja=8YJ>uUcq()$kSXMUA@3(U6Xm=1+9mBE2-$9l9hRvFGV1Vu+F z*!k1x_zG8u1SHSuI~7$1P8qOVA_~fjMw!8bYRZhx5%Id%9>x7AMA~?Zya_s730dTl zrI@Dx250h0F?(Aq?B{1!*?x;QauX4tUMMS;>)F+*Vq8o;u~+qE{2s^Cm}K_;R?Qbl z{wjCHRWL@XkDB-o8LLM%6c4zGwexFz9JK|sFKo;a)l7iEH42khxvCD2Zuq0yuNXTsO|3xCsSrk~~)bk;vy3eZ~I3bf_PmL0!?^(PU z5lfY$%0_>zIL=?4P$BGvh|3- zi?-4i*2$CC$Aqye)KpVn6*+e(52(605S))>^X$@ zi+@0(1wXdoz2Q$_eC6pck)6Xb7R(aZX(ximo~{_W-9pl<1oKPi|2AE%G9r1$x0ydI zj0nR%+SGR~%xy6UuocE00IpZhc8&ok&$%o5o8p*JL!51%Pa^#HD~SS@pwfm;Ekh0@ zI2l%JoGpPLEL5Rp7dLGNwt`7g{gqX`UapHKqHh>9b5CzM>x4**J;DeXI?JT@-c4L% zze_!Szm_KV=-V?es`i;Zr+@?x+!OiK4FP{lH^ZhzSu%aIP?V1clR7*iLvd|wE+=K> z*GAQeL`;wpM_piMr5rM55coO==g^S^28FcI_ag_NN7zVw!2SUq&8lIaR~tCZmxDog zFDEZ>b4Yhe^@Hq(M3iN!(Qf^XGHUjG*q3DC&!dbF+ZJw2JBIh42IhTEq84U?D7DoU z*8_Z7Wo`r8_$SvTqOlP9Vvh=q!)}9yQP@nX3Jl$zsBo>g&&H>-_Y?7*BtD~l3nPzZ@)FIh-NZgL(pMB(aH(vB z^}BWG?2b*vGxtzm!xg_HG5}Rf5hnc>+>Hf7Y%NsIR)H*CNfv}~5J z21k*6^)`1_=p7ho0&xK#0~&{_c#_QrlC(!P05r33PdgUX_rFTKBN#`5vC=jH5h2)| ze#4;ZQ~_PxVQiC^2&m)661s-6JHW_eLY`3i?K+v6+1;ZuP6k!8S0_^H&G996Wa=}( zax@KK{K}2tn~47NefZ;tAQ8}RS}Tp$gE&g%h~)CmYKKnS+zi1Q9}CQ$!t3G}$C{;= z$^|_*`(DF%mc^oPs(bK>ouSfl_hk@2w1PA%yb=k`?Z&qt$Qk1Lc6uqEx=0;X2HQYG`q63=r5JZKJCQS%R`FikhB1(21p zyu`4A5X7HcRmvZKZ9!5pJ-ZKQtK2be^}U-I-%KoTLp%TfsAGLY^cAX!i+y#=8~#kq z4&h7T?TGdqKB5THM+j;ivJ?!b6b)aZ0RB?>G%x8R+H+6@8-dEeO(?tl*t`MOw?TeHxp*h?DR zLms2}`UiY8fe-d2mQW6r9hKoXME;8BEcOf1Ug?zZQ-Lzbhxl3mNvAx-e`8Zqb{48+ zLaXtgSV1nr6Ek!hhy0JT*e%VDT2bD1wjBZu4p4)%$+M48)5NhxC6pd^)DAhuA$$U# z1a8Q;*GVO#?-!4XkPpdTWFc>Ge$JF@nR3xm7p(QhCN?U`wf;$)F+@q!@Osl%zAQa6 zGFPkHQMO#mcf!jq67wKrhQd509S2E!4-S>(vu+V01*U5pjyX74Z63~2m5gF&VX6d> zS&?SDl4Mkh^O_t|AF#tT&>D$#2<-iY87sXnN~bF7VXaB`TufSfU<-A3D#ZuU+Y z4(aA@FG~CMRA&JiVQ=3mV09?bXKDKP7*bljS)Rg`CZ0}~wE#omjIvYXX+|=S6A7<3 zzmdwGM)Tp$Wq!Vd69Fv%D!Y%-3@;Oxi(xlitnleV;R=!FFwsBCJ9%u$il&@TvgIOxwR3ke69M&=Ta$F9j4>aj zr$g2yt-^F8hN(p)Hx(6L^OfiV^!e^VyyLKu|%(2^B45+~Tm?+SnZ6#57D zPsA$W_RIybe|@LAa&2VunN0*=BjhQ!N8GsE^|Pi)RYU*5lx6*Z2=*isAAbRf`%)cJYhRATeGHPVM?iI>eIRd z5U%rOK0EJUx*pz?S`*E2Lm>=U=N~vN=gKI*X z%IFXDd)AJ`ujJ$$RA;e==PqnFY(Dif2((#Dx<@+RRM;@pfXE?A zKUxuBZjN`BMbE=el0PtFS%LRIG^7Z<>)`~ObHY3^=ivda3W?Yh&F@Km3)?CT2@FB9KsCc>;vh<7t^!#cTrE-#IwfNdPsi zEDQRjmRn9Jl|Q+oTXbRRP+Q&XA~nGJ!0$Xr?@FVMpFk!G-F^6J_9HVp7F&Yvdin2J zrBV+g74NhQ2*JIuU$SsIu!Q6oUn~&DEPfgBKF;!3u7zI#(L~-hi76ntd zB#E7@!gJYC@J}%NTcX|oEFcTlW0Qho3xICAK}r02Cuu#w2JuA`&FfiE0+m6L(YU{P z6XWg@@v6KFN)=$t$W*jR!mkR83w*yjgs5CoTta9d$mfX z3*n-xP}TY$RMco`iRqao6I2j*(W+N8guRck1Kg7J9G7nL^~kS!u;1l~Ye0}~si?P6 zf%L4d#_1~cKtVUfQmrfbxH9P|yyX|p>K292$}X7y=FFBcCBwMnRZka*g7>|a?7n$0 z<86lHg)$-uw|`TifI_llVqH$@Q8ZBg<_W3X-(v$zxX{{PL;#f)8J7XIj>x?QJN67W zta?1Pf(6eBGgh}#315*&3>6N9UENxte~`c!GKVpRBCsTnHt$VTrthzH9|azMGE7VHK1!*|@Wn z%BeF_rJ?B{%PHf`G2@hCXTKa*DYUAI0Iy;YgSB6ynnnaD3rz)a->Hwlw==Jey8;Sc zCqv(Rm5u$?EyFtj=_&NC%$TxAs~wSYeKs!d%(P zfGu`&>Pw>4qhz!6-`JCF#lxc%h8~(2CzqNnGypF*4)FWM^CT_gX)q$H2G+b5Fs9vI z)4aUfCg_0Fwy>dPQi#oQ73`cT*bcQ6J)Cy<-iTSLhfD*#oBmMhesj}Z=`i#ryjW~D z{j;Q$vP|m^iXrD@usJaFaEqkF?LGnVIy$JE!T$<1iCEbhqbZdFO64UPcuFjEls7PD z{27E4?WoK#9wgdfYRUPG+#+K3q4v$ZF~oGV00H3IAKEmENHcAEOQt&lc>KCt@_9@g z7Y%1*eAvl1BDuk5YuG?u2}9zto-`g^zWfp}wmCz7$?DnAy8OuYHW5aPqkSr#)0^Fo z^rYx{o#jbT$n%E1g&-vrVc?m|O<1*J>Dv=p*b>fSx=yxy>+c8@(T0*E@k8{5NPo8I zlJI_9icJVIZ!^x^kt~FcN2@TpI(r8;mF@SR-z-OLkazWT3{2h0jKy(Oa7wol{#Dh) z144fWstPAgs2T#Nyhi8OOC&;ZVT6R$Tzj)5We4PG)(KOO5e{-GQk5Hus%3rBjx8hS zo65R|YMILLAs5=%>0|Q(fA;YIK7gmhm@u85oPJGNRZuKceF7E$eyrE7!2(1V*4ICv zKOA5QOLVQd^ynzW_yvyYgoiQCz-76^CHS~oUWvoqoYMt+#UREWcMQhJGG)a&K^8yk zY5a|e6mI1hKZA-YF|-qRVI!F#llv0hx_uPvRAhauiXHIEUD(=zn{GhYzLab>`QU~o zs1eOd+c6wTvl+44DfO}G@dzwh@{#0mXIT<2JlkbXn)ZKFZp+S%fB*kyoR zry=9`c$|ht14$R(52?jTr>S5U)e{+ORxe%Q=7}tto46`DtA$Zg8_(sCz4Ni>D(Xl) z!i)so$24B(IF*BT`%V&ag9iu2qX7(_=*z~eMjq12Y19A3ZuR0mP$+W{yn;CFx3-Ui zr`8_8ZEP+E*$b7ZsDp+nY*YLmhLC1rBcS0YWu>S|cI^cAqz7B@GFZ0aHiCacyR{{>(tq>Vg z9=@rYgT*b?epOBYOVXQcwzM;~u#owA8SMhXsq5P4jbV-WqYP>L>sWQ2Qr4`?&Ie^} zB3%pa69qV`KyI>DoloFW6<-a@j7w91_ve@K%*Z!jxkbK?)9F&O0w-u7AYZ-u z2X~*$gELrN{35=+i6A8|L!P#&cNXMJgGXFrMVQPxE^O^CDbSt~jP+Ju8a&-FiKr@6 zw!8`FU=T7?E*jf@4)`=aI))hyMSsu`4B3+>cqivNfJuX3yk`FVY04 zIxIfRwaMU*+y}@m>g99woJf(mm^I;0Uop(FecdpO%RDN{Tf^GduRz2`y9(@fWF71t z6wU32K~OgMYxzmei~lF>@*y{<#o+At6q84^WOu+$)um#5??dcdxYdVL@bL2#A6KSi z2Oe&epZQ2~=22+javjf1GV+>Hx~bWH#A@IACN<9P_GXJp z=GaA07H!_iJ+tLMx-lUc&17UW*|h;oZ9Kl?I4-1$R>o8?wsG<)jT!Y;Wo2@|Ryx)Y zS;4_tZVzN(oE9+#f`IK4r=VU!OFj6~uSZI^p}=U7&aq$~lx#2=CQ?l^QST6M)gJjV z5M+T2f+JJNnpSx1bQGcUYXavTE2&}-4R6oezYWy=QN6m-otRY5qahlRmMts=xsA!4 zA&BTkYo-u}1yey_lEz%xj^mCg-B(_3qgr+_h{54iQ&aTN)h2CBamSZr{8(8dTPC~#cNA1^6e4{UK|VOiw%JsH=Z6}P5FA=H7>p1# z0Xsj;@*}F|Y$;h_3U{Vszoww`-4aV;_q~k~nOO%5O-+;T4;HppNGDm##LlH^nV)OQ z)qhrJ(%NQ>`!#6;uLuozc3hPAD!REaxa4MMJp)7Ca;SQUI7KF9pHUJII{QxBHM+{n zvk_Q!#pii&T!#ev#-KwA)9IJS45qD#_(&jEsa< ze)%dv4b0mzbKU10>pZplVr+%Oes9Yd_zCGbsu%gy8Gnpmb1=Ma5!0(_l{k`SZuK+k zFu3%-?>_^^=g;tI!h)sN&_x|hkZ({0TniX1EDwfWVGAPAa|=sz;G}D~H&ixbHgR)i zyv18>b$@00|6@qMsXDt~-t@EL9TaQ;!sIsun5eaxbv+m9^OjYRI|3);1p1t11to~w zG7p^8j&s^PU;Buc9hL?I#ezYu_edcOV`LIA3N+W^XOW*SX}pz=L70Lm_j?eC1H))6 zi<6SPIR?2GVi*uRE{h~XsIwyazP~{!z#8Fku^08V8F{rfZz~STmRjstu$QZ0^C<%Eh zS}KUUVPxf|t@=JJJ#}A0eYK`j&lfL_l7Cm^160vsZPS zW=Adz18=gi1!Mh#Rw>&NYHg)uNc5=}ud9lkF!!o&; z!{UP+rh_x+Tt`S24L<)9T6h)QbFiL!$DqTw@D2Y+q){m>zeBek~w0%J~;7azb+FBH6 z`{$7qI~{EpI)K%#D%5Mca$}~Oc7s@&zqQA%L2HEUg`7~K$UM5v2|U}%sa%P6fK`h@kCyDmrgl%~ znm91h@eO(UI^uV;20iiIF-wC-Hi8mI5$7C-N!up*E>g#X7M|Ak9z6~B>gETRUf3C_ z9}^I*obM9O?>6{1G0>M&-;bQ&ecTB>nY+X_Y{_1973?+I)QtbsV>(uw19BoOXA<8c zktg~6O&viI%+L0~5B752+uPO$YW9kENca|Dyt{-46Zy(I-UAXpH6B<;YM_IYnSGt3 zj^4g`noLrm;!v+lVA~`0wAV2mH3aXf%52q8bW<<5iqKy*@%*jmG@~Putj0)hpejPED+N%@ z3?u6V?kxt}OL7_Wk#3$=VWY%&ibDCopn6nd*trmZIOa_2?*nA@vp}wKOSgx45%KoyPxX;E7{5 zH1oq?&->gSOzO4Rb_ro}Es9DV^wCUVep(0(&S{16_}=lCV5V_&H=!(xLKXVL@S|Eb z-PWkZ7rBADWhiQoJ9Y?>&zzf!0oRW{VFa^gibOy!qjne6qn8}vnw12mUW%AnObg_z zz6p={cgP00*Qa)S+svL~$>_ozlYvJOX2ae5=hSA66QB12Zn-{;}QhElPN4TC{o049upree>}?YC$#54fDZ`=lbo3n@-+M<`Ps35sIx-% zcu2L})bpZHPI$<-^8KKSy>iM!iA~z`R`(|t#a?K(v4y`Bu<@mpqsy1z7*2;Ygsslu zP+vGA6KhUzr}?-P&-6;UxlCzxy{(3|*y$Fl6IiZ(oa*s`4>7zE3`6~3MzD*#zliO7 zfQhyBc-qKp&C@gz9#)@3xoOF@GWCIiw;=q2Lwfty1Rk-!l)Kg3mISL1(jw^Z8@&x7 z1puAnpeZHXH<%F`!bFYh2Q2*ociZ}yDDlDgFlqDW-x2u>@x4v8`tAk{4^Rj{VMh?t z2r#m=`U)a(J&7oAEDjp|8UMUQYOCamQw%uB5X*YhI|?~J)!N8~<_5c6E+_5qDmYzf zh7O323?Y!lG+NsK?RR_reKL6Z)#43p!d~O+?jMO5V1XpOB#k!KcT-}B(sN==thrxP zh9na#)UNsS#H-vf*2TQ^(ji(7&fXN&xc<<>4Xpp^#rcFr(18_BAwI~9-!xFdvL0Vn zATP!|E)CRP=EK)zq1>LecrU`ni8=-?(8>C<|BAG`78I`*xR?9MNMAmdXUQk$>~SJ1 zzL9JZl$|?}#jL3MXgojRoxvZTqY(+@8P=B1*=6g2F|dg|l+Rx`6{{frF!jNn{R%6JwyV!LQN-_R;+X)Rcutq)clLqS?Sc?M4dhJ>fc-g*bO$g~MWM%kFzszR z_Ks%&IhuVY3U-O>MQq`;c;all7Zx_s-z7?LVUMl)`;E87O1LcVcfy&IANCPv3apv9wTzco{EA?ekP37N=xfZoKTlk?pT7BvKBOsGV)5-WKaW5vJw zaf0j3O?Rv$jl0#9hv~8mBwYLaKYJohP;Z;iILmN-8_dd24$4?4=f6POM=}jH^3tiO!?p+K=l5xmAP#ZU-_^$9!7$WzO5%K z#`stbC@;Ce{QW_S7#`GaKyp@Tk5m+8LfQ$Df|fiOK1rSo#t^3 zbJ?bZNz$E~=MQ{vyKN|dCO6{~CfSqs^e?gb+DvuBgOo|IeHL71o~XtOfCmsyhvv4kZU&sB<^_*0B3p=0-K`WA z0oCQuHa{%ZP(q5Fb#Yo!(#^4$UIo#;R<8E)=0e>mTago9dwfan zmRfR`NTMcG{Yniohnowh?Hhq~81o>Wtqv6zU$7hj4NUEnfPY!8J0dG|CB9`~}86V_C-PhN_UfUrGNmJ5`8p&;c7{-a%x09ijY^TPcC zRSa82Kbs<`Nww_oVwWYZdRUs2Uy6^^PwAaTF%{LHhQzg}o5nG}(kP^zUNLS(H_I~F zju7QMaqa?2rn=GZuu}ED*`%;|yOc@cWO)hz93>HRU(+oAU+9ZN=gtb?bOfmzCxJxL~`4U(h77n=*JM z$qjY2iE9qa5hnf;;sw7Z>MGm*XmjHEx$i;){UjE1sBb+Qb+VIuAbqCMT*1d%x~D7l zV$@H$se0nkl`}X19kFoK2PnZSW`BuC+L-!|1-UiY&CBG8*=~_sivG3-)7NYB3hY3( z(}G@|ch%b7E9tl&RrP*HT?D^_wW?Yt2m2J{ckAvnTqN@4PBW>DQWNh=XuSiMoKr31 zWR@65a73L=Hl~J9Tle(8aF$i1o={$bkOvluA8|pAEzZ|I;`yD3n0>4s0v4XqH z8?=OCH*aRfzu9Aau0WDZlu8!g-Xz@8d?}F-XK+V+nGbUcf{MzM zH7u0BkD*HTdaGjRt~`FWZFoTB-v{SfZ%Z|dom3)S{!d98o2(RAM+bq&HFae1|DME? zc$}E#Dd=dYW}K+LuEeeCFCr%%lvF{A4X^o=qZ zYTKPn#O4}@r15-xSRHO#uL<|aS3R0o`DI90dmKidfi^R=AjohA$E6)9w#GJ?GzVg1 z(&qVOHl#vbHM~TGZTj0||KXNOP^OLEf^iwkWv11D1GfSwXR?P|J$unSz*pz!s52?s zh2~?_4S#lOD*L~#Llqvk>U*8IpuZzG`ap+Xm!QdVg?1A6RSL2PJr-&FrW9;E%r8Oz zr?x+sAl3Df}ov%jceHplThU=!VR1nM()eF6$ zIeAdT6l`%+7jQYIp^_6=KxxDQfs>MdbC(Te1Z9JnN9ip+r$^f|=&lrfkvThK_=x*kVd;jbmBqqR4Lw zIqjHQ5GJoY-2S<`AYexo{@9Ws%fP4oE z(3E_(q$!?Dkheoi>&$|`gl{OZ8Y@n9C}^fKfWUzsyVF*WVP|Iy?NL+iPUE_eEJMou zDO%}lg}yUvRNxbE1**Lq5&RW|InHN(gP{vx8b}Sq^L*g#1IdT8+?hCE!qQ<_N-`^? zkEIpKF)$*IsfYL|x?1a4peYq~-Af92HcRaG{S-8O&m?i3aP5DR_f=KOcif$(&MkG{ zY8`@P`kOBU8crXslYi5>idt_zDe8%%pP`qrN0=Ho?d+uZZ=pggj(0$$(3MFKwMaw!VYva?$fT8fd zq=?x;ZqIfiY?{>O?Qld$U^nzqN9GRNR|a139#*NE`QN(0rj1@p%E~ao`(l55sYOQU=GS8D)`7D)wa)5EB{K{D#Qc2(pUO1YQf~%q=Sdm;;l0-x_3>iO!&YD>{()0wD zDN5*+H9wk>ak)JWoQ6yGh$nW48IE+(A>A+7I9aYx{f^4wm+1_01iC3a(dsAL#_eZz zpIJC?CBAo5Aac@iPYYXCNbP@(pYLM+jo%^M`2Ox{@iZJo4UO~t#}_L*MLu>!1zTj? zq5})VKD4rT^J9slJg`+U`#po!ka3A~k(9YD9!dL`tN-B`4J`yaKJI~C+grd@6_v=2 zNYX8zLOM_5zpeX4_Vqvhw-9r8B;#jiEd*Oa&*p>+)M`@|a>y~yY)8k@kzMnp3i943 zb|awvp0H8Xl};f=1rEY2W(aB8WCil=wZ1#ZG1@&WhZ@@F8N-u)GU+fjm6b7MJ>-w9 za^|?5>d;3pFr2I`GHrbGr<9>$1}5m(giNz@;r){mPd|KiF?=*{4Zd@RR95UIMJ{rL zg#^*At5P-?W8KDUZu~TAUJ)dc=;q`tk4yOKaqq+y`)oOfDWe$aesAt06VyhWb{+7I zFOG&6(}E|`10hp2~WTJQ*NP}o-)s>dX3~)%9)l0wBXmL z?n8+WJ}1oK@x=3Zd`vj(_ecbrz&MenWWWdtdA(zeoQj9^zTYpwe zr!&L>`-a@R@E=Wc$)K4OHYtY8P&5%y87a}E=>Ye0vp|z@@m zVF<1%jU6AfAfV}FT}8Z8clDbnA85_M$FhRz^j~OrG2E8|mhFtU5)cnEfx zEsO495vXG$Hf66`*2Q`BjjBXtk3dkkLybxpxir=Ye6Unq*P@;7WR=ZP_9UPJ`Kl;6 zX{bBPwtH4JXwgzD#|@*?W0vQyF3g6|3MlcVD3gaKprC`&k`e@Rb4l2)iw+LGyKaIB zBeGX6b^P*l7{@c5s^5s$9i`iR&qY9&^au{+zu&W)BG*sY zNMsITa(e)84eHgVHQgRdu5SzjmQ9kqylrU7wsp*|7((_*RZyUtO}*0~0~l_i@jXqp zwrDtfH7c4Z`#60cG=T21SzD^-G;07X53B-&4sU+$uq`HtSuBk=UJx*aK+ z)ADe|H8kL&?%%8SaP{s6jw*qX4tGW(Lw}&ww1RO-0LI<&_+H5$fwdlk;MT_dcZAl0 zeXk)a!0i!S^t7XD55?2XCvS>;J@f`&nijmL=3}in& z=tVHxt>{&DPuHaZ*JQq6D@PuOAN5ivcoC@5JmeQmvw-m!Slm1GGgs4G89VF>qK<0K;%$-Y2w~NC zhWgZ~iS)%GKUyiCRW6d`dGtV{)v;-vE`O!C3wSlLIYsO_Oxvv_$(67um+R1YPt1Hi zTto1N?~WPHP#W{wOYtnLoVa2BkeqQi%Gv`SM-al(F9(jpZ)QbzhQS`faOZU~Xs3%S zai|J>I3;uQ$*SzVNNd36$=ed9(Sf8M<}2qq?uRZCu#l^5_|o!{1&W*7*Z^~m_e9ro zsFa&-6Zs9T_=$F>9cfT~wKKBwMVVSm5w~#(t7ROH5vD&3Q^eMqk?eo{eueiDI!)7_ zmZo7qhAsCgR`n0Oi?t8wWwmLa{ipT^b+vP8xu=_Bv2X*6zMnR3C}xANnIXv}GKq?v zEjG-76oj8r)iw`A+rSnuP_wH;LFDY|75FoA0q$f*AA(!L)YA?(-&aFYWr6I_P%lt$ zM;PE zSjaYlK2wZd%|4OnWnjN~9}w@~A9Z&F{Iskl^~z@|T4v6~@@^WHoJmFf%Ch%7Jbag!c1 zL=c)eYE|8AFUr$bexG)<0W7^$@FG0+IfEZhj^J_ZD*S58L1NR@>BP$rM zTrCF5ls(Th=U4fL-_&!d>{x12LAGWReaxlc0v%L3MQ%Q%w<_p@`9NY_<#5Lsf9onE zB;g?THQK_eTbVquFzt*ShH2^IT!mTt1>QYYKs#qk0AYA)L%GWT57KWXQW_{&AxkP; z+OTq6n_TH4PDUmS270JzA(=Dxmj2&*)HdRlvCl@t*r>f1xFEoMU0wni0BPyq3il)U z!0W~zNra;2L2uN~V?=SPD$fdyl5i!nQF@lZ_>fnXxQ;l%Vbc9D<$P!HokJVG-MC%wyYec1F>_s1bDsbh7C3@l7*%k3PI$5XA& zHfPGjSdH{>EP|ejZdD}NZ0!C3LXUWi&1k;i`PI#a1g&0MYHzd+xZScw23rzVG_qP6 zyWOvP27))U%bmJ?s)}FV*DKgSr{=TFp@F$eu4K@-Q+P8@^P4V*_6fnNAk56N3R+pF zdDZ^1_C#!Z@l%#P*Uz?^WK1&~3C5)&z)%4mKZF)T&aD0UNyK;1FvcGd`DCDJl?Agn z(T^*|^n=<5Rxyr=?8G;-9$GcG}|UCT`i zLU?#Yf&s}Yb@Wv5BYk6HLz+?mb812 zz2b$#PYT?WHrJ`bY1U5BKG*3NbU(q!xI^wcdxzSh_%>qAchZL5m$OSCyUgNrH+)LF4vozI|YA>tGn9LzMD@2aq1w1Ck(k2 z#k)UnX|oxHkDKm*Ej~WBg0_@{urikh%Dl{;kS^5c{@Djy zS|*8m^JMD&6>Tu);@D5$~{y&9l`obRzTY z4aDc;-GNNMM|*{Sp<5p@R)9|gBp@iH{$}Z5R@`Qbeg3DJ(j@K|5M}y1-vW7wPYy8` z1RgFCA=fhCHDq0;9Z&br8s&1pGQmCkNf*0iu^x?>qw9Vh^d4jwd9KKgXki|7`~+L5 zU%v9Tt7$Y=I`qI&G<uSxp#}3Xx?(rh%%GaanQOJ0}|4G$4OR6#^!Y? zuIY#oSz9|iNt;~DKralbkU}~)sA_*Xz>B2WoS#tm5A=TuvrZep)RDC_uDSritv%pyvJ%g2ig08Xm^>Cb zl;ugIs=4GejAM@W+tJ~4orliPh`tX@Ui9|B)OeIfS5FhfOzA9+;HU||poPX^4DneC z4g_iy^O;=&@AG@d=FkA@+BCWwmpbdpc%s5_nUUx+?jX~W6re;v!ES4$W1~9|F@gQH zA+SEz@v00NN)YrmLsK!w^oqYsIgJ{05Z|xH4JOBfwxHOv3{!9;Ps@Gfea~cMs-Lb;I(J`5dbbn!DF`O_fuIfQD zmMlUjFXN&4p8y!ekAL+`5VM9&{J;W@e!CLu-J2{_bm7nz-tQ(63lSf3@B4!AgUC?bn(aQpO2asQ0i>y=>$dd4<)n zJN96?GijAJTZnCuR_1k1lBo7KwDa+W@!Cqw(f$F73+7#Z8CHglZ{+@0WgaYW zin?ST!v-K5+X*xWm+CfUk4sr_CpYGE_``?0wh*vpd@ny&=KaHhGlISVttFt^bYdT@ zPQXtF%97({XZXJ&Rja!kH_Lef&nDQ7KHe20-MwpcVU!dJu5LWy%sDUKyi+`cM|y^l z=@`d)2U$7oEZAU{;MF%fcwY+?=!>-AO;G+66ntl+YY9%I1=5M|%Py%hawAu~rKg6a z5brXpOy5)fWr&HxLx<97{3pDp^DYXBq)=Gk1=B+}g+FNkdc`VMg8|j$;59tMIWZ!9 z0q;c41aatnAdSjx(IiPXYoR$7963Z&n_2&#SVfG3uj z(VNTg?wY_~S41;G+#Bm|X`JwCS9iMo7cL4&#G3;xz1gMpKY<`n9+dK8g&{JYVa&e( z*Xv(WQuen{)h?GdMGr7gaH*s~K_JPGg8Tuxdzs}f29X;u(P{Yoone}?4l^hGez6b7QN6^H_aL3(WG_wOMsbq} zGSLF9>-4A}{G06Ci0>TAsl{%V969tRwS-5T>RjeIcN!|~Frc7cL@8uP8u$Wy*H{8E z^Ghq3idP_1B@fsAgzty53MvI;!`G5r>ink&VB1MTR*Mp=b^}`LI|mTsHrYUOYlAkSgk*AP;5f+_`x6y$G-&C{u2u_! zCZ}ERBf5}#7S+X1Ewo5{x5_~ctYdZBMr;oPcbOjFjp55ZrX9_i8yi9px|>7 zk1ssSjVf_s2{cBSX%1PgSdUm=J;Y_U4qr7wjJAAwp&K-OoN~|UhT9OYq9%p2!Undo zT*g8df!NPtL$lf}u;R8nrC&JKY$}&}DyBVob1xYIb&0z`Cp1hz>cWo%cxSr&TsjQ> zQfq3cvCoT~(#%irmmflP*{cy|bg_`g^O&%TL8lZJEWD`VZ^z^kXnR1w7gx}m^}cOS>MotPaO)tEYSAiC zegd}Y4Rum}bd|Ky1$G^P=#DSx)AiQNB~NdCYTr{*?d^U8JvNaq($I=sWB*ap3_%{ctGkrMq@MQKi)SBw5J ziMQl5?d|MjLf${sDhx$64uv98%N%lclTD`&N*+zsVnIy366&A#qv;tvl(8x zQZM2)of<4lQqn{G&{~{|_*F%qg;rmjf7jBptiVG?EK40Pw}R*RCgk%vc&%5!eht*ASyB=j!h)w4YKwR9dZT&~ z0n+{NoX&m_F+T#?Ge$uZIxw9g;~V47_#A`naG+`2FCRJz`q7w0bLDS0J1#}J%u#Yn z&wEMu1m++sfqT18@Ms-OQBOONTkRcIjp6OK7gS>;YpHBTpQA`U=QM?zAw*8QsUm&B z0ZmXDEJXb}I`DwkF*|S1ov;aRSpO>bAFaJK`NcR)rtcN}zhN%`pN5Jf0SPI=jjy*a zSK$UxFJmUF+D$wU9^hyR-W!y!s$;qmE<@OmTB$L}~$Q1dsZp;K3cOHwgUmx2pk06tws)jP& z6@VsE0L3iOX6-2N9^8p8D;{yb{^)B2DD=4LmfV98AZutvlowVra1xKB>d2o%_CHp> z{=h_JDy>OPQY)&5uDT}6jnOGH_FmrdVg1{n^qMGgrGl~hCZJxtP;x{cf9h>2G9O+R zmIBPxJx|Y0JL1D4E~cLw_c~tVr86nhaI>>+I*_8d zF{4b|C;;}8k}o$^cfUt`1PrahtYe)AG3N*|HK^g9 zT?;5Fsc%$3!vrtm&C^-dBI*Nkh^7?GRsS_!2%7Eskj3nI-gUa#8)kt@F9q?>#VkG@ z>@%%qUcQp1z65o*5sSA=pv)luUy&qy%D51kkaQcyN6~6d1Dq$LZt4xLFuI^`IB?kG zF;tG3!}#hmk0Tbr+O<=eg{&k}7&(kYgoc3{uZ3$gUcDeh@_-Ed0HURL9$9(fL6ios z5BP=F7t)hd9+>~x)8Z{HAMS&9lh1?iT$Vjz0Armot;(nHNkQnM%Lw>P7}?lvpx`D! z(Z&Z`-fAl%!NrSv0GQ$2{X}`(-ey~{?+kJc?{S}_l2~g+hr9H&Y5ZOx)d9|hmvqz8 zp-@n$`VIE>)dQYPUDHhG=ug$gl~hZ1)$2q(?U~|0UrB~%g#t=~kpuaqafXyEcLpVj zeD1xseY)shPFf=2a_+8rZJ*9=#E9)iye@gh@f3|^&Y}`$Tz?$7LV2WV%s#t2>(fu^ z0XO_f{S(nz0`@id^`;4=!13yhwW5%%7OI8`r|!U99-_B{B0`rk5blXLr|&ls=%<-# z7wuOOszq`*$;Z##j!`NUO42Y`A5zJ!GsR-0L|Q9Ymc~BmX0|9fvc(SaZ?mpVPVrW_ ztYxI{3p+h5$r5be-LyK`3r8$7$da(Rz!!t%`g3EaOp#i8HUCe7t`h-gDHG9Y)k%A? zXtN-y3BsB9Ltb-$IiPRNKMkvk3^1|P#@^oY&1ymNUb^h1;9UkyS?Kf@!ePQPy7DXw zpB$>uS-~CQI3e*e*10I0VwK;OE^w+wMMUVh+RF3oi5A%MSSpRaX}VI)5BE4!vA*En zrN7>Q!4-7*+EIfKSGC0&0A(Afa>=w5bA;%QqP07kQk$v~3MG|SAR`HxUVOdWgJ+UM zgk7jZa1bYgc$Zh(ESwR|Jc=T>b`6i+OHLO`A<>ZqPcy79DVcvVic?o@EYf8%3&qja zP;r;x6v8VF8#@bN8Sm(%si(Eu8$FH^!%@w zbe|eP(8X_>YgW@MKqgCMBy?zU%=tz418W?#U1?TsQ!IjTAj5mLlF|9JwdQucSad}y z1a74^9e?z+N?4aN!Ll3h!fPliLE}XRFU}neh!t0&S{KLjQ$`ZDT(dny+zXRL>BRu_ zB*@|^GNtUh%N`On`rX1MT`XjU)Y=RJT$7+Z%6YFtW`wSDM(LJ$__9Nn*idaO!G`kN zG3Xg;tq+(Ke`0fTB(L?8Zk<3vdr!u~JbgQZVuag%ewarR=zP@i9UdzW{MILz@Gm9-Th=tl|aBm78W7X4|>tJG2tuP$7K0=5)MwTT%l{bb@h6T;mz2 zfAPZ$;kMliBmOAl@bbU|yoImx2V6&Mx|TUYJ#joFJx=zVE{6_K7#~%y-pJ5esK9D;Vhe(}9bl+Yx|j_Mn|>BrCfEbb{;(<|_y!Rh_={Caax!_-(n$sei^3}o zZ$y?ZeYy?}b`(AA%W`1HfG&qqQVI~b3)%*^IUI|XmgsdR%0BF{xp|!`-Je$WR%V*^ zzDy;}K1OX#O5!2jkscIoM0`+mJCAeq}M6WW0(jxBvQGW}%aVWT*U z3k(V-%nc?Y6Ltg}2LLop-1hloTt{a$pO_UZ1qBElSflcjU7uR(p9zG29Av8g#Dpc* zLPBp&Gz^pg0_9;7@xT;H`lT%}D7!^oq@v1$BJ1h`v7K*T9a#lEUh1mCd8Sv9;%R}H z@{@bwAE?wno>^;t9q-cZk8ur{y`}aLKf+gkg5se;i$^%z4N%t-$@_p5=a4l31N)pv zV4{iU^J`fyRaAZ3Fb4@B3itLya2amri|K5A_(0aoDsYNv4GfBMXkEU{UT90eM%tsw z><;b#5x&Boos(R;tjzEMM-O5_bkr@m;6?K+v|7#oiu^ft8Tvo`;P)*v78>5+c`cq# z5ZPkPpGA&c+()}@HJwOlGSkOEo_W75ao0FB#w(PDCf#k8;a}zsW=n@ z`}>b7?wAITWJ|%ZUd|-Ix+D$$bj@(JnzP|LF*9Mz$E z*SDOCs8LD)%|0H)TYmX}vY*ZH4{oLq=|fUoZ%r+gE%QCyT^fxJTs*|}u0LpZs@22( z5T)dsmV_D}{jGktob0+feey3OZ((8~EK?EEhZj6gF>)M?>F|9-Vh+n_DjvV9=INpC z?#>`6QXtVxNFlmp)c&c?3thzazl&3lFBmB#NTke6%tK}d!=Z+ z`IU~Zz!b&T4wbU%Cl}6&7iPFOaLqgPG>`QGn>rbgon|%hv~Nqv#D&n~sxA$A`z-vf z)z!6ous}XijM{bq+FMXkZPlh4+A2>c1rQCMs;E0a;2LNc1Raw{ox(x7lAy0NGRu{k z-|yV^zwz*I2(~=Q#X{pIP2Tbjng3}dI@=fN^NQ3(p{I=)OKy~P7?90kC zB1%(l$>BMx2pJJj4TfZ4z6ymhdgytb>m#w>Eb3Hf zYPwC;_NN2u2;8UP#jh@7KS=RkE;Cy@6Oa|BMKClYEQpLBV(e)KJ>cdf{p7D9G>{Z| zUL|J5EGsR;qH-6&w{h& zs2+tJ$>x}tkoppRRS|Oe+`tnaAKg>#+ZEcLrvV=Idxr^JtRfqg_9gySbvl2Jrj)9r zQd9BkUVW?33a{6X%(rY#x>$B(VqC{##&24#01~F1L!34QoKeatoePTZmJxA@e1aUI zT`M;Ib-io+fU76*Nq*`7sp?aXjJ*!C31E(s)EIBe5~*JI7h$SKH&Yhbtq}O&Hqe!U zGWMMrpW(S7$ks|7bQK~;uvE!WNn|H6^Piux9os^`PC6p991s#Y1=s?adn`qAYvK1v zsm;7gA*N@X3@}`aet-G~RgY#@r2kgRovdQk;bADqbinZn%b;n7%wPbaoAF18^D6*g zS}-BXeQMt>pqLotg)2~q%?uh?W&Z$q6te^p)F`%z`_iQo^~m^PCdDcgp*p0zT|4MJ z8~btqKt!q%)mJefoL*LdOiB*YML591= zJMBCJq(p_X?{&;~P0il?;#nhJhLil=+0tq?lrh90fn%iDJwuJMI2dAZ3h5Q>v*e0& zbf(sw(2*eX7L zZ=t56V9(po6S+nWk(czcG_mO_4TIp&njPqU)AE=?CR-&i6IE$?b#hCoVn!ly8q1eqCBq)sWGUEV)2$ft`0O>m_+lyXHr}vM0$p%lnKWNROxtx~y zmT=el^FF;E$qAlxD|C#r7=fPFfTp7X6M<9QwNZ7YR<#Pa$O!RQfPS4Deltoc@E!JG5@7+zOUFtLzL`I>h(qFltoSnLZlC` zMe#?#oDD;SPiy{cJ1COL?Dcla%=f@OMta^W&y4XExR_ILsD=lF2A54@y>lHv#z}HQhp63yz%!nrte${bvYA{-AlfIo*580TL-viu(E2_eY`NMDJJ2@*B`X}rj z2d=YH&b?643reB0gPf7#WKtveC?9~cPHM+X3O|WW)DAuOR=)+h6xXhU6gBhSU=H|7uL6F?>FJQk6dyg zgQx0QnKX7Oi-U~bV-7#FtIeC}JhVN;AB0#R{Up{S7mk4V{qHi&3ug{vvT%JDbB|Fh zPAHUs>m$kIK%7bEyy`mWo9RRT`hJx<3e7Rq%2{Mjk;97#T7?cTx+qbPPJ~XcP z+h2s|KnNIA_N0scZ#_z?bZ+PxEvu7Unp^8MA#x^8B`z#poLYf7vUXyZ;VkmZL);6% zF?(P}4Emnt^5_=vt<#RpQyY}ye~lJK!<2_rdgdAIfrS|WJwU?0Q7R8yV3ugu2HDCB zFIVKPFT?OQKS)@aC&F@JuFr7q=g}13pE;s8$^O9iSqAnz{A7qxQIMic_1G?$#+-f8 z-Wp0KA!Od1tG+0&F|UtTf5bOfK{M%5?T*^g&u55YFwZx-`mOth$y>u=6g*M(7L!~g| zxt~b(cMpf}Flu3xYiKS@yd%p1aqEH-z9s>1QduZez%6AY?+;OCRYFxnExo8t92f^{ zNHyL6>_Elj$j$5_#Nw-D=R|}`xsOnaUDpjC5@`EU&J?CS)sja;IQ%IFd^Ph3gaFQ> zS#TlGD6?a92icjVNlSr)O;3rEf6e&~+$udm!zn%S_M^`@eRhx#$(`>=+URu+!Kzk8 z@l=(mr~_r$yEvmfVhA!0!bIHt?MxgyZac?E&u5cbBtL$rEXmps=XYB6f@)luWb=x6 zmf8FlwYaH;7HI@dj;r3;{Qs7o0ut?>YI~qR7wcf%@tKeQc7LCn6vsC3IlR5wJdPw*qEsZwk{BW7{;#fE=Bar}m`K zM<}E`s-4yw%c`C- z244xxC_~eZN)jp-ZQfatFbPUIf^$rp0AkZjS`CjIjL{g1JMg5lbK%5CeP&Vo-t#Ou zdTXZ}A{(^Vi52Alm!!Ndw2$wTC?r;j131zbiplnd-_e2uy0`8=OLmU4V_5V(`aJ>o zQxLbsA#0V4%u54J_>k@ZbEtjqj=zyoB9Q?<;+1z7P$n@UoBI#c_!~IfQp0fz?x|`Ei3^2E zJNJ~1I!CRvdFIr@Tn2@f4vx77GWwO}DUl4s66PGH9_JNYO9EzT9VZ{M%$2wC-*GY> zEo$AhGON89t8rgg@ZiCjrWThCUs~FXdb-1p?zjx|GW!dRX^MaEsg(>+R|2qVw*!0x zwF4;hADic27h0zdBdK3{=*SG8gYEPfnm#UpL_ggQ2jJ(@C@5^s=-^t6Cc@P>0{M(T zzrk(v&}s@m+in}t`(5?qmoaGlAN1;@-G>JDh> z(4QJIWzXR2j>65UVff=UkoeM3pHYSr-_04B*UD_~vh~*L;J|4it!Q}Xbchh9pTrM* zl?+;{2+rM2yudGu6083=8Lb41n?^HL`R*OT;F3xOlGa#3?%;C>7Nwn@UC`n^c03#m zv!rWbe1|YRXq8%C##n!p_zBsp+>Ws4O`3$|yzw-lcQm15uMTjLe78EX0?*)d{ydm( z?~(%yo%F%2{3*Fg;O4BKzd;pFoMP-p_&xr<%~XqFF&z5;%JmrJ65Vu*hY-$<_m{-Z zWZE!p|L&uGn1Ib{;?^zfb+9QB>64=R`!xQl&BN~9xOb(>*}k;;pg>ayqHD8&u%hoc zo)PlUZ)O&>%Glh={;Yz3E* zpAsD2228T_U()9bKG(}OelF7kBXUYb_kwqRQiYRrPJS!DOBID&Rj4B) zvo>S{i9dW`cC!y0eoVb!GU(JpL(ueNa7nGD=U(?SV|(t2>0(D!Lk678O8E_u-w`<} z=Ab@PahXgOngL`)787L+^_MrSq^0u6Ic#fh-lgsNtF&UYmN52b5q4AJ%lHh76M5Z! zv-jQWSFy&=#7mPj|Myp5WW$d0_j_y4(qcHL7D9t17`u8dL)rSZX%MmpU2=jf)EzgO z>e3Orl9}zDpIXWRspa%I`@ZOR-I(r`yhAGFBu+pn$3e4AYI*^H@v`J$kD}z2tEIE= z1y#JZX%^pTpCGk*8wSl-&qFHju9-b#)Lf196Z6L@KUi)I_x`JRa%r{Wz4W%aZ?bq; z@NlzNevm5H>+GXle#3XC(=gJxwZAH&hLYgI1e=P6lL-nvZ=)x^j>P2B%=Ha!0=2Qs z+))`6QP33dkETpk@ey+CZPeOtI;b%!0LJE;h7GAZe{>ze!2z75zu<^Zb8faVX~daK zBZm|P?R(m|2q7C74_G#g*eKu14XB*h%Po4|CULlMbZL5|`6?iH z=h!6)iK5U;u&1GMJJaVD#n-zK)kxylqrRl6Y_W|=&RdI_{`hE9e2u;6ar7*5>SkrC z@$4udcLi1r988`MhnBQ*tG8>9|3p6w^(zVSrvwhU?Wy%wU40Topwyh)k%Nu@xp0I$ z6Gc2!h~3Zr${mFzb-l6$4%~(-2Z9xAKRhaY7DQVcpPBt2obB3vHH*fv%8K zyp)U7brZo}7}%L?S&y8D`G&s)OtYBL0b#nZ99HQF)-u-CLitS2kQMEU=`Lw;jGg(0 zz(Hx8@ruy!qwo%_9*QlFY}O2VZJA!drxVEe^au6&F!O@5S=??d<&=jGZvJ`S1%R1A zRExPm$d3cMHeLlx*6oOie8%s-*pef?cxc~1myBFx5S5{OGL1mjvAQ)yIQB0C zN0HuVE(fgRSXpuedl5*q=`MT;uW^_o%#gk*(d#Z%hSg!e*l3SfNQ(Zc?RemFg@PfcDA`>2I5omRh>`{r%9(k2-!WTP%i)8+%SVF)g*c$Uo# zFzwVtWEIZ$S_Q3r#)F*1!hY)UIakKzliZSjpwWq?vmo0qxW@l)1RpqXK5YS%hZ3PB=lU4kbq`pS8(Z#4VQSDpv_VMB&Jvm#`TB zib8LL&B9cE>HjNziGYhdf4|2b3p2Ow{J2fEIb`9MA>Me^$IlYfJ7~-&3e7#{X~J0+ z)GvJWeaL+^Ie2QiX2k+wb3B?{BboL+5x5-^s_~%qE%c9p#?dH%VX=#8z8K0c1G+bT z0@d?;B22!A;B<=L3C0EH7;d-#lQCF_{^ICY8R>cjWc&!!EM;JtOgr@t<8CzN6Ojgj z=)!Cyn?;NB(+P2(rbExkS*l}jCuvLREl$9=0@84vZpMG1a`=);iC~a;=Pmzu*ne8F ziJZQF8<#P`7*$OPVqoa< zza0w&4Alxu7~D>5x2uGkZoWQUq%$hT1B0VKeaP)D*H!U+CY>2VMAnKi(l)0^~p2pc(W*x>@Gu$~$ zY@(lvPMv0e!&~vMY8!1-TSeiZsl%4u4#eS_rcct8riECsgZt&9I?)B8gvs1@g#UW8 zlzq6WH$Ba+ej}SCEC#-d$>d<*DwKvfxl_&?tEML%Ja=x9(BpNs2m4qMzjj44-WPf1?0^?H{c>T|>RMo2gj+Nd6g{+Px z&zoy85y;pdmr;ZPfwbk?44rkGSYbo>o1mVg=u*JsxYA0*Ziki8$qq5coCoS1l@pl$ zmw%G%mY2wxIvXJ7ZfLA5DTG)|_XO!RQ0w<*;=*i7^J{})jVC6WL;k5v|C~MjN2SJN zXTOF9#P7)S<9#Aquh4RvGPiPYF3miD)}prf!igtCmY1kI=%Evt&#KLAbqUk2oY+bjJPEx3V{#MA7Ke)WUWi33`ZA z^eY0KMH!|B_{D_e;L-`nD7U+#fI32MM}l!eYe$dBFhQh-CrGsJGNu45;AMZ5DO(F$ zp1HZfVtIgJ!;Gbr-mZd-zG42!H4w#C8@si4aX{m_@{sc5`vESho}s+4PdeYDHrKYP z#I4=piAD7&`5EjKCBs3(e&tO3KF;{Yq1p1&Z&(m zEWQKZu{St?DoPKyLlf@YplB3U7W#H;EiWF)_}L$8cjMe`oz7yhRM=<MuijESCbQ(>!E0Qns;FSlJvt)#izjyOkJoaIPej= zw7g@0bk9ceV9zp5HcsZcyS@9p92G}toUFcBw0;|g;9|LK9>U=2u>Qz0yX&v9vDCDn z?YfM2X}`y>k3kiJ61Dwmyhb*%P87>(*gj_{E0sm`;cG56V<&mD)3~-_aqgnwn*2wL z5cLUpD4rn6Ude$DEY|&Z_E+i%J|3t=>b6YFs+DCjWomiOvI@+=FGSzX*}p08r$S7j z(oaEX0~X_qi#HD|(*9lrY60`M6Ihq%x0cVSH86Rl5<^_j3tKzS{|C4soaeg~%e4oJ z^&6s*IJ7%4Pw>EuQj%4Qdk|k^h#l&R>2Y^wgF6EwbIiIEkuC#mtmt}`5vc<|Cv67Z zj*fxk7EV+M#O~#O>qdrZ_4UJPwZjtu9~O zTmJXHEF9nrGjhc@T46^GOcsv32fjsE4>7ROZ?M7Ck=0^j$yOECVgFT4H77q@p16UR zRQ{ni+=7UzpChB3Q5M;#qs{jFp5;it8RHgp44y{?jBJl>lj$A;v4)dGT2;No3AKL7 zg=^kJlgn+T%Ll5go`#hd-3zxOX)^@59XdQ_UIpI~i;d}>+s z2+0g^A?0f$x8I}4<@c$FrPCTeKkh(H8ad1c@8tvg_^8v09&zP!wRridQ^^x`j!Dr$ z?|Fp0OH!1(+-=z|on9Ya%Rrn7_&MEFvOJ#5f$7q^1R@U{|4r9B(-EJ*(YguGar#M7 z2E@jN`%D!jpP!J-rl!Au|PKv?-@1r$uA*Xn8w}O z$S0sC&s^_Ujq^bm$NM2Q9I+U_VYTmRmhT+BPeD`+6kli3-KA)5vwTz9%3FDHjdqyu zDL}O{x$8a=KCuRQzSVX0E=RI!slySQKZ*h*Eb0`X#z zK)cwAEj=f^NLCFeqbp#}C6dVC?bsO<>SGKSa{WJPZY2vbX7l_6BL;_o7sS0CGHshF zSnW6R_vjphVkddL7eXX8dq~lp(KXK7mGU+%O6Vs-ps$b(#v8$H{^#3t{2U}fVxxdDsofd4ENjsmOC;ab}L2J zhZ#zbV!g9!+K~|087{T`i?gBZ$jon07-49p^jPn;5Qk$>sZuSC*Add5bue;vwp@Q} z(N>{{x5=3~d!wJ|OQMqleC8%YaAOk}dT)&uQ!J_B<56x#v-OAs#p`FFLLG3#_zJQn zB#9dE?DiCk*v60tNVzjhgIEiasKF+9aCk0&^=Bd2$#Hn6+UQ#IBrKt@somKoEc7kQ z;%Ju+K$Yg-#s#UY0(S**16vMPrpR|v^DY)1|L;Wf!fabR$&vw`-ah$GRC7m)Ks#)^ zYc;_5PPpAH>c0hxp8^h{aNxRZf7&W8JXwl(M~g{b9dwCsbMbk0aIzy zLFXn2XG+jzx4)b#?2{TT9zx=Y2r~_WiWZL$3Xs_BMcz;J7Uh`1Mhc7I|qJ?pmxx z^)LJ6McV$0IzjP`(^7Bq)J~G%dLkpL57=2f!ea3dEf79sUti%SdviukI~}rdS;Jc*Z!AL+JD_5 zVUd}8?*$dueMEBxIS-`AHzW>pv2tEH$JeqIt1x%~smM0mh^_CqU>|R)Ohwlq>%37e z=f-jn_1`^(vdNeDW8=%~G!c~57gl1klaL2t+a;I)XQFl>A1EcC;EnDRkr!Sf7=$o? zF*S&b!Rw7*H_k3~_4fH}%S|!EWK~PP{)M6$dyL__-D&{!bXqKPZF}7{kr-h~U4){) z%I;j`2rl$yS)BL!gtTvuQ!a7&TIm^A8>6mVx%V^6S;(~$2OpuWN3fzt1x(|y!xqas z`dlP=8jIu+j}@M?#LAJSvl$OTQBb&tSeBrI7>SdG-Ipw6;ut$v*k<-Mu8!1_vD8=5 z3{94pC66#L1^Kk;=Llqit=E&(-LvIdBW8dlq=vmAn>LKi`@gVjKc)C54oT+(mS;8S z*y6Z*e#6S7w69$WKFC_Ry&Fmay6tk}qPRu)_Ay^Em4p5wx5feJJoW@2k0!nh@qb|- zG+7`%aJbu04FyA{rD6cDN?U-mC0S~Yj5i-di$-RGfMPGAiBdrK~oC~JLDyX?|E|D~&~3N;`YD??`&-+|3`MLErd z;OiRlYYD83FlW-h+BxD|=}V5|4Mkbc|JG1Sty?I~{vF^OeNt!2oY%#IdNV>wnj_B_{Oupc=4HT(acqc?O~C6f3aC?{N+-SP7|kJ zm~eGAX`+L-TIpnj3s(<3=l+gJ|n(q=H%^sJ!JB|Zb_yrht1R?;=*A3IFl^C zz{*k^-0rTUP~%JFq+NxdF#UWZ5c0qXB7lIKSw54d1%`w~`Px2L`2ZKa`(l{DPymX% z8w(8KBewmI`zrm^f&b2?Kf8V#7x8{m`QE+ba1s&j^1d~EVFi+pZ_&#N43Q(62+BNN z0+|BS!*BNjoEDZI$EU^5_vBBX(AD>89uimX5k!r0Y^&+ z^J|6QW_|gDc(uT5gP}Ix@2IYP|JQ(h z?Lrs|H{4Layt^T88x`a#XECOg42jwpf@PH$Z@s4B5# zY@Q~R^Bf93Z&ovJYY+$x*(jWdA9|WF0QpHAx%}YkEa;H7y^RS!!djTRTlknS8)*z{ zcO~o$w!JABT*qx_yUQ2^(A}ni1;6GdwI1;zl9As5Bnd0ZUGIdcSo;|LSXjlBA}xkX zA&tp&8{=>!KhGC6pC$<2iRcLATv z7pX`KI2ZOtqE$J3qcBPalqYkb;MxG`@4iQ>GXp-cu5lY-Yn5;R!&|yDivudEnrBmT z%eG8j3w|uZrExL63S!+4l59kPfhXv0!y00CWNENB#ZZn$#hFlpB{_6dbxMa4!B9L? zlUuLnvl!!qO+#mGyy7eeR$=;a;|;_?bUB{~NVAMpMUz#}C0`$%7Yuwr#V`-rLz^<& zA$ed?b-krf_g>6@8+1W=+RX940~rze(dH1+fTY3O`R-|05-H#s6#*Ov&1AZw&z1 zIA9VbAK#+9GjExm`6WaH3{MbuS%G4k!P*8Bk)>vM-7*E+}v=ltGMRqOljJlF5R+Vr8`UOh|E?z|89J2Y|JP& z?rul0hb|Gl5ZcS~I`woUO@C+SA3I7M^%~v}1`Sl!e%fkZr*i(oux!BgLUs$=g2~)~ zGw~GJIc9`RU{gvURC&K~-Y3IgddIiwJ6wx);fsmKjnpOs!%|JNTF;M&&OnRJrTNCp z+5pgKM)+^79Wx{*sjc>X!d%aj>-ibh%&9|r1_cd#i!}Z{3^eB|lRGG{jjcf?V+sl( zn%Jkk1hsxQDf_5T_x8lu%~mZ~FJdD$eO0A3;fUS?=67QD(Sjps>!r+P3!$`a@SVqj zm)a>DVO>Bd%_k=W$+6}B!rPNf2dTDyPs(EK`RBm>vWU#NrgcY&gmL)QF=53DIQa7<>-s(LJ`)@*6PsEW*Wc5=NRzf5!KAl4C>(pDU)x z20!!dB_rW{B|7c2N?r&G3GqtUsv!tLTOKIHnjIiKr6tTPVtW0jEO6Lnf_T>nqDS?2 z=92pvR3(OPCTdHa8`_wy;(LcuWAEu>!PV{;-RX z_BFj$Qh@~EM<+W`!oHTYS8S0+>rI*y+B9A=^K+5cwkErts?9>RQXWH~TUZsCVMmTA z+F;NB`S8@+J3>h%_Zy!q7zzwr-P0-R)|RaHnNAnEN$fW<-&Z!`LYy%oZh9E+Xn%mF z*P)m^@$OJiGTNo_B>XL)i1W3V9}N62j$Abqzo5QgR9L7$&qFM2R8cuTIVZSWSqRC5 zZfkKO8YY2Y^)9(3Jw=gu?09kqSQOCFSdB_6;QjTj`+0{jfadN0yFG3#yA?cug-vLH z24HSDOx0%~e<~m4VF!p?{t_?73odde!N0Qt&fOTdos0Ek`&0i~sm*aE=E4r1JiwMr zP4wjKZt9xzoYcfxEm48Th6*q`!Ws40EcJWP=BOD~twZ_dZX)8H4YPi_oC>r92o@OS z9dQP}!4r4qTeMv7GyGOWTvd2PiunH(*53kVaPVA1c0g+6>J?2Hx`?JyH3(Dprn_Hb zCaQD>UA#CECyf6=G-y0txxt?%pa8)D&uj`ZEsO#y#_$N+{Q;n4Zo|iATicl(% z($czQ6Ik!Ld1dU4r>o|A?7N^vWq(M$?~f}){&8iMoD7&Tp;WY5%{J?srw;w4y((C2 zUClyyYdunxEz=uX$A^fOek6mgnSCe zb0JEBzuL~T)*O0^z?14X;R`}8OVc`I_0$D@{>NEASPq&;pxQK2x-d2~!C3Ow-+`OB z|4;i*dQ+6o#CXN=fGt$`Mxi{6sm}dI1e1k{4+OjVs+Ktv!n`_zv;UU-hAwg5e3xZ< z|7CQZ)Wwuv=Ho)NwKKP|$h(#&5!aW49`)7W33r3T01O3e`%$zGlnMG&c^;#21{}KR zaa5iT!F#8`%>nTL zT~z#Hvh{$k+;I>d(P({IUU_=%G6 z4qKG;NczQmv#I?{%!F=L?~R`h0;i<-lTA7%7xlktI=BUmle52V(YF{lx~#z#38DS| z3HjPX?=viibLbHEC3*>9F413s+vI`>J;UcO<0)aUJ6G}8EqN!sC>UkAS4*l~X4|iK zRLXz&+B1de8W3v0_(VXA-VCMGZl-xPkuS48zb?t}`@?mbM<|ZP$-_M+8dU;6_j@f7 zg3NoKyZYsc$(Ov}?Jn&1;E~)Dcyc|UbqZ-;=Vl&~Ho8FttX6#2B%Wp{TySF6Gg45= z@?2KF)e0E$t#=}t&jOy zgZr44<&R`z;KpdOP|P;)A{}MwWP*fE#Quig&i>{+a?ZvD1txAW7_?Jk)o^BJWrKrZ z{`5?(7o1Auo~|tgy%s6x!*c8!AyE^chBC=Wq?^%gz4zswPp7d=eJU2f+5ICdleLUT zytEM6(8y32cvwWjM01z2>gYRW1vQ?2%SvSl5OS><_RkQSU)A^(uv-WnnS&int@SGi z5C3p$O_k#OEQwIuhD}a|?*aG1pHW==sseUk!?Ea&cFLbsmT_p;Z-!;;Qc(`49mYUU z60g-QVsXtP_2v_ZIDLf%!}I`BNS#EOTGrUc$BDp{bH<5_>CongU^jeU8c_>4g%Jc? z0c~5qW;1n}nGeVa>E~d&HZ|6bsB`KF2!zzrQqB3iPh6HU{t1mp z@fk)Vlp7E>UdA+KqInMrDbg&iX~)pBWaL8_LQvpD)$!$RO-!J;R&lsVH(AWB7sqPb ztk^F!RKz!{%UTxYmVU95H15xZ+e#O zWrn7-&vfus?+`3T&Y0>P&WH(>PUE&rZM4F*jsUGt8SBxMH989xr`9xy5wq|4)qz_b zGi^*#zBFI1o@jxl;zVLhsC@vU+mKRV+#ikW&NCKe?jRn3IKtzZdjpKG{gsRu4m6|C3Pdzrx5?$ig18+n!C|4Y09 z_9sl4Qn$0714p048gXcyP}M4T{70x!wT;#KA$FO9i{S+8D(FBVzRJVwX5nTz1$T+M$rjeA8*<2Q=5Gb?WUx! zcitp(>8m$8qllp#Vlf{J_QRTi1*z)hfM%G}rs5pbn4!;{*~?8xT*V@$XQyroX7biR zQ}$a*=2M9(vvL$8^U33tw7faK)LxYC6nDK8rod(@%C>P%WM zM6R`WmKK$9=)_r9k2QerSwhv_lQwW@(w1OILDi$-iiWfA;gP0JD;_E`IdtAQU3c*$ z8J|iu#$C6|S13TN!L~+vH|KfM!DP>5F;D^|(aBbbHry?v20jAxD>~;n=*-4AgNOLbfddSx8dh1pl&eD$Ye%R#V=wTs-druZRt@?be?)(a(G_O?ZuEV8%ymk=lf%X!79IUm`Ef^se z$Y5Y7g}e$hIBvgLLEl4_U&-*1A+p3N$No-mHg_&bAlCj%iG)n24u$eMvb;h@K=!Bp zSl9-(NlXTn(Y675smM) zQaa7fsd;jhiDhVcOK^tV)A70fi6mGa33}bMkh7?hWewO6tYtCv0}^Z* zVsQ5a6tfOoye5=VE5Sau+OtQYApo>_uRC#XjT;ct&{4mD5Y(X#SD^>In2LT9np;)z zf<|?B|Ji~`W=`9?Za?_kTZ>;i4aoA#j!|y#m(MdtR3<=jGGC$)zHHov8VC&Th><%Z z3w{Dj{yh18iSWomTh=V}ALJW1LZbS=5rwFIoSheh3o@2WyUR&gs$)}~xkk*(8R&_I z*^ekm`6N;@b_;m;WTQPMBg+6LCsiJ}CgF+_&JpAHzie7GbwC4+cndUNFvJ*wS!)O)}3h$Zzsmb#%)nDHIDZpuIk zE~*7wE#|u`%TPGzt-CBPCettbygV6sqUgEs&669CVz~Cy{yg9MOCBfvf#S?0L)NR3 zqP9s7@r3~>kbTS6psk3`Yb#j@FV1|+L(vjYO`M`jWP}GjB$rv6Q!+R?RDM%g=7LdD z0Ewo+OTUv+{p9{&^7IQ4#cwCM$`fki+fUMkl%@8K8<&u7dJt7@>3i(p#fO4<(>oBY zH}UsDYG4+8=W-dm>IKy`j~-(EKSxs{Cs;qb1ZB;<6R)}+NWLRQjy1$R@yNK46O5Cl z=T>B&fZpdbL0}r5vW3B1OJnCllY}SSTiF2pU>?1pO&8adc=zCH;s&;-6&)Iquik&U zX^yqWhIdc@hbiQoN!WkN*k-nD_sJ_tKB3AofFe)wG7jG`4R#<(AFcIU7CKc=9q6Lk z>AUk{*0?^vrVVK8sDEVBoX%v(NGM+#^z(KEqV-jN9&zOb#0bpZ0T#_@i!HFz!hyodNZPiLb~A8@ag+b(iqTu!Q3+> zHAy!lNy*gP54uw_9EU7wXQIv%%DSYX*Ul-2x%I9Y?pDnBLs_ZcuJe>gjDW#~Svz`d zlczk|69OY0068nLw76^{l%@z%Av#2hg3Laf`$IEOXc%JZcx$runI@a^ce{*L_L+uz zPYV%}sh=+vO4{C&0=aSMp?p~$gBKxE9f5Qo{e5J>zWdY)DnShFKdtxTAf+(i<4yy z%v_F8ai}&ed7d&!0=~HSa`RXO92}nol1lo2+O45IDtLn~pk39*FL=+ey1J8XWfg+J zqsO&PAK;ZjnaFkk-NZ2nmMb9pD*A7q}4w z|MUZ5b^f``pl>6eP?@p z>|VNsBwr)rAn30Wo`zbmnSzV0?4sr{G$fHYpyMv zrES1IJT?>T$i*Hbd*5l1n^pz~+2~S=#H1c>RrDFxZx3699~xjqUid47L@U>c$7{gy zp|6xt60SOp^K1GCQ9T{J=|*22APp{DSrNA6h>Gs#VZw)&so_7!|7aQcKv|yxJrI46 zF4Z=OfswaFT=5jy-OTw`n<1h(U{=;6Z@>F5aWxo>FU+eD;fIH!p8CPE%XrzPzV7V4 zg)cJ+{5{CYt5`)Ks!q}BH%5uFkfAjn=%k|`{jIu!=fg0)|0-OldfwJaazLNXA`OFm zt8s?_@b}E7vC7Fh4l9+wWOVy?ngO;+&nm!+EAs3A-#k^lTSB?}Ku&Jufjejr=c`uhhcre%Yq`O!&XJxW>#G)Qo* zY79nWL$lhqn$3lx?MKPk9a(JdpmGKfS(q?>gRcD3w3ap@+;o#|TH7lnN0hm!0Ua1j zpTtAbu>dkd@6w#u*t%o-3QJGn61vk?6-X$NgL3V$9PLJFjJKGoQEwyyT!9DYuJ`|i zi@n>mJ4K5lx@u#4TZu>@&trp76A`Cvl8RREcVhR+Z=-ERyQIy|wK73)qtD0_E@@kS4OTSyL*t?M68QVV z!Hr8B-M}&-qMf%22;XDroJ!WC`4q(W>*FWD_Gs~IopkM#h~ncx%aVYRf(E+Tm~@Xr zcUd1zv#J02ToyY3m-IMwS*JEnOhZginDOkMDDKAvho;-6ea8^>n6oj$%6VM1H4K~x z7}`;}$|L0mRtYp&{n|#`FdnIPiC-Qj>sIc>p+5I2b_)K|b#4<{jIHo@B9@0?DaHOU zp56|}bUp!)s|lhN(_qR|#Y&OUjr)LEA4$^2wQ#c-eH0c;iu^vgh)SOe?^^#|Tg>_= zN%cMxo?YIuWCNP+WMVVaMqE(SNggl$jrRqz8PHK5#`P@1iCq>mZ*kYkoN1TIExR$QxC_QXak{C=5e0(Ylo#ex6s-Jd0$cO&3xCM z`rYX*a21U#+BR+WNj~~}_!n&v4aC%W1<3{tb^DV9Jp@}V&HE`k0j5OK38pflX5HZZ z693OAqKv5fL9n{(Q-Agb;3HL1eSc%qAKgh>ei{^byE1iKOJZc)f1wij?2#v~C{@9Y z?@P&scq0-3zQ;zDO{4I}6RnQYB$R8uixQt_Xyu`l%e=s>h}tb)LOAXyA)mS^YH+d4 z_6Ar|UHMM~Vz-CQ?C6;XU1MrD@rZ<7gLC$HIu6d=zrbt40atFvYUF71EOsZ8FetKU zMFg;W{U*i$4>*=)VkxreZ24?)ZF)%OGR|=iwtG+ffXB|;+v`c@tJqtT3ZVbcaice*Yl7}n)vK6l$a=f;^VGeu#p_wi$%uQ z1Mbse!3U0~`_F?Xp02)id9aA9{wwwU9Or_Ti+|dE0{^?rV zB>^PakCkRV8hH`wPk&c_u$K+^ccB&NT+`h`E?Cslb-!UMPRU1s9b&htFg4T{j8rZ6 z^m@WV_}DE|D(|KTMs|j!ex|ew$^~I|-hlU5Ip^bnXYZxO0JbU?-&);=iY-TUp`iEs z^uF|mRNfok)B~fxCRhmaKi&ntXDG;zm!C%GT8CX;)O+oQk&C>z1ZUrZgDrl87J#~7 zWI>4WT;2#pZh`1gl}5Ab%dt)A+gBMtW@t_PcFHrkIH_hhyI1@C2d zR1mqM*I-f!Vs$Pb)g?HDsdYqokGAb%bbXP5APRry6&Brm_PsBFM88X;Kpui|`6r&^ zh_W-wXslyHOJtjFV(g(|<}=r(aCzMv-te#)P|e=#yjDz4t4WFfd__{qEO?p66Vr7X)QcyH_g7nDARLjFCxTQ zCeDxX{haKWjsT2w{iK|DV~3~~eBlu2B@|C9(e(}vY+xa$BqFPgT6Qus(#>_r5fq_n3(bwjS}9{yE-=k`wzzTx4_N(X6BrY z4j`D%%jRH1Xc1HTY&PWkhY&=S?v1xU}*t|ct9G?7b5Z!8`` zQXkM;KmS3z#|FUj2S1T&dII7%kakr<_^{p*Bnq2{oYTgC$NkzJ3SI{8Ofil(tyZ09 z{LTp<_Ou`UBqeofb8QNfi5szM<)q!rJn_-*X(a+Iv4U$Ve@6{KRwKGC1{B$N01n#J%)@`~nhR!i?aNR>6#q9IT<)A5LmtldxuD7S4|C#dhu$X-~&q?-W4=sle`KyF(VM;6HWHAO7iz@V~Ja` z3{nAEvl~lRBL%C)zNhiusAODS-9)+0pno5da*!bw3lXhtpmn&2rG?e) z9scv*1&;Dr#bx_09cnnHwUhwHuSJhWhgkfPD)R;D{qs1~|I|e}_j+WVZjjiduk@>5 zq-P0LbbS-uaQ`};6)MUdVITFwyRwVygnCWE3A1kUYs88rv0g~MGUoWOu{n2^nhAUj zv5%cB{Q3kg$ zsJS&LA!KU#wES<+O|}R0S%V5CkUG+dTSH$cH^2`CI3-6F5AWNTRVg5G&clczTC$wh?x{E+fxhjPZ>>dIK$w1&MqRFGGq>B zI?45}imag+ao|a!=`a}qT&Ue$N*Tfk*;@6VYT<*CiRjq`Z#P@a$r&pz&$Dm(o0X`` z6}D{kN=zobMYp2?lE$dL?iwy&^VNC(smJM+D-q7rdW!%5l$-uctEQ*z#x828obk{= z2@^c${en{rZg#T~vKR*qNON7>!fltUJaV%vlkM)$NIJj?1D1WiUxH=g`S}%bkWulL zXVEB*SR58M+!2L#82_CnAxpv;`kxmec;hEv37F47ed0}yhIHSx#g5RfV$*na->uF6 zrU5A#*5>Uf>q>;4ZtN?C7UA&U&a@OhiFrXv9$vn=R48b>4lVQ&&GMaIb&2yvx=#7Q zgEvof3Ij8FHUpX4C4@ijP9^mPhf{TAX&r$7BLo*Yx$>aX(RP3DZH-c%iU*?aj}rXz z$T(m&k(9%em*kp(l-#1YC?xw1QMzt(QoeyU@@whfHcU~4oc|FA$zXa?nn^*Uk#H-N z2O%Lblm-06Eg};ccdJA{r{*ar5r`R7g9> z(1r&%zpN7@mM2PLBcNNUKS2P6P(vJ6ZgnmBGmzUa=gqSwUMV?r_=I%fL_rcQC`Fw zxyIr#*TNMJ#26gHv|xOhE5N&j{7E))^iGNbY4I0ui@c(6CQQ&mztRno8EfnGAJRbe z!GXA0+l6Gu>Sz-}{W<~9?v}((p@NEJk*Dc7Fjw`v7p~~#ZW;~e`X-})w%y0el9(OW)$ zAgrz1uxtH%dYiZKK^Pr_l`Z(5zO7&vlFj2vdRLJ}&rmdmT8?C)Fhcz=&}P&8**E7F zkM-UrWsicH6@egZ_9+5@v{`TLz%oq5!@1j{L}HNmRv?8j1!bLz>VoX2;uq^6Uk3vH z#bQ=^sV+6fXZ##kzr`5t6X<+jI`Rm{la4CVCz#DMK!yt>Wea80r0N7)_qim;L+Oq? zi7IW8t7O3&viHyhDZE-Oa$?h2P@^J3{ensy0R(`o$C9MXPP_*fT8vQ}J@}NE6?;u4 zV7bPqXOeRR?h=U);(WRgp@5IqRbjAtIriQRP;XN3G1pf^=*V)#9^wPH5JVm00A8)Y`N6o!YSOfj;dnVQf6jqx! zc`@?_J-*K`L66amg^JdF1~z5**8`M1%5oo)c$F*=HJjLOr14;(^RXHybD54-z=SWN z^dwMrS>5+UqarM zZt%AGc!D<*@CjtO!PEA8L*;4q@H{{<2N?&!OZW-h@)?gTdYL1KkR#hp2gE7MNKi0L z7wT929iJ<*$}6m|_XuBLqPVH(@|Lm0XOK+sA)I<98BL<_KLy{QkdD^Y1 zJxpkjAS0qh(EW32oDR*84{|edHDqmfj+bwxLv(i{Fm2SAVC_kS%`cTn9!`xHiewTz zeZ6(eXZ*BE1eHA^cH3{4UcMP?({~Z;ggNIZWclUT_@CM_AW?AFWA0+sO^lHr*zd`M zCrenBTS1d(iMQoBo0y?L8wM_)PGBwWNw*Phj@*J#2~)Podx7I{a#a};S~^xsNTK!s z2VD=I#{Z~zbv4#2sN)FAY7c8-_2%Xs*LE2VyzH$LJ0~GFR0bEe_6nlKA}uIMQijGEWyVGxPz@F=Z@vy~_ryPqAIE~fdCVwQ=M8t3(k6m>Q#$>?Jf zQ-~5Xt)ivF(;a^mqn+B&Ra60|-81ar6tZjQ<77*$w=40LJ*HlAttOgn4X<%bs}sx0 z{b1lpog5-wHy1jbHH(iXCaT$f*ZRu?)`FZcX95z=b{$5hNk8;H zhJ0vfw83ocB!4dCBKgyL1bGI0W5OrCaXQcj`3`b4#A#Z%Vp!QDA%oi=+-x6kM~k((CypWr}Dz`=iyo^;1G zCR&eIGo$GR#JZWgyr0RJ#hdvyz~)FLq$8A&ek46o4Ui|+r@EV3nxFeCT(bKcp(pJa zx;4Jkn^&mYGON!n3!@Rz_@Hw%C#VB0&%-J6#$%t5-P)V`NGT#Av}4#nA1obSm(?z^eA{~T&F<{sFTg9AA_zxWgep{p8OLDsPdUJtA{3=lsz(UE1t@n}7B{V=U*-d~S3*>swIp#EBHtUvMJmA9Jb3X+A#aXX9b(5qUHXq#&CkwZ1G8{$JS3;1k0j^adzZ{lCTyLHT5bmx@+#xjX0^?4M!nB+89MZI+6^88y$1sEoF64LiJxz) z>UDQc2(SrbLI0PKcE+ss>yVKn)S?6uq;*7?-4yZbV9Dr#5ToAY6b`|{_jn|^QId1x zye8rKS=NBpD`-B@`J)lkil1}vW|W^~traY~Ra~yQIb`Q27oYaz&X6K-<0dQLw4$;U zKd?3tRKf0rv!SO=Y(Gl(L3{hqUXby-T>B#uHC~zZl+6HKuL-&rFHSgR{@Pk|>6Q5T z&j=SfJeKZ=b$9iN5$ETn^@C1@q%0_Ik{*`2Pq2-J(8Qy z>>+#H6tUkVU_TO%Ql9a?vMcl)^N-U-hX$D;kT!y#Gy}v%)T@H~#~A_N+d$?=-fop+ z#KalihT<-$FVdbjq2Gk=OQbDaP0WMpCQSOGp{$56``DFYBDo)^v5gQ7Gf7JgN~iG! zEH>5f!z^?olBH3t z(l~%-hy5lO(f7J0h~D;qgF1E-n(Y<=$$Wk$rNK;1DBTsZ{N`l|^-?P7KXL~4XI>Gm1BYgIm*Hvl3a#xCTf z<*iT%)NjwMxY;7>U24JFa<`bq;qSyL2o|Xh^PDe44YoGE9<;S}XSm3|P_{2NJdZw& zLg6>h5aR*YBG}uakL9|nq~_R1-0V7202h_w*LY!C#gI{T(JFW1V56RNFO=wrMt%PX zP(dFyZnQqN85nD&`GK{4c`zH!R#i)OLbStP6UaNHiovzbLS&o)qq#4!T4-fI8PzF{ z;$pS*d#~q_Y?H$aFyBaDpbDSet>TEcswmmtIyQZKQ|_CXS7!KX7WI|FbcA!gL)?F( zRe0uZAfPF@F2)JE6jRWju2u4r4>RxB;mHBNY>~uP+h@SK{N|z;bF$gKa%KOHZymh0 z`+&u#k~Mou`Ygq5Ui?R?cR-|Tt7UCrCkuA3t~e>g`kdHW#G|Qz;D_axLYp%I0Pt&M z9s#a01lqiCv)2SJ-|SxyPm&uGUHN?^Hl@=+(Q~cGED7$J3=ROwJh>5*HtCm92n{bm z*p;3uOlMb00UBfDGk&J9AoUkqf0r&6hYuu6;`0j?gaWkU9N~2e5p?Y%f256h@u1x{ zuYBvo%5m@sjO}#=9;in!eeXeNYj1F9E_T00>C|9XOysn+K-89Q4y9pvr$0;fc*|!5kiPC_NtRN&TEt2^O z$D4xfJINN0W#_CJCM@(PcRTK6Zpv?%MX}XS64D+>8+dv$gM2y6OU7o+p;lD8Hyos$ zT6J{!z`K$%17}QKD1Xrv=7ePkm><R{1H~ zw?Y}Slo;rbd{=e;&@LANw32n>&&KL{}X<7%oJ5&2hT6N2Xv$f?!$wO-b&NZHfO=>)KP-Lvma- zH7-t-TJ<0o9P&Q#bUA&}@n=_R8ezq>GwY$EY%5J+mt}1CgNs6zeW=gIYVxmuJBwq~ zRq7505(bc7tE-)mChmKT7sVKb6z+qb2~LK~GX7r4rg;Lu-NCCTmazAqj^X709phru zZJX^09v0|pD!XOy-d)ZjVj|^Ty|_2t)rG#!4DeJm;tIACno7TJV5M%kS}sF*aMFI;UZr;QjR zcZ-vQOS-H(g+g2(FI8KZOi?_a{+zwL_%YzzEA*S$QI_b-}Wpi>zfCeg7e%(nkxv^7+C7EE4a zz~s$1VJWrPmpKl87-1V4D-T&3W|X8W($(v_=|47+$TS{Z2A5)@FJSxH=*g&}vjdc- z?;ftiMb3)fo)`>_Z%o9l3kX-IFZSH2`o!kpmVN6{Z`W!Z$#BZN1(Q3uB4A%6ia|P- zKud~HQjX*d^*#_LDC~LjBU{FE_5h9v*l#@Jd0q^U@s^up$lz@7#9%U)OFOZsjb9~r zg|81SJSK^Sitz-eeIA_Rr|S$ftLafkA7Ra;?-spGu$&?TmhQv~_*P!ossdMB5?s(5 zN6I{Tjo>@nuX-Rr@ZiiL*+a2-tuU|EItpxJXpma8lSW@EUvH#sM^J@rERUpnJGgZ@BDwOss4BS;h6QmOqis=>1s%Jws$%U5_%I9k+Jf zptnnHjB)+eJJhk@QW-p)sR=mX)5OWPWM}%5h*Co?%f%-7BwH0r-Zm~QhkP@v7@csb zG=zPcG?wdHrxsQH5{M?&FkjLSqqujJTgkAy6ppoxmzE^O4wX{V$;arKfKjvb;F75& z4sQanEw1PC*g_xIFfiGPr@=pIf>2L>lZiubTV5cI;p|(lFZbmG2DazJ1dF$UCfQ@=qC|%s;79RnwhdUi1WSLUL z8b{jDBX6sLChW8;EkHGJks4{+YDEYyG0~ZNyW+E!PW}bjxOsf|vzy|~_74wZu*}&& zDtNoGWnIv9P0nm42{WhuFU^f$uwA{RS}14Om~(2d2(ba%uT6idR49cvqWB4hp5gVr z9b>ZV2A&?ms6QMcHK3_0cqb?1Fmmdu<>--FVt0^PCLOee1~-JOKRxZcvl5f#x%RDYDNb5yW5x{j z$fxe`Kx1u`Dw#!oO12I5>Z>4%pJZ;Al7ysJzb1l1FJ|8l#LToiCyC;7vPKdCP`ewv z10z-JKWymZABU8%kxUl3$opQnmjomk_+lRA(~>xct+wq(Ig`SjVS$Xe$21tG?aKlw z{Wc-6v~&`@9PDg}$Tn}H*PBa!{wxi>Cj4^DxLpTS9D&t&DC#mAz~5{oNBs}AEDiti z+nWS@U{b@b!Ak{dmzQd8r<}GoVV~J!_auh_6+112L-aKTo}ghDXREfG?gIR+^m%DD zDQB77JyUan)#b~M9XEI_{j5r8uejE1%>T!#l*!~BOO^^*v-5E95@wi7U+9zzLupS{U>*VnX z$aXyX(Jn2OI#i)W)-1!S&XWb`T7Ur>;?z5J`17e=9o;gs>J4yi>bF;8Y2n(@J-I6W z0W61~%aYdLsh|2v*seyoMzbb$rFdc3ApizoH}fR5fsl+m5!bNOa&&5qC4`U*#96rE(xL!0Y61Yt3mdJGXEPt5nQE*oyDWu1tiwXB?5k~0EbHJI^`=p$lKh)J)UGa8qg2G$nKM7XW}O}d`=kz_n! z7f+rh$x@6F=!)<_4@dh|@8NQA9*49Em=`NXtUbuiI6|EYiOyV_R(gM^YZ+0T=Dn7A zORQ1y%zujANZ5-kZfzyl00021MU`9dAu@3Q0fV^^fbeCz;O^eB#Ao{g000001X)^P CO<`OB literal 249936 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Ð&evo)o@_NRJ`p(8PJv(zkJa}3pl;%;^<3Fc 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